Skip to content

Code Convention | Backend

youKeon edited this page Sep 11, 2023 · 11 revisions

Dto

  • ๐Ÿ“‚ย ์œ„์น˜
    • dto.request / dto.response ํŒจํ‚ค์ง€ ๋‚ด ํด๋ž˜์Šค ์ƒ์„ฑ
    • 1 dto 1 class
    • ex) package com.graphy.backend.domain.comment.dto.request;
  • ๐Ÿท๏ธย Naming
    • ํ–‰์œ„+๋„๋ฉ”์ธ+request/response
    • ex) CreateCommentRequest, GetAllProjectsResponse
  • ๐Ÿ”ย Entity, DTO ๋ณ€ํ™˜ Format
    • Request
    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class {ํ–‰์œ„}{๋„๋ฉ”์ธ}Request {
    
    
        public {๋„๋ฉ”์ธ} toEntity() {
            return Comment.builder()
                    ...
                    .build();
        }
    }
    • Response
    @Getter
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public class {ํ–‰์œ„}{๋„๋ฉ”์ธ}Response {
    
    
        public static {ํ–‰์œ„}{๋„๋ฉ”์ธ}Response {from OR of}() {
                return Comment.builder()
                        ...
                        .build();
                }
            }

Mapper

  • ๐Ÿ“‚ย ์œ„์น˜
    • dto ํด๋ž˜์Šค ๋‚ด์— ํ•จ์ˆ˜๋กœ ์ƒ์„ฑ
  • ๐Ÿท๏ธย Naming
    • Entity โ†’ Dto
      • from (์ธ์ž ๊ฐ’ 1๊ฐœ์ผ ๊ฒฝ์šฐ)
      • of (์ธ์ž ๊ฐ’ 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ)
    • Dto โ†’ Entity
      • toEntity

Annotation

Entity

@Entity
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor

Dto

@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor

Naming

๋ณ€์ˆ˜

  • ํŠน์ • ํด๋ž˜์Šค ๋‚ด์˜ ๋ณ€์ˆ˜
    • ๋ณ€์ˆ˜ Type์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋งŒ ์†Œ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
    • ex) private final MemberRepository memberRepository;
  • ๋ณดํ†ต์˜ ์ž„์‹œ ๋ณ€์ˆ˜
    • ๊ทธ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ์˜๋„๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ๋ช…๋ช…
    • ๋˜๋„๋ก์ด๋ฉด ํ•œ ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ณ€์ˆ˜ ์ด๋ฆ„ ํ”ผํ•˜๊ธฐ

Controller ๋‚ด์˜ Method

๋งŒ์•ฝ ์ด ๋„ค์ด๋ฐ ๊ทœ์น™์„ ๋”ฐ๋ฅผ ๊ฒฝ์šฐ์— ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด, ๊ฐ€๋…์„ฑ์ด ๋” ์ข‹์€ ๋„ค์ด๋ฐ์„ ๊ฐ€์ ธ๊ฐ€๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋„๋ฉ”์ธ OR ๋ชฉ์ ์–ด + ์ ‘๋ฏธ์‚ฌ
    • ๋„๋ฉ”์ธ+List() โ€“ ๋ชฉ๋ก ์กฐํšŒ ์œ ํ˜•
    • ๋„๋ฉ”์ธ+Details() โ€“ ๋‹จ์ผ ์ƒ์„ธ ์กฐํšŒ ์œ ํ˜•
    • ๋„๋ฉ”์ธ+Save() โ€“ ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ์œ ํ˜•
    • ๋„๋ฉ”์ธ+Add() โ€“ ๋“ฑ๋ก๋งŒ ํ•˜๋Š” ์œ ํ˜•
    • ๋„๋ฉ”์ธ+Modify() โ€“ ์ˆ˜์ •๋งŒ ํ•˜๋Š” ์œ ํ˜•
    • ๋„๋ฉ”์ธ+Remove() โ€“ ์‚ญ์ œ๋งŒ ํ•˜๋Š” ์œ ํ˜•

