Skip to content

[πŸš€ 사이클2 - λ―Έμ…˜ (μ˜ˆμ•½ λ³€κ²½/μ·¨μ†Œμ™€ μ—λŸ¬ 처리)] 캐λͺ¨(κΉ€μ œμ‹ ) λ―Έμ…˜ μ œμΆœν•©λ‹ˆλ‹€.#442

Open
jason0904 wants to merge 29 commits into
woowacourse:jason0904from
jason0904:jason0904
Open

Conversation

@jason0904
Copy link
Copy Markdown

인삿말

μ•ˆλ…•ν•˜μ„Έμš” μ•„λ§ˆμ°Œ!
이번 μ‚¬μ΄ν΄μ—μ„œ μš”κ΅¬ν–ˆλ˜ λ‚΄μš© 쀑 μ—¬λŸ¬ κ°œκ°€ μ €λ²ˆ λ―Έμ…˜, μ‚¬μ΄ν΄μ—μ„œ 이미 κ΅¬ν˜„ν–ˆλ˜ λ‚΄μš©λ“€μ΄λΌ, λΉ λ₯΄κ²Œ κ΅¬ν˜„ν•΄λ΄€μŠ΅λ‹ˆλ‹€..!
이번 λ―Έμ…˜λ„ 잘 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€!

체크 리슀트

  • λ―Έμ…˜μ˜ ν•„μˆ˜ μš”κ΅¬μ‚¬ν•­μ„ λͺ¨λ‘ κ΅¬ν˜„ν–ˆλ‚˜μš”?
  • Gradle testλ₯Ό μ‹€ν–‰ν–ˆμ„ λ•Œ, λͺ¨λ“  ν…ŒμŠ€νŠΈκ°€ μ •μƒμ μœΌλ‘œ ν†΅κ³Όν–ˆλ‚˜μš”?
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ •μƒμ μœΌλ‘œ μ‹€ν–‰λ˜λ‚˜μš”?

베이슀 μ½”λ“œ 선택 체크

  • 이전 λ―Έμ…˜μ˜ λ‚΄ μ½”λ“œμ—μ„œ μ‹œμž‘
  • 이전 λ―Έμ…˜μ˜ νŽ˜μ–΄μ˜ μ½”λ“œμ—μ„œ μ‹œμž‘

μ–΄λ–€ 뢀뢄에 μ§‘μ€‘ν•˜μ—¬ 리뷰해야 ν• κΉŒμš”?

μ˜ˆμ™Έ μ½”λ“œμ— λŒ€ν•˜μ—¬..

ν˜„μž¬ μ €μ˜ ErrorResponseμ—λŠ” μ—λŸ¬μ½”λ“œκ°€ μ•„λ‹Œ ErrorMessage λ§Œμ„ λ˜μ§‘λ‹ˆλ‹€.

package roomescape.exception;

import java.time.LocalDateTime;

public record ErrorResponse(String message, LocalDateTime timestamp) {
    public ErrorResponse(String message) {
        this(message, LocalDateTime.now());
    }
}

μ΄λ ‡κ²Œ κ΅¬ν˜„μ„ ν•˜κΈ΄ ν–ˆμ§€λ§Œ, μ—λŸ¬ 응닡 방식에 λŒ€ν•΄ 쑰금 더 κ³ λ―Όν•΄ λ³΄μ•˜λŠ”λ°μš”. ν΄λΌμ΄μ–ΈνŠΈ κ°œλ°œμžκ°€ 디버깅을 μœ„ν•΄ 확인해야 ν•˜λŠ” μ—λŸ¬ λ©”μ‹œμ§€μ™€, μ‹€μ œ μ‚¬μš©μžμ—κ²Œ λ…ΈμΆœλ˜μ–΄μ•Ό ν•˜λŠ” μΉœμ ˆν•œ μ•ˆλ‚΄ λ©”μ‹œμ§€λŠ” 성격이 λ‹€λ₯Ό 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.
λ˜ν•œ ν–₯ν›„ λ‹€κ΅­μ–΄ 지원 λ“± μ‹œμŠ€ν…œμ΄ ν™•μž₯될 상황을 κ³ λ €ν•œλ‹€λ©΄, ν”„λ‘ νŠΈμ—”λ“œμ—μ„œ μ—λŸ¬λ₯Ό λͺ…ν™•νžˆ μ‹λ³„ν•˜κ³  μœ μ—°ν•˜κ²Œ λŒ€μ²˜ν•  수 μžˆλŠ” 기쀀이 ν•„μš”ν•  것 κ°™μŠ΅λ‹ˆλ‹€.
이런 κ΄€μ μ—μ„œ ν…μŠ€νŠΈ λ©”μ‹œμ§€μ™€ λ”λΆˆμ–΄ κ³ μœ ν•œ μ—λŸ¬ μ½”λ“œλ₯Ό λ„μž…ν•˜λŠ” 것이 훨씬 효과적인 λ°©λ²•μœΌλ‘œ λŠκ»΄μ§€λŠ”λ°, 이 λ°©ν–₯에 λŒ€ν•œ μ•„λ§ˆμ°Œμ˜ 생각은 μ–΄λ– μ‹ μ§€ κΆκΈˆν•©λ‹ˆλ‹€!

μ»€μŠ€ν…€ Exception ꡬ뢄에 λŒ€ν•˜μ—¬..

ν˜„μž¬λŠ” μ˜ˆμ™Έλ₯Ό λ„λ©”μΈλ³„λ‘œ λ‚˜λˆ„μ§€ μ•Šκ³ , λ°œμƒν•˜λŠ” 상황을 κΈ°μ€€μœΌλ‘œ λ¬Άμ–΄μ„œ μ²˜λ¦¬ν•˜κ³  μžˆλŠ”λ°μš”.
μ΄λ ‡κ²Œ ν•˜λ‹€ λ³΄λ‹ˆ μ˜ˆμ™Έμ˜ 성격이 λΉ„μ¦ˆλ‹ˆμŠ€μ˜ 의미λ₯Ό λ‹΄κΈ°λ³΄λ‹€λŠ”, HTTP μƒνƒœ μ½”λ“œλΌλŠ” μ›Ή κ³„μΈ΅μ˜ κ°œλ…μ— λ„ˆλ¬΄ κ°•ν•˜κ²Œ μ˜μ‘΄ν•˜κ³  μžˆλŠ” 것은 μ•„λ‹Œκ°€ ν•˜λŠ” μš°λ €κ°€ λ“€μ—ˆμŠ΅λ‹ˆλ‹€. 특히 NotFoundException, UnauthorizedActionException같은 뢀뢄듀을 λ³΄λ‹ˆ 이름도 Http μƒνƒœμ½”λ“œμ— μ˜μ‘΄λ˜μ–΄μžˆλŠ” 것 κ°™λ”λΌκ³ μš”..

도메인 κ³„μΈ΅μ˜ μˆœμˆ˜μ„± κ΄€μ μ—μ„œ λ³Ό λ•Œ, ν˜„μž¬μ˜ μ˜ˆμ™Έ 넀이밍과 λΆ„λ₯˜ 방식에 λŒ€ν•΄ μ•„λ§ˆμ°Œμ˜ 의견이 κΆκΈˆν•©λ‹ˆλ‹€!

ν…ŒμŠ€νŠΈμ— λŒ€ν•˜μ—¬..

μ§€λ‚œ μ‚¬μ΄ν΄μ—μ„œλŠ” Repository, Service, Controllerλ₯Ό 각각 Mock을 ν™œμš©ν•΄ μ—„κ²©ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ‘œ λΆ„λ¦¬ν–ˆμ—ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 계측이 λ‚˜λ‰˜μ–΄ μžˆλ”λΌλ„ κ²°κ΅­ ν•˜λ‚˜μ˜ 절차적인 λΉ„μ¦ˆλ‹ˆμŠ€ 흐름을 κ°–κΈ° λ•Œλ¬Έμ—, Mock을 λ‚¨μš©ν•˜κΈ°λ³΄λ‹€λŠ” λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ²€μ¦ν•˜λŠ” 톡합 ν…ŒμŠ€νŠΈλ‘œ λ¬Άμ–΄λ‚΄λŠ” 것이 더 μ‹€μš©μ μ΄λΌκ³  νŒλ‹¨ν–ˆμŠ΅λ‹ˆλ‹€.

이에 따라 ν˜„μž¬λŠ” Controller νŒŒλΌλ―Έν„°/DTO 검증 + Service 톡합 ν…ŒμŠ€νŠΈ + E2E ν…ŒμŠ€νŠΈ ꡬ쑰둜 κ°œνŽΈν–ˆλŠ”λ°, 결과적으둜 μ€‘λ³΅λ˜κ±°λ‚˜ 의미 μ—†λŠ” ν…ŒμŠ€νŠΈκ°€ ν™•μ—°νžˆ 쀄어든 것을 λŠκΌˆμŠ΅λ‹ˆλ‹€.
λ‹€λ§Œ, Layered Architecture의 원칙을 μƒκ°ν•˜λ©΄ μ—¬μ „νžˆ κ³„μΈ΅λ³„λ‘œ μ² μ €νžˆ λΆ„λ¦¬ν•΄μ„œ ν…ŒμŠ€νŠΈν•˜λŠ” 것이 μ •μ„μΌκΉŒ ν•˜λŠ” 일말의 고민도 λ‚¨μ•„μžˆλŠ”λ°μš”. 이 뢀뢄에 κ΄€ν•œ μ•„λ§ˆμ°Œμ˜ 생각이 κΆκΈˆν•©λ‹ˆλ‹€..!

DTO의 디렉터리 μœ„μΉ˜μ— λŒ€ν•˜μ—¬

μ €λ²ˆ 사이클 λ§ˆμ§€λ§‰ 컀멘트둜 DTO의 μœ„μΉ˜μ— κ΄€λ ¨λ˜μ„œ 이야기λ₯Ό ν•΄μ£Όμ…¨λŠ”λ°μš”..
생각을 계속 ν•΄λ΄€λŠ”λ°, μ²˜μŒμ—λŠ” Controller νŒ¨ν‚€μ§€ 내뢀에 DTO νŒ¨ν‚€μ§€λ₯Ό 넣을 경우, νŒ¨ν‚€μ§€ Depthκ°€ λΆˆν•„μš”ν•˜κ²Œ κΉŠμ–΄μ§€κ³  기쑴에 μ˜μ‘΄μ„± λ°©ν–₯을 λͺ…ν™•νžˆ ν•˜λ €λ˜ νŒ¨ν‚€μ§€ λΆ„λ¦¬μ˜ μ˜λ―Έκ°€ λ‹€μ†Œ 희석될 수 μžˆλ‹€κ³  μƒκ°ν•˜μ—¬ 일단 ν˜„μž¬ ꡬ쑰λ₯Ό μœ μ§€ν–ˆμŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ λ©°μΉ  더 μ½”λ“œλ₯Ό λ“€μ—¬λ‹€λ³΄λ‹ˆ, Controller와 라이프사이클을 μ™„μ „νžˆ ν•¨κ»˜ν•˜λŠ” DTO듀을 ν•˜λ‚˜μ˜ λ””λ ‰ν„°λ¦¬λ‘œ λ¬Άμ–΄λ‘λŠ” 것이 파일 κ΄€λ¦¬λ‚˜ 전체적인 ꡬ쑰 λ©΄μ—μ„œ 훨씬 깔끔할 수 μžˆκ² λ‹€λΌλŠ” 생각이 듀기도 ν•˜λ„€μš”..
κ²°κ΅­ νŒ¨ν‚€μ§€ Depth 증가와 파일 κ΄€λ¦¬μ˜ 응집도 ν–₯상 μ‚¬μ΄μ—μ„œ νŒ½νŒ½ν•˜κ²Œ 고민이 λ˜λŠ”λ°μš”, ν˜„μ—…μ—μ„œλŠ” 이 νŠΈλ ˆμ΄λ“œμ˜€ν”„λ₯Ό μ–΄λ–»κ²Œ λ‹€λ£¨λŠ” νŽΈμΈμ§€ μ•„λ§ˆμ°Œμ˜ 생각이 κΆκΈˆν•©λ‹ˆλ‹€!

jason0904 added 29 commits May 12, 2026 13:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant