Skip to content

Latest commit

ย 

History

History
49 lines (41 loc) ยท 2.35 KB

File metadata and controls

49 lines (41 loc) ยท 2.35 KB

MapSy-BE Project Conventions

Project Structure

  • Multi-module Gradle project (Java 21, Spring Boot 4.0)
  • Modules: MS-Common, MS-Auth, MS-Member, MS-Place, MS-SNS, MS-AI, MS-Web

Controller Pattern

  • Controller๋Š” MS-Web ๋ชจ๋“ˆ์— ์œ„์น˜
  • XxxController๋Š” ๋ฐ˜๋“œ์‹œ XxxControllerDocs ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ implements
  • XxxControllerDocs์— Swagger @Operation, @ApiLog ์–ด๋…ธํ…Œ์ด์…˜ ์ •์˜
  • @AuthenticationPrincipal CustomUserDetails userDetails๋กœ ์ธ์ฆ ์ฒ˜๋ฆฌ
  • @RestController, @RequiredArgsConstructor, @Slf4j, @RequestMapping ์‚ฌ์šฉ

DTO Pattern (Request/Response)

  • ๊ฐ API ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ๋ณ„๋„์˜ Request/Response DTO๋ฅผ ์ƒ์„ฑ
  • Request ๋„ค์ด๋ฐ: {๋™์ž‘}{๋„๋ฉ”์ธ}Request (์˜ˆ: CreateFolderRequest, UpdateFolderRequest)
  • Response ๋„ค์ด๋ฐ: {๋™์ž‘}{๋„๋ฉ”์ธ}Response (์˜ˆ: GetFoldersResponse, CreateFolderResponse)
  • Response๋Š” DB Entity ํ•„๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ DTO๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ (๋ถˆํ•„์š”ํ•œ ๊ฐ€๊ณต ์—†์ด)
  • DTO๋Š” ๊ฐ ๋„๋ฉ”์ธ ๋ชจ๋“ˆ์˜ dto ํŒจํ‚ค์ง€์— ์œ„์น˜ (์˜ˆ: MS-Place/...place/dto/)
  • Lombok: @Getter, @Builder, @NoArgsConstructor, @AllArgsConstructor
  • Swagger: @Schema ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ํ•„๋“œ ์„ค๋ช…
  • ์—”ํ‹ฐํ‹ฐ โ†’ DTO ๋ณ€ํ™˜์€ from() ์ •์  ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ

Service Pattern

  • Service๋Š” ๊ฐ ๋„๋ฉ”์ธ ๋ชจ๋“ˆ์— ์œ„์น˜ (์˜ˆ: MS-Place/...place/service/)
  • @Service, @RequiredArgsConstructor, @Slf4j
  • ํด๋ž˜์Šค ๋ ˆ๋ฒจ: @Transactional(readOnly = true) ๊ธฐ๋ณธ
  • ๋ณ€๊ฒฝ ๋ฉ”์„œ๋“œ๋งŒ: @Transactional
  • Member ํŒŒ๋ผ๋ฏธํ„ฐ์™€ UUID ํŒŒ๋ผ๋ฏธํ„ฐ ์˜ค๋ฒ„๋กœ๋“œ ๋ฉ”์„œ๋“œ ํŒจํ„ด

Repository Pattern

  • JPA Repository, extends JpaRepository<Entity, UUID>
  • Soft Delete ๊ณ ๋ ค: deletedAtIsNull ์กฐ๊ฑด ํ•ญ์ƒ ํฌํ•จ
  • N+1 ๋ฐฉ์ง€: @Query + JOIN FETCH ์‚ฌ์šฉ
  • @Repository ์–ด๋…ธํ…Œ์ด์…˜ ์‚ฌ์šฉ

Entity Pattern

  • SoftDeletableBaseEntity ์ƒ์† (isDeleted, deletedAt, deletedBy)
  • UUID PK: @GeneratedValue(strategy = GenerationType.UUID)
  • Lombok: @Entity, @Builder, @Getter, @NoArgsConstructor(access = PROTECTED), @AllArgsConstructor(access = PRIVATE)

Error Handling

  • ErrorCode enum์— ์—๋Ÿฌ ์ฝ”๋“œ ์ •์˜ (HttpStatus + message)
  • CustomException(ErrorCode) throw
  • ErrorResponse ํ‘œ์ค€ ์‘๋‹ต ํ˜•์‹

Commit Message Convention

  • {์ด์Šˆ ์ œ๋ชฉ} : {type} : {๋ณ€๊ฒฝ ์‚ฌํ•ญ ์„ค๋ช…} {์ด์Šˆ URL}
  • type: feat, fix, refactor, docs, chore, test