Service ๋‚ด์˜ Method

  • ์ ‘๋‘์‚ฌ + ๋„๋ฉ”์ธ OR ๋ชฉ์ ์–ด

    • find+๋„๋ฉ”์ธ() - ์กฐํšŒ ์œ ํ˜•
    • find+๋„๋ฉ”์ธ+List() - ๋ชฉ๋ก ์กฐํšŒ ์œ ํ˜•
    • add+๋„๋ฉ”์ธ() - ๋“ฑ๋ก ์œ ํ˜•
    • modify+๋„๋ฉ”์ธ() - ๋ณ€๊ฒฝ ์œ ํ˜•
    • remove+๋„๋ฉ”์ธ() - ์‚ญ์ œ ์œ ํ˜•
    • save+๋„๋ฉ”์ธ() โ€“ ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ์œ ํ˜•
  • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ Method

    • ์ค‘๋ณต ๋ฐ์ดํ„ฐ์ธ์ง€ ๋“ฑ์„ ํ™•์ธํ•˜๋Š” Method
    • check[๋ชฉ์ ์–ด][๊ฒ€์‚ฌํ•˜๋ ค๋Š” ํ–‰์œ„]
      ex) checkMemberDuplicated

QueryDSL

QueryDSL return type: DTO

QueryDSL์˜ ๋ฐ˜ํ™˜ DTO ์ƒ์„ฑ์ž

@QueryProjection
public MemberDto(String username, int age) {
    this.username = username;
    this.age = age;
}

QueryDSL์˜ ๋ฐ˜ํ™˜ DTO ์–ด๋…ธํ…Œ์ด์…˜

@Getter
@Builder
@NoArgsConstructor

return type ์˜ˆ์‹œ

queryFactory
    .select(new QMemberDto(member.username, member.age))
    .from(member)
    .fetch();

ETC

์ฟผ๋ฆฌ ์ž‘์„ฑ ์‹œ

  • ๋ณต์žกํ•œ join์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ or ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ์ฟผ๋ฆฌ -> QueryDSL ์‚ฌ์šฉ
  • ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ -> @Query ์–ด๋…ธํ…Œ์ด์…˜ ๋˜๋Š” JPARepository ์‚ฌ์šฉ

๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ

Service ๋‚ด์—์„œ ๋‹ค๋ฅธ ๋„๋ฉ”์ธ์˜ Service ์ฐธ์กฐ

@Configuration

@EnableJpaAuditing, @EnableWebMvc ๋“ฑ Configuration ๊ด€๋ จ ์–ด๋…ธํ…Œ์ด์…˜์€ ๋ฉ”์ธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์•„๋‹Œ ๋”ฐ๋กœ Configuration ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด ๊ด€๋ฆฌ

example

@Configuration
@EnableJpaAuditing
public class JpaConfig {
}

REST Docs

๊ธฐ๋ณธ

  • {๋„๋ฉ”์ธ}/{๋ฉ”์„œ๋“œ}/{์„ฑ๊ณต OR ์‹คํŒจ}/{์‹คํŒจ ์›์ธ} ํ˜•์‹ ์‚ฌ์šฉ
  • camelCase ์ ์šฉ
{๋„๋ฉ”์ธ}/{๋ฉ”์„œ๋“œ}/{์„ฑ๊ณต OR ์‹คํŒจ}/{์‹คํŒจ ์›์ธ}

ex)
auth/#/success
auth/#/fail/emptyEmail (ํšŒ์›๊ฐ€์ž… ์‹œ ์ด๋ฉ”์ผ์ด ๊ณต๋ฐฑ์ธ ๊ฒฝ์šฐ)

๋ฉ”์„œ๋“œ๋ช…

Controller ๋‚ด์˜ Method๋ฅผ ๋”ฐ๋ฆ„

  • ํšŒ์›๊ฐ€์ž… : signIn
  • ๋กœ๊ทธ์ธ : #
  • ๋ชฉ๋ก ์กฐํšŒ ์œ ํ˜• : list
  • ๋‹จ์ผ ์ƒ์„ธ ์กฐํšŒ : detail
  • ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ ๊ฐ€ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ์œ ํ˜• : save
  • ๋“ฑ๋ก๋งŒ ํ•˜๋Š” ์œ ํ˜• : add
  • ์ˆ˜์ • : modify
  • ์‚ญ์ œ : remove

์‹คํŒจ ์›์ธ

  • ์—†๋Š” ๊ฐ’ : emptyXxx
  • ์ž˜๋ชป๋œ ๊ฐ’ : invalidXxx
  • ์ธ์ฆ ์‹คํŒจ : unauthorizedMember
  • ์ž๊ฒฉ ์—†์Œ : forbiddenMember

๋„๋ฉ”์ธ๋ช…์œผ๋กœ ์„ค๋ช…์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ (ex. ๋งˆ์ดํŽ˜์ด์ง€, ๋‹ต๊ธ€)

  • ๋„๋ฉ”์ธ์—์„œ ํ•œ ๋‹จ๊ณ„ ๋” ์ถ”๊ฐ€
  • ex) member/mypage/detail/success
  • ex) comment/reComment/add/success