Skip to content

nettee-space/backend-sample-hexagonal-simple-crud

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Introduction.

이 μƒ˜ν”Œ ν”„λ‘œμ νŠΈλŠ” λ ˆμ΄μ–΄λ“œ μ•„ν‚€ν…μ²˜λ₯Ό λ„˜μ–΄ ν™•μž₯μ„±κ³Ό μœ μ—°μ„±μ„ 보μž₯ν•˜κ³  DDD 철학에 κ±Έλ§žλŠ” ν—₯사고날 μ•„ν‚€ν…μ²˜ 기반으둜 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

기본적인 CRUD λ™μž‘κ³Ό ν—₯사고날 μ•„ν‚€ν…μ²˜μ˜ ꡬ쑰λ₯Ό νŒŒμ•…ν•˜κ³  관점을 읡힐 수 μžˆλ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ‹€μŒ ν•­λͺ©μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.

  • ν—₯사고날 μ•„ν‚€ν…μ²˜μ˜ 의미 μˆ˜μ€€μ˜ κ΅¬ν˜„μ„ λ”°λ¦…λ‹ˆλ‹€.
  • 폴더 ꡬ쑰의 μ‹œμž‘μ μ€ 높은 응집도λ₯Ό μœ„ν•΄ 도메인 κΈ°μ€€μœΌλ‘œ μ„€κ³„ν•©λ‹ˆλ‹€.
me.nettee
β”œβ”€β”€ common
└── board
    β”œβ”€β”€ adapter                 -- μ™ΈλΆ€μ™€μ˜ μƒν˜Έμž‘μš©μ„ μ²˜λ¦¬ν•˜λŠ” 계측, application μž…μΆœλ ₯을 λ‹΄λ‹Ή
    β”‚   β”œβ”€β”€ driving             -- μ™ΈλΆ€λ‘œλΆ€ν„°μ˜ μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ” μ–΄λŒ‘ν„°
    β”‚   β”‚   └── web             -- Web μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 컨트둀러 및 DTO μ •μ˜
    β”‚   β”‚       β”œβ”€β”€ dto
    β”‚   β”‚       └── mapper      -- DTO ↔ Domain λ§€ν•‘ 클래슀
    β”‚   └── driven              -- μ™ΈλΆ€λ‘œμ˜ 좜λ ₯을 μ²˜λ¦¬ν•˜λŠ” μ–΄λŒ‘ν„° (DB, Event, Messaging 처리)
    β”‚       └── persistence     -- μ˜μ†μ„± κ³„μΈ΅μ˜ κ΅¬ν˜„μ²΄ (예: JPA, MyBatis λ“±)
    β”‚           β”œβ”€β”€ entity
    β”‚           └── mapper      -- Entity ↔ Domain λ§€ν•‘ 클래슀
    └── application             -- 핡심 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 ν¬ν•¨λœ 계측, 도메인과 μœ μŠ€μΌ€μ΄μŠ€λ₯Ό μ •μ˜
        β”œβ”€β”€ domain              -- λΉ„μ¦ˆλ‹ˆμŠ€ 도메인 μ •μ˜
        β”œβ”€β”€ port                -- adpater와 μƒν˜Έμž‘μš©μ„ μœ„ν•œ μΈν„°νŽ˜μ΄μŠ€ μ •μ˜
        β”œβ”€β”€ service             -- λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλΉ„μŠ€ 클래슀
        └── usecase             -- νŠΉμ • μœ μŠ€μΌ€μ΄μŠ€(κΈ°λŠ₯) μΈν„°νŽ˜μ΄μŠ€ μ •μ˜

AdapterλŠ” Application 계측에 μ •μ˜λœ portλ₯Ό κ΅¬ν˜„ν•©λ‹ˆλ‹€.

  • Driving AdapterλŠ” μ‹œμŠ€ν…œ μ™ΈλΆ€μ—μ„œ λ“€μ–΄μ˜€λŠ” μš”μ²­μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€. (HTTP μš”μ²­, λ©”μ‹œμ§€ μ†ŒλΉ„) 이후 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ „λ‹¬ν•©λ‹ˆλ‹€.
  • Driven AdpaterλŠ” μ‹œμŠ€ν…œμ΄ μ™ΈλΆ€λ‘œ λ‚˜κ°€λŠ” μž‘μ—…μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€. (DB CRUD μž‘μ—…, μ™ΈλΆ€ API 호좜, λ©”μ‹œμ§€ 전달)
    • μ‹€μŠ΅μ—μ„œ Driven AdapterλŠ” RDB Adapter둜, Spring Data JPAλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

Prerequisites

  • JDK 21
    You can use OpenJDK e.g. Amazon Corretto 21

Branch Rule

κ°œλ°œμžλ“€μ€ λ‹€μŒκ³Ό 같은 Branch Rule을 κΌ­ μˆ™μ§€ν•˜κ³  μ€€μˆ˜ν•΄ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€. (κ°„μ†Œν™”λœ 브랜치 운영)

  • main λΈŒλžœμΉ˜λŠ” 읽기 μ „μš© μž…λ‹ˆλ‹€.

    • main λΈŒλžœμΉ˜λŠ” κ΄€λ¦¬μž(@merge-simpson, @silberbullet)만 force pushκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • feature 브랜치: λͺ¨λ“  λ³€κ²½ 사항은 feature 브랜치λ₯Ό 생성 ν›„, main 브랜치둜 병합해야 ν•©λ‹ˆλ‹€.

    • feature/κΈ°λŠ₯λͺ… μ–‘μ‹μœΌλ‘œ λͺ…λͺ…ν•˜λ©°, 영문 μ†Œλ¬Έμž, 숫자 및 ν•˜μ΄ν”ˆ(μΌ€λ°₯ μΌ€μ΄μŠ€)λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. (좔가적인 μŠ¬λž˜μ‹œλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)

        gitGraph
        commit
        commit
        branch feature/board-example
        branch feature/board-something
        checkout feature/board-example
        commit
        checkout feature/board-something
        commit
        commit
        checkout feature/board-example
        commit
        checkout main
        merge feature/board-example
        checkout main
        merge feature/board-something
        commit
      
      Loading
  • μ£Όμš” λΈŒλžœμΉ˜μ— 병합 μ „ Pull Request(PR)λŠ” ν•„μˆ˜μž…λ‹ˆλ‹€.

    • Pull Requestλ₯Ό 생성할 λ•Œ, μ΅œμ†Œ 2λͺ…μ˜ reviewerλ₯Ό μ§€μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

    • κ΄€λ¦¬μž(@merge-simpson, @silberbullet)λŠ” 리뷰 없이 병합이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

    • μ½”λ“œμ— λŒ€ν•œ λͺ¨λ“  λ…Όμ˜(conversations)κ°€ ν•΄κ²°(resolved)λ˜μ§€ μ•Šμ€ μƒνƒœμ—μ„œλŠ” Pull Requestλ₯Ό 병합할 수 μ—†μŠ΅λ‹ˆλ‹€.

      conversations μ˜ˆμ‹œ 보기
      1. @silberbullet λ‹˜μ΄ pull request 생성 ν›„, reviewerλ₯Ό @merge-simpson μ—κ²Œ μ‹ μ²­ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
      2. @merge-simpson λ‹˜μ€ μ½”λ“œ μˆ˜μ •μ„ μœ„ν•΄ commentλ₯Ό λ‚¨κ²ΌμŠ΅λ‹ˆλ‹€.
      3. @silberbullet λ‹˜μ€ ν•΄λ‹Ή μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ—¬ push ν›„ @merge-simpson λ‹˜μ΄ 남긴 comment에 μˆ˜μ •μ‚¬ν•­μ„ 적어 λ†“μ•˜μŠ΅λ‹ˆλ‹€.
      4. @merge-simpson "Resolve conversation" λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ ν”Όλ“œλ°±μ΄ ν•΄κ²°λ˜μ—ˆμŒμ„ ν‘œμ‹œν•©λ‹ˆλ‹€.
      5. λΉ„λ‘œμ†Œ @silberbullet λ‹˜μ€ μ½”λ“œ 병합이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

Commit Message

컀밋 λ©”μ‹œμ§€μ˜ 제1 κ·œμΉ™μ€ 'μ•Œμ•„λ³Ό 수 μžˆλŠ” λ©”μ‹œμ§€ 전달'μž…λ‹ˆλ‹€.
보편적인 μ•΅κ·€λŸ¬ 컀밋 λ©”μ‹œμ§€ μ»¨λ²€μ…˜μ„ λ”°λ₯΄λ©΄μ„œ, 각 포맷의 λ°”μš΄λ”λ¦¬μ™€ ν‘œν˜„ μˆ˜μ€€μ€ νŒ€μ— 맞게 μ°¨κ·Όμ°¨κ·Ό μ‘°μ •ν•΄ κ°€λ©΄ μ’‹κ² μŠ΅λ‹ˆλ‹€.

Basic Commit Message Format

컀밋 λ©”μ‹œμ§€μ˜ 첫 λ‹¨μ–΄λŠ” μž‘μ—…μ˜ λͺ©μ μ„ λͺ…ν™•νžˆ ν•˜κΈ° μœ„ν•΄ 컀밋 νƒ€μž…μœΌλ‘œ μ‹œμž‘ν•©λ‹ˆλ‹€.

type(scope): subject in lowercase

μ•„λž˜μ˜ νƒ€μž…μ„ μ‹€μŠ΅μœΌλ‘œ μ‚¬μš©ν•΄ λ³΄μ‹œλ©΄ μ’‹μŠ΅λ‹ˆλ‹€.

  • feat: μƒˆλ‘œμš΄ κΈ°λŠ₯ μΆ”κ°€
  • fix: 버그 μˆ˜μ •
  • docs: λ¬Έμ„œ 생성 및 μˆ˜μ • (README.md λ“±)
  • refactor: μ½”λ“œ λ¦¬νŒ©ν† λ§ (κΈ°λŠ₯ λ³€ν™” μ—†μŒ: μ„±λŠ₯ κ°œμ„ , νŒ¨ν‚€μ§€ 이동, νŒŒμΌΒ·μ‹λ³„μž μˆ˜μ • λ“±)
  • test: ν…ŒμŠ€νŠΈ μ½”λ“œ μΆ”κ°€ λ˜λŠ” μˆ˜μ •
  • chore: μ½”λ“œμ˜ κ΅¬μ‘°λ‚˜ λ™μž‘μ— 영ν–₯을 μ£Όμ§€ μ•ŠλŠ” 기타 μž‘μ—…
  • build: λΉŒλ“œ κ΄€λ ¨ μž‘μ—…, νŒ¨ν‚€μ§€ λ§€λ‹ˆμ € μ„€μ • λ“±

Contact.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 10