Skip to content

13 Coding Convention

2hwayoung edited this page Apr 15, 2025 · 1 revision

ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ๊ฐ€์ด๋“œ v0.1

๋ณธ ๋ฌธ์„œ๋Š” ํŒ€ ๋‚ด์—์„œ ์ผ๊ด€๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ๊ณผ ํ˜‘์—… ๋ฐฉ์‹์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ & ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜, ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋ฅผ ์ •๋ฆฌํ•œ ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค. ํ•„์š” ์‹œ ํŒ€์›๋“ค๊ณผ ํ˜‘์˜ ํ›„ ์—…๋ฐ์ดํŠธํ•ด ์ฃผ์„ธ์š”.


1. ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

  • Domain ๊ธฐ์ค€ ํŒจํ‚ค์ง€ ์ƒ์„ฑ
    • ๊ฐ ๋„๋ฉ”์ธ๋ณ„๋กœ ์ตœ์ƒ์œ„ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ํ•˜์œ„์— ์„ธ๋ถ€ ๋„๋ฉ”์ธ ๋ฐ ์—ญํ• ๋ณ„ ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ ๊ตฌ์กฐ:
      {domain}
        โ””โ”€โ”€ {subdomain}
              โ”œโ”€โ”€ controller
              โ”œโ”€โ”€ service
              โ”œโ”€โ”€ dto
              โ”œโ”€โ”€ entity
              โ””โ”€โ”€ repository
      

2. ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ & ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜

2.1 Class, Variables, Functions, Constants

  • Class:
    • ๋ช…๋ช… ๊ทœ์น™: PascalCase
      • ์˜ˆ: UserController, UserService
  • Variables & Functions:
    • ๋ช…๋ช… ๊ทœ์น™: camelCase
      • ์˜ˆ: userName, getOrderItems()
  • Constants:
    • ๋ช…๋ช… ๊ทœ์น™: ์˜๋Œ€๋ฌธ์ž + snake_case
      • ์˜ˆ: MAX_COUNT, DEFAULT_USER_ROLE

2.2 Controller

  • Controller๋Š” Request, Response ์ „์šฉ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€์˜ ๋ฐ์ดํ„ฐ ๊ตํ™˜์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
  • ์˜ˆ์™ธ ์ผ€์ด์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ด€๋ จ API ์ŠคํŽ™์€ @ApiResponse ๋“ฑ์˜ ์• ๋„ˆํ…Œ์ด์…˜์œผ๋กœ ๋ฌธ์„œํ™”ํ•ฉ๋‹ˆ๋‹ค.
  • DTO ๋ถ„๋ฆฌ:
    • Controller์—์„œ ์‚ฌ์šฉํ•˜๋Š” Request/Response ๊ฐ์ฒด๋Š” ๋ณดํ†ต record๋กœ ์ž‘์„ฑํ•˜๋ฉฐ, ๋„ค์ด๋ฐ ๊ทœ์น™์€ {Domain}{MethodName}Request ๋˜๋Š” {Domain}{MethodName}Response ํ˜•ํƒœ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
    • Controller ๋‚ด์— ๋ณ„๋„์˜ Dto ์„œ๋ธŒํŒจํ‚ค์ง€๋ฅผ ๋‘์–ด Service์—์„œ ์‚ฌ์šฉํ•˜๋Š” DTO์™€ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

2.3 Service

  • ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ:
    • ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ @Transactional์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  • DTO ๋ณ€ํ™˜:
    • ๊ฐ์ฒด์™€ DTO ๊ฐ„ ๋ณ€ํ™˜ ๋กœ์ง์€ Service ๊ณ„์ธต์—์„œ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ๋Š” ๋ณดํ†ต static์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉฐ, ์•„๋ž˜์™€ ๊ฐ™์€ ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
      • of: ์—ฌ๋Ÿฌ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›์•„ DTO๋กœ ์กฐํ•ฉํ•  ๋•Œ
      • from: Entity ๊ฐ์ฒด ํ•˜๋‚˜๋ฅผ DTO๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ
      • toEntity: DTO๋ฅผ Entity๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ

2.4 Entity

  • JPA ๋ณ€๊ฒฝ ๊ฐ์ง€:
    • ์—”ํ‹ฐํ‹ฐ ๋‚ด ํ•„๋“œ์˜ ๋ณ€๊ฒฝ์€ ๋ณ€๊ฒฝ ๊ฐ์ง€(Dirty Checking)๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฅผ ์œ„ํ•ด ์—”ํ‹ฐํ‹ฐ ๋‚ด์— ๋ณ„๋„์˜ ํ•„๋“œ ๋ณ€๊ฒฝ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉฐ, Setter ์‚ฌ์šฉ์€ ์ง€์–‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด ์ƒ์„ฑ:
    • ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ new ๋Œ€์‹  **@Builder**๋ฅผ ์ ๊ทน ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€๋…์„ฑ๊ณผ ๋ถˆ๋ณ€์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

2.5 DTO (Data Transfer Object)

  • DTO ์‚ฌ์šฉ:

    • Controller์™€ Service์— ์‚ฌ์šฉํ•˜๋Š” DTO๋Š” ์šฉ๋„๊ฐ€ ๋‹ค๋ฅด๋ฏ€๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • Controller์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์™€์˜ ์š”์ฒญ/์‘๋‹ต์„ ์œ„ํ•œ Request/Response ๊ฐ์ฒด๋ฅผ ์ฃผ๋กœ record๋กœ ์ž‘์„ฑํ•˜๋ฉฐ,
      Service์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋ณ„๋„์˜ DTO ๋ ˆ์ด์–ด์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ค์ด๋ฐ ๊ฐ€์ด๋“œ๋ผ์ธ:

    • Controller์šฉ: {๋™์‚ฌ}{๋ช…์‚ฌ}Request / {๋™์‚ฌ}{๋ช…์‚ฌ}Response
      • ์˜ˆ: UserJoinRequest, UserUpdateResponse
    • Service์šฉ: {์ ์ ˆํ•œ์ด๋ฆ„}Dto
  • DTO ๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ:

    • DTO ๋‚ด์— ๋ณ€ํ™˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ Entity์™€์˜ ๋ณ€ํ™˜์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ผ๋ฐ˜์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„์€ of, from, toEntity์ž…๋‹ˆ๋‹ค.
  • Java Record:

    • ๊ฐ„๊ฒฐํ•จ๊ณผ ๋ถˆ๋ณ€์„ฑ์„ ์œ„ํ•ด Controller์˜ Request/Response ๊ฐ์ฒด๋Š” record๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

2.6 ์ฝ”๋“œ ์ž๋™ ํฌ๋งทํŒ…

  • ์ฝ”๋“œ ํฌ๋งทํŒ… ํˆด ์‚ฌ์šฉ:

2.7 ๊ธฐํƒ€

  • ๋ณ€์ˆ˜/ํ•จ์ˆ˜๋ช…:
    • ๋ชจ๋“  ๋ณ€์ˆ˜์™€ ํ•จ์ˆ˜๋ช…์€ camelCase๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • Docker & ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ:
    • ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ ๋ฐ ์‹คํ–‰ ํ™˜๊ฒฝ์€ Docker๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.
    • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๊ด€๋ฆฌ๋Š” .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, Doppler์™€ ๊ฐ™์€ ํˆด๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2.8 Testing

  • Service ๋‹จ์œ„ ํ…Œ์ŠคํŠธ: ํ•„์ˆ˜ ์ž‘์„ฑ
  • Controller ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ: ํ•„์š” ์‹œ ์ž‘์„ฑ (์„ ํƒ์ )

Clone this wiki locally