/trello

Primary LanguageJava

Trello Clone Project

enter image description here

enter image description here

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ Hello Introduce US

์œ ํ˜„์‹ ์ •์ด์‚ญ ์žฅ๊ธฐํ˜„ ์—ฌ์ค€์„œ ์–‘ํ˜œ๋ฏผ
enter image description here enter image description here enter image description here enter image description here enter image description here
@20240729 @golden-hamster @EtherXion @duwnstj @asitwas729
WorkSpace, Board CI/CD, Auth Comment List Card


๐Ÿ“ Technologies & Tools ๐Ÿ“

โญ Github Rules

โญ Code Convention



ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ

๐Ÿ‡ Auth

  • ์ด๋ฉ”์ผ ํ˜•์‹์˜ ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ํšŒ์›๊ฐ€์ž…
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ์ €์žฅ
  • ๋™์ผํ•œ ์ด๋ฉ”์ผ๋กœ ์ค‘๋ณต ๊ฐ€์ž… ๋ฐฉ์ง€
  • ํƒˆํ‡ดํ•œ ์œ ์ €์˜ ์•„์ด๋””(์ฆ‰, ์ด๋ฉ”์ผ) ์žฌ์‚ฌ์šฉ ๋ฐฉ์ง€

๐Ÿ€ WorkSpace, Board

  • ํšŒ์›๊ฐ€์ž…์‹œ ๋ถ€์—ฌ๋ฐ›์€ ADMIN๊ถŒํ•œ์œผ๋กœ๋งŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ์ˆ˜์ • ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž(Read_Only ์ œ์™ธ)๋Š” ๋ฉค๋ฒ„ ์ดˆ๋Œ€ ๊ฐ€๋Šฅ
  • ์ˆ˜์ • ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž(Read_Only ์ œ์™ธ)๋งŒ์ด ์ˆ˜์ • ๊ฐ€๋Šฅ
  • ๊ถŒํ•œ(WorkSpace, Board, Read_Only)

โ›“๏ธ WorkSpace invite User

  • ํ•˜๋‚˜์˜ ์œ ์ €๋ฅผ ์—ฌ๋Ÿฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ดˆ๋Œ€ํ•˜๋Š” ๊ฒฝ์šฐ ์ผ€์ด์Šค ๋™์‹œ์„ฑ ์ œ์–ด
  • ๋‚™๊ด€์  ๋ฝ(์˜ˆ์ƒ ์‚ฌ์šฉ ๋นˆ๋„์™€ ๋™์‹œ์„ฑ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ์„ฑ ๋‚ฎ์Œ)
  • ์˜ˆ์™ธ ๋ฐœ์ƒ์‹œ, 10ํšŒ ์‹œ๋„ ํ›„ ์˜ˆ์™ธ ๋ฉ”์„ธ์ง€ ๋ฐ˜ํ™˜

๐Ÿ“š List

  • Board๋‚ด์—์„œ List ์ˆœ์„œ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
  • ์ˆ˜์ • ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž(Read_Only ์ œ์™ธ)๋งŒ์ด ์ˆ˜์ • ๊ฐ€๋Šฅ
  • List ์‚ญ์ œ ์‹œ, ์—ฐ๊ด€๋œ Card๋„ ๋ชจ๋‘ ์‚ญ์ œ๋จ

๐Ÿ” Card Search

  • JOIN FETCH๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ N+1๋ฌธ์ œ ํ•ด๊ฒฐ
  • INDEX๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ์ตœ์ ํ™” ์™„๋ฃŒ
  • Card์˜ ์ œ๋ชฉ, ์„ค๋ช…, ๋งˆ๊ฐ์ผ, ๋‹ด๋‹น์ž๋กœ ๊ฒ€์ƒ‰๊ฐ€๋Šฅ

๐Ÿ”ฅ Comment

  • ์ˆ˜์ • ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž(Read_Only ์ œ์™ธ)๋งŒ์ด ๋Œ“๊ธ€ ์ƒ์„ฑ ๊ฐ€๋Šฅ
  • ์นด๋“œ์™€ ๋Œ“๊ธ€, ์‚ฌ์šฉ์ž ์•„์ด๋””๊ฐ€ ๋ชจ๋‘ ์ผ์น˜ํ•  ๊ฒฝ์šฐ, ๋Œ“๊ธ€ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ

๐Ÿ“ Attached File

  • AWS S3๋กœ ์ฒจ๋ถ€ํŒŒ์ผ ๊ด€๋ฆฌ
  • ์ˆ˜์ • ๊ถŒํ•œ์ด ์žˆ๋Š” ์‚ฌ์šฉ์ž(Read_Only ์ œ์™ธ)๋งŒ์ด ์ฒจ๋ถ€ํŒŒ์ผ ์—…๋กœ๋“œ๋ฐ ์‚ญ์ œ ๊ฐ€๋Šฅ
  • UUID๋กœ ์ฒจ๋ถ€ํŒŒ์ผ๋ช… ์ €์žฅ

๐Ÿ›Ž๏ธ Alerts

  • SLACK์˜ WEBHOOK API ์‚ฌ์šฉ
  • JoinPoint(AOP)๋กœ ํ™•์žฅ์„ฑ ๊ฐ€์ง



๐Ÿšจ Trouble Shooting



๐ŸŒ Architecture

Service Architecture



๐Ÿ“‹ ERD Diagram

erd



๐Ÿšจ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

โ”‚  README.md
โ”‚  .gitignore
โ”‚  appspec.yml
โ”‚  build.gradle
โ”‚  Dockerfile
โ”‚  gradlew
โ”‚  gradlew.bat
โ”‚  settings.gradle
โ”‚
โ”‚
โ””โ”€src
    โ”œโ”€main
    โ”‚  โ”œโ”€java
    โ”‚  โ”‚  โ””โ”€com
    โ”‚  โ”‚      โ””โ”€sparta
    โ”‚  โ”‚          โ””โ”€trellocopy
    โ”‚  โ”‚              โ”‚  TrellocopyApplication.java
    โ”‚  โ”‚              โ”‚
    โ”‚  โ”‚              โ”œโ”€config
    โ”‚  โ”‚              โ”‚      JwtAuthenticationToken.java
    โ”‚  โ”‚              โ”‚      JwtSecurityFilter.java
    โ”‚  โ”‚              โ”‚      JwtUtil.java
    โ”‚  โ”‚              โ”‚      PersistenceConfig.java
    โ”‚  โ”‚              โ”‚      S3Config.java
    โ”‚  โ”‚              โ”‚      SecurityConfig.java
    โ”‚  โ”‚              โ”‚
    โ”‚  โ”‚              โ””โ”€domain
    โ”‚  โ”‚                  โ”œโ”€board
    โ”‚  โ”‚                  โ”‚  โ”œโ”€controller
    โ”‚  โ”‚                  โ”‚  โ”‚      BoardController.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€dto
    โ”‚  โ”‚                  โ”‚  โ”‚      BoardRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚      BoardResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      Board.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€exception
    โ”‚  โ”‚                  โ”‚  โ”‚      BoardNotFoundException.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€repository
    โ”‚  โ”‚                  โ”‚  โ”‚      BoardRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€service
    โ”‚  โ”‚                  โ”‚          BoardService.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ”œโ”€card
    โ”‚  โ”‚                  โ”‚  โ”œโ”€controller
    โ”‚  โ”‚                  โ”‚  โ”‚      CardController.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€dto
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”œโ”€req
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      AddCardUserRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      CardSaveRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      CardSearchRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      CardSimpleRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”‚  โ””โ”€res
    โ”‚  โ”‚                  โ”‚  โ”‚          CardDetailResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚          CardSimpleResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      Card.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€exception
    โ”‚  โ”‚                  โ”‚  โ”‚      CardForbiddenException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      CardNotFoundException.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€repository
    โ”‚  โ”‚                  โ”‚  โ”‚      CardRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€service
    โ”‚  โ”‚                  โ”‚          CardService.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ”œโ”€comment
    โ”‚  โ”‚                  โ”‚  โ”œโ”€Controller
    โ”‚  โ”‚                  โ”‚  โ”‚      CommentController.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€Dto
    โ”‚  โ”‚                  โ”‚  โ”‚      CommentRequestDto.java
    โ”‚  โ”‚                  โ”‚  โ”‚      CommentResponseDto.java
    โ”‚  โ”‚                  โ”‚  โ”‚      CommentSaveRequestDto.java
    โ”‚  โ”‚                  โ”‚  โ”‚      CommentSaveResponseDto.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      Comment.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€repository
    โ”‚  โ”‚                  โ”‚  โ”‚      CommentRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€Service
    โ”‚  โ”‚                  โ”‚          CommentService.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ”œโ”€common
    โ”‚  โ”‚                  โ”‚  โ”œโ”€aop
    โ”‚  โ”‚                  โ”‚  โ”‚      Alarm.java
    โ”‚  โ”‚                  โ”‚  โ”‚      AlarmAspect.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      Timestamped.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€exception
    โ”‚  โ”‚                  โ”‚          BadRequestException.java
    โ”‚  โ”‚                  โ”‚          ForbiddenException.java
    โ”‚  โ”‚                  โ”‚          NotFoundException.java
    โ”‚  โ”‚                  โ”‚          UnauthorizedException.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ”œโ”€file
    โ”‚  โ”‚                  โ”‚  โ”œโ”€controller
    โ”‚  โ”‚                  โ”‚  โ”‚      FileController.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€dto
    โ”‚  โ”‚                  โ”‚  โ”‚      FileDto.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      File.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€repository
    โ”‚  โ”‚                  โ”‚  โ”‚      FileRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€service
    โ”‚  โ”‚                  โ”‚          FileService.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ”œโ”€list
    โ”‚  โ”‚                  โ”‚  โ”œโ”€controller
    โ”‚  โ”‚                  โ”‚  โ”‚      ListController.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€dto
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”œโ”€request
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      ListSaveRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      ListUpdateRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”‚  โ””โ”€response
    โ”‚  โ”‚                  โ”‚  โ”‚          ListSaveResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚          ListUpdateResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      Lists.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€exception
    โ”‚  โ”‚                  โ”‚  โ”‚      ListNotFoundException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      ListNotInWorkSpaceException.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€repository
    โ”‚  โ”‚                  โ”‚  โ”‚      ListRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€service
    โ”‚  โ”‚                  โ”‚          ListService.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ”œโ”€user
    โ”‚  โ”‚                  โ”‚  โ”œโ”€controller
    โ”‚  โ”‚                  โ”‚  โ”‚      AuthController.java
    โ”‚  โ”‚                  โ”‚  โ”‚      UserController.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€dto
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚  AuthUser.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”œโ”€request
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      GrantRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      LoginRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      UserJoinRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚      WithdrawRequest.java
    โ”‚  โ”‚                  โ”‚  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”‚  โ””โ”€response
    โ”‚  โ”‚                  โ”‚  โ”‚          LoginResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚          UserJoinResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚          UserResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚          WorkspaceUserResponse.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€entity
    โ”‚  โ”‚                  โ”‚  โ”‚      CardUser.java
    โ”‚  โ”‚                  โ”‚  โ”‚      User.java
    โ”‚  โ”‚                  โ”‚  โ”‚      UserRole.java
    โ”‚  โ”‚                  โ”‚  โ”‚      WorkspaceRole.java
    โ”‚  โ”‚                  โ”‚  โ”‚      WorkspaceUser.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€exception
    โ”‚  โ”‚                  โ”‚  โ”‚      CardUserAlreadyExistsException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      CardUserNotFoundException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      DuplicateUserException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      InvalidPasswordException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      UserNotFoundException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      WithdrawnUserException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      WorkspaceRoleForbiddenException.java
    โ”‚  โ”‚                  โ”‚  โ”‚      WorkspaceUserNotFoundException.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ”œโ”€repository
    โ”‚  โ”‚                  โ”‚  โ”‚      CardUserRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚      UserRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚      WorkspaceUserRepository.java
    โ”‚  โ”‚                  โ”‚  โ”‚
    โ”‚  โ”‚                  โ”‚  โ””โ”€service
    โ”‚  โ”‚                  โ”‚          AuthService.java
    โ”‚  โ”‚                  โ”‚          UserService.java
    โ”‚  โ”‚                  โ”‚
    โ”‚  โ”‚                  โ””โ”€workspace
    โ”‚  โ”‚                      โ”œโ”€controller
    โ”‚  โ”‚                      โ”‚      WorkspaceController.java
    โ”‚  โ”‚                      โ”‚
    โ”‚  โ”‚                      โ”œโ”€dto
    โ”‚  โ”‚                      โ”‚      WorkspaceRequest.java
    โ”‚  โ”‚                      โ”‚      WorkspaceResponse.java
    โ”‚  โ”‚                      โ”‚
    โ”‚  โ”‚                      โ”œโ”€entity
    โ”‚  โ”‚                      โ”‚      Workspace.java
    โ”‚  โ”‚                      โ”‚
    โ”‚  โ”‚                      โ”œโ”€exception
    โ”‚  โ”‚                      โ”‚      WorkspaceForbiddenException.java
    โ”‚  โ”‚                      โ”‚      WorkspaceNotFoundException.java
    โ”‚  โ”‚                      โ”‚
    โ”‚  โ”‚                      โ”œโ”€repository
    โ”‚  โ”‚                      โ”‚      WorkspaceRepository.java
    โ”‚  โ”‚                      โ”‚
    โ”‚  โ”‚                      โ””โ”€service
    โ”‚  โ”‚                              WorkspaceService.java
    โ”‚  โ”‚
    โ”‚  โ””โ”€resources
    โ”‚      โ””โ”€db
    โ”‚          โ””โ”€migration
    โ”‚                  V1__init.sql
    โ”‚                  V2__add_file.sql
    โ”‚                  V3__add_timestamp_columns.sql
    โ”‚
    โ””โ”€test
        โ””โ”€java
            โ””โ”€com
                โ””โ”€sparta
                    โ””โ”€trellocopy
                        โ”‚  TrellocopyApplicationTests.java
                        โ”‚
                        โ”œโ”€comment
                        โ”‚      CommentServiceTest.java
                        โ”‚
                        โ””โ”€domain
                            โ””โ”€card
                                โ”œโ”€controller
                                โ”‚      CardControllerTest.java
                                โ”‚
                                โ””โ”€service
                                        CardServiceTest.java
                                        CardServiceWithLockTest.java