Skip to content

πŸ› οΈ BE μ½”λ“œ μ»¨λ²€μ…˜

jinwoo22 edited this page Jul 12, 2024 · 6 revisions

μŠ€νƒ€μΌ

  • κ°œν–‰

    • class 첫 ν•„λ“œλŠ” ν•œ 쀄 κ°œν–‰ ν›„ μž‘μ„±ν•œλ‹€.
    • class λ§ˆμ§€λ§‰ μ€‘κ΄„ν˜ΈλŠ” method λ§ˆμ§€λ§‰ μ€‘κ΄„ν˜Έ ν•œ 쀄 μ•„λž˜ μœ„μΉ˜ν•˜λ„λ‘ ν•œλ‹€.
    • λ©”μ„œλ“œ λ‚΄μ˜ κ°œν–‰μ€ 논리적 λ‹¨μœ„λ‘œ μ‚½μž…ν•œλ‹€.
  • import

    • μˆœμ„œ : Code Style - Java - Import Layoutμ—μ„œ Layout static imports separately 적용
      import all other imports
      import javax.*
      import java.*
      <blank line>
      import static all other imports
      
    • wildcard : Code Style - Java - Classcount to use … 및 Names count to use … 99둜 μ„€μ •
  • λ©”μ„œλ“œ μˆœμ„œ

    • public-private μ •λ ¬ μˆœμ„œ

      • public λ©”μ„œλ“œλ‚΄μ˜ private λ©”μ„œλ“œλŠ” public λ©”μ„œλ“œμ™€ κ°€κΉŒμš΄ μ•„λž˜ μœ„μΉ˜μ‹œν‚¨λ‹€.
      • private이 계속 μ‚¬μš©λ  경우, κ°€μž₯ 처음 μ‚¬μš©ν•œ public λ©”μ„œλ“œ μ•„λž˜μ— μœ„μΉ˜ν•œλ‹€.
    • λ©”μ„œλ“œ μ •λ ¬ μˆœμ„œ

      • μ»¨νŠΈλ‘€λŸ¬μ™€ μ„œλΉ„μŠ€μ—μ„œ CRUD μˆœμ„œλŒ€λ‘œ μž‘μ„±
      • ν˜‘μ—…ν•  λ•Œ 처음 ν•΄λ‹Ή μ½”λ“œλ₯Ό λ³΄λŠ” μ‚¬λžŒμ΄ 순차적으둜 μ½”λ“œ 의미 νŒŒμ•…ν•˜κΈ°κ°€ 더 μš©μ΄ν•˜λ‹€.
  • μŠ€νƒ€μΌ 파일

    • Code Style - Java - Schemaμ—μ„œ WootecoStyle μ μš©ν•˜μ—¬ μΌκ΄„μ μœΌλ‘œ μ½”λ“œ μŠ€νƒ€μΌμ„ λ§žμΆ˜λ‹€.

μ½”λ“œ

  • final

    • fieldμ—λ§Œ μ‚¬μš©ν•œλ‹€.
    • λͺ¨λ“  곳에 final을 μ‚¬μš©ν•˜λŠ”λ° μ†Œμš©λ˜λŠ” λ¦¬μ†ŒμŠ€κ°€ 더 크닀. νŠΉμ • μƒν™©μ—μ„œλ§Œ λͺ…μ‹œν•˜λŠ” 것이 더 효율적이고 의미 전달이 κ°€λŠ₯ν•˜λ‹€.
  • equals & toString & hashcode

    • domain 및 entityμ—μ„œ λͺ¨λ‘ μž¬μ •μ˜ν•œλ‹€.
    • equals μ‹œ id만 λΉ„κ΅ν•œλ‹€.
  • service layer λ°˜ν™˜ νƒ€μž…

    • DTOλ₯Ό νŒŒλΌλ―Έν„°λ‘œ λ°›κ³ , DTOλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • repository element 없을 λ•Œ 처리

    • repositoryμ—μ„œ get ν•¨μˆ˜λ₯Ό μΆ”κ°€λ‘œ μž‘μ„±ν•΄ find μ‹œ empty일 경우 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚¨λ‹€.
  • responseEntity

    • μƒνƒœ μ½”λ“œ μ‰½κ²Œ μ„€μ •ν•˜κΈ° μœ„ν•΄ ResponseEntityλ₯Ό μ‚¬μš©ν•œλ‹€.
  • error의 경우, handlerλ₯Ό μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬ν•œλ‹€.

  • μŠ€ν”„λ§ μ”¨νλ¦¬ν‹°μ˜ 경우, μ‚¬μš©ν•˜μ§€ μ•Šκ³  배운 λ‚΄μš©λ§ŒμœΌλ‘œ κ΅¬ν˜„ν•œλ‹€.

  • DTO static λ©”μ„œλ“œλ₯Ό ν™œμš©ν•  λ•Œ

    • from : νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜κ°€ 1개일 경우 μ‚¬μš©ν•œλ‹€.
    • of : νŒŒλΌλ―Έν„°μ˜ κ°œμˆ˜κ°€ 2개 이상일 경우 μ‚¬μš©ν•œλ‹€.
    • toEnity, toDamain μ‚¬μš©ν•œλ‹€.
  • 둬볡 λ“± getter, setter μžλ™ 생성 μ–΄λ…Έν…Œμ΄μ…˜μ€ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.

  • λ³€κ²½ 감지 κΈ°λŠ₯ ν™œμš©

  • ErrorHandler둜 λ“€μ–΄μ˜€λŠ” 것듀은 둜그λ₯Ό 남기고, μΆ”ν›„ ν•„μš”ν•œ 것듀에 λŒ€ν•΄μ„œλŠ” 개인적 νŒλ‹¨μœΌλ‘œ 둜그λ₯Ό 남긴닀.

  • DTOμ—μ„œμ˜ 검증은 ν˜•νƒœμ— κ΄€λ ¨λœ κ²€μ¦λ§Œ μ²˜λ¦¬ν•œλ‹€.

  • id의 경우, Long이 μ•„λ‹Œ long νƒ€μž…μ„ μ‚¬μš©ν•œλ‹€.

ν…ŒμŠ€νŠΈ

  • test λͺ…
    • DisplayName: [κΈ°λŠ₯] 성곡 : ~ 경우 (μƒλž΅ κ°€λŠ₯)
      • ex) νšŒμ›κ°€μž… 성곡, νšŒμ›κ°€μž… μ‹€νŒ¨: 이메일 쀑볡인 경우
    • (긍정) λ©”μ„œλ“œλͺ… + 상황 μžˆμ„ 경우 _상황
      • ex) login / save
    • (λΆ€μ •) λ©”μ„œλ“œλͺ…_μ‹€νŒ¨μ΄μœ _exception
      • ex) login_passwordMismatch_exception / save_duplicatedName_exception
  • TDD의 경우, ν¬λ§ν•˜λŠ” μΈμ›λ§Œ μ§„ν–‰ν•˜λ„λ‘ ν•œλ‹€
  • test 방식
    • domain : μœ λ‹› ν…ŒμŠ€νŠΈ μ§„ν–‰ν•œλ‹€.

    • service : fixture λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•œλ‹€. : ν…ŒμŠ€νŠΈμš© DBλ₯Ό μ‚¬μš©ν•œλ‹€.

    • controller : fixture λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•œλ‹€. : E2E둜 μ§„ν–‰ν•œλ‹€. : λ‹€μ΄λ‚˜λ―Ή ν…ŒμŠ€νŠΈλ₯Ό μ„ νƒμ μœΌλ‘œ λ„μž…ν•œλ‹€.

    • repository : 쿼리문을 λ”°λ‘œ μž‘μ„±ν•˜λŠ” κ²½μš°μ—λ§Œ ν…ŒμŠ€νŠΈμš© DB둜 μž‘μ„±ν•œλ‹€.

μ„€μ •

  • OSIV μ„€μ •
    • μ„€μ • νŒŒμΌμ—μ„œ μ΄ˆκΈ°λΆ€ν„° 끄고 μ§„ν–‰ν•œλ‹€.

넀이밍

  • controller, service λ©”μ„œλ“œ 이름

    • controller

      • create, read, update, delete
    • service

      • create, read, update, delete λ™μΌν•˜κ²Œ μž‘μ„±ν•˜κ³  κΈ°λŠ₯에 따라 λͺ…λͺ…ν•œλ‹€.
  • νŒ¨ν‚€μ§€ 이름

    • domain
    • repository
    • service
    • controller

진행

  • 일주일 λ™μ•ˆ νŽ˜μ–΄λ₯Ό 진행해 λ³Έ ν›„, μΆ”ν›„ 지속 μ—¬λΆ€λ₯Ό κ²°μ •ν•œλ‹€.
  • λ¬Έμ„œν™”λŠ” λ…Έμ…˜κ³Ό swagger UI둜 μ§„ν–‰ν•œλ‹€.

GIT

  • PR

    • νŽ˜μ–΄ κΈ°κ°„ λ™μ•ˆμ˜ μž‘μ—…μ€ λ‹€λ₯Έ νŒ€μ˜ 두 λͺ…이 각자 μ§„ν–‰ν•œλ‹€.
    • νŽ˜μ–΄ 기간이 아닐 λ•Œμ—λŠ” λͺ¨λ‘κ°€ 리뷰λ₯Ό μ§„ν–‰ν•œλ‹€. 단, λͺ¨λ“  사항이 만쑱슀러울 경우 κ°„λ‹¨ν•œ 리뷰만 남기고 approve ν•œλ‹€.
    • 리뷰의 경우, PR μž‘μ„± ν›„ ν•˜λ£¨ 이내에 μž‘μ„±ν•΄ μ€€λ‹€.
  • commit

    • 기본적으둜 컀밋 μ»¨λ²€μ…˜μ„ λ”°λ₯Έλ‹€.
    • κΈ°λŠ₯ λ‹¨μœ„λ‘œ κ΅¬ν˜„κ³Ό ν…ŒμŠ€νŠΈλ₯Ό 같이 μ»€λ°‹ν•œλ‹€.
    • λ¬Έμž₯ν˜•μ΄ μ•„λ‹Œ λ‹¨μ–΄ν˜•μœΌλ‘œ μž‘μ„±ν•œλ‹€. ex) 둜그인 κΈ°λŠ₯ κ΅¬ν˜„

ꡬ쑰

  • νŒ¨ν‚€μ§€
    • κ³„μΈ΅ν˜• VS λ„λ©”μΈν˜•
      • κ³„μΈ΅ν˜•μœΌλ‘œ ν–ˆμ„ λ•Œμ— νŒ¨ν‚€μ§€ μ•ˆμ— ν΄λž˜μŠ€κ°€ μŒ“μ΄λ©° 가독성이 떨어진 κ²½ν—˜μ΄ μžˆλ‹€.
      • λ„λ©”μΈμœΌλ‘œ λ‚˜λˆŒ 경우 각 κΈ°λŠ₯에 따라 λ‚˜λ‰˜μ–΄ μžˆμ–΄μ„œ μ²˜μŒλΆ€ν„° νŒŒμ•…ν•˜κΈ° μš©μ΄ν•˜λ‹€.
Clone this wiki locally