Skip to content

Latest commit

Β 

History

History
137 lines (120 loc) Β· 5.15 KB

File metadata and controls

137 lines (120 loc) Β· 5.15 KB

λ©€ν‹°λͺ¨λ“ˆ ꡬ쑰

ν”„λ‘œμ νŠΈλŠ” Clean Architecture와 Hexagonal Architecture 원칙을 따라 6개의 λͺ¨λ“ˆλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€:

memory/
β”œβ”€β”€ memory-api/         # 🌐 Presentation Layer (Web + DTOs)
β”œβ”€β”€ memory-domain/      # 🎯 Domain Layer (Entities + Interfaces)  
β”œβ”€β”€ memory-adapter/     # πŸ”Œ Infrastructure Layer (Implementations)
β”œβ”€β”€ memory-common/      # πŸ”§ Common Utilities & Cross-cutting
β”œβ”€β”€ memory-batch/       # ⚑ Batch Processing
└── memory-infra/       # 🐳 Infrastructure & DevOps

λͺ¨λ“ˆλ³„ 상세 μ„€λͺ…

🌐 memory-api (Presentation Layer)

μ—­ν• : μ™ΈλΆ€ μš”μ²­μ„ λ°›μ•„ μ²˜λ¦¬ν•˜λŠ” μ›Ή 계측 + API 계약 μ •μ˜

  • μ‹€ν–‰ κ°€λŠ₯ν•œ JAR: μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ§„μž…μ 
  • μ˜μ‘΄μ„±: memory-common ← memory-domain

μ£Όμš” κ΅¬μ„±μš”μ†Œ:

memory-api/
β”œβ”€β”€ config/                         # Spring μ„€μ • (CORS, Swagger λ“±)
β”œβ”€β”€ controller/                     # REST API 컨트둀러
β”œβ”€β”€ service/                        # λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μ„œλΉ„μŠ€
└── dto/                            # Request/Response DTOs (API 계약)
    β”œβ”€β”€ member/                     # νšŒμ› κ΄€λ ¨ DTO
    β”œβ”€β”€ memory/                     # μΆ”μ–΅ κ΄€λ ¨ DTO
    └── relationship/               # 관계 κ΄€λ ¨ DTO

🎯 memory-domain (Domain Layer)

μ—­ν• : 순수 도메인 λͺ¨λΈκ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™

  • 라이브러리 JAR: 도메인 엔티티와 μΈν„°νŽ˜μ΄μŠ€ 제곡
  • μ˜μ‘΄μ„±: memory-common

μ£Όμš” κ΅¬μ„±μš”μ†Œ:

memory-domain/
β”œβ”€β”€ domain/                         # JPA μ—”ν‹°ν‹°
β”‚   β”œβ”€β”€ member/Member.java          # νšŒμ› μ—”ν‹°ν‹°
β”‚   β”œβ”€β”€ memory/Memory.java          # μΆ”μ–΅ μ—”ν‹°ν‹°
β”‚   └── BaseTimeEntity.java         # 곡톡 베이슀 μ—”ν‹°ν‹°
β”œβ”€β”€ repository/                     # Repository μΈν„°νŽ˜μ΄μŠ€ (κ΅¬ν˜„μ²΄ μ—†μŒ)
└── dto/search/                     # 도메인 νŠΉν™” DTO (ElasticSearch)

πŸ”Œ memory-adapter (Infrastructure Layer)

μ—­ν• : μ™ΈλΆ€ μ‹œμŠ€ν…œ 연동 및 기술적 κ΅¬ν˜„μ²΄

  • 라이브러리 JAR: Repository κ΅¬ν˜„μ²΄μ™€ μ™ΈλΆ€ μ‹œμŠ€ν…œ μ–΄λŒ‘ν„°
  • μ˜μ‘΄μ„±: memory-domain

μ£Όμš” κ΅¬μ„±μš”μ†Œ:

memory-adapter/
β”œβ”€β”€ persistence/repository/         # JPA Repository κ΅¬ν˜„μ²΄
β”‚   β”œβ”€β”€ member/MemberRepositoryCustomImpl.java
β”‚   └── memory/MemoryRepositoryCustomImpl.java
β”œβ”€β”€ search/repository/              # ElasticSearch Repository κ΅¬ν˜„μ²΄  
β”œβ”€β”€ storage/service/                # S3 파일 μ—…λ‘œλ“œ μ„œλΉ„μŠ€
β”œβ”€β”€ config/                         # 기술적 μ„€μ • (JPA, S3, ElasticSearch)
└── src/main/resources/             # μ„€μ • 파일

πŸ”§ memory-common (Common Layer)

μ—­ν• : νš‘λ‹¨ 관심사 및 곡톡 μœ ν‹Έλ¦¬ν‹°

  • 라이브러리 JAR: λ‹€λ₯Έ λͺ¨λ“ˆμ—μ„œ μ°Έμ‘°
  • μ˜μ‘΄μ„±: λ‹€λ₯Έ λͺ¨λ“ˆλ“€μ˜ 기반

μ£Όμš” κ΅¬μ„±μš”μ†Œ:

memory-common/
β”œβ”€β”€ annotation/                     # μ»€μŠ€ν…€ μ–΄λ…Έν…Œμ΄μ…˜ (@Auth, @MemberId)
β”œβ”€β”€ component/
β”‚   β”œβ”€β”€ jwt/                        # JWT 토큰 처리
β”‚   └── security/                   # λ³΄μ•ˆ μ»΄ν¬λ„ŒνŠΈ
β”œβ”€β”€ config/security/                # Spring Security + CORS μ„€μ •
β”œβ”€β”€ exception/                      # 곡톡 μ˜ˆμ™Έ 클래슀
β”œβ”€β”€ response/                       # 곡톡 응닡 포맷
└── util/                           # 곡톡 μœ ν‹Έλ¦¬ν‹°

🐳 memory-infra (Infrastructure Layer)

μ—­ν• : μΈν”„λΌμŠ€νŠΈλŸ­μ²˜ 및 DevOps 도ꡬ

  • μ‹€ν–‰ λΆˆκ°€λŠ₯: μ„€μ • 및 슀크립트만 포함
  • μ˜μ‘΄μ„±: μ—†μŒ (독립적)

μ£Όμš” κ΅¬μ„±μš”μ†Œ:

memory-infra/
β”œβ”€β”€ docker/
β”‚   β”œβ”€β”€ local/                      # 둜컬 개발 ν™˜κ²½
β”‚   β”‚   └── docker-compose.yml      # PostgreSQL + PostGIS
β”‚   β”œβ”€β”€ dev/                        # 개발 μ„œλ²„ ν™˜κ²½
β”‚   β”‚   β”œβ”€β”€ docker-compose.yml      # App + DB + Nginx
β”‚   β”‚   └── nginx/                  # Nginx μ„€μ •
β”‚   └── prod/                       # ν”„λ‘œλ•μ…˜ ν™˜κ²½
β”‚       └── ec2/                    # AWS EC2 μ„€μ •
β”‚       └── ecs/                    # AWS ECS μ„€μ • (μΆ”ν›„ λ³€κ²½ μ˜ˆμ •)
└── build.gradle                    # Docker νƒœμŠ€ν¬ μ •μ˜

Gradle νƒœμŠ€ν¬:

./gradlew memory-infra:localStart   # 둜컬 ν™˜κ²½ μ‹œμž‘
./gradlew memory-infra:devStart     # 개발 ν™˜κ²½ μ‹œμž‘
./gradlew memory-infra:prodStart    # ν”„λ‘œλ•μ…˜ ν™˜κ²½ μ‹œμž‘

⚑ memory-batch (Batch Layer)

μ—­ν• : 배치 처리 및 μŠ€μΌ€μ€„λ§

  • 라이브러리 JAR: 배치 μž‘μ—… μ •μ˜
  • μ˜μ‘΄μ„±: memory-domain

μ£Όμš” κ΅¬μ„±μš”μ†Œ:

memory-batch/
β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ BatchConfig.java            # Spring Batch μ„€μ •
β”‚   └── SchedulerConfig.java        # μŠ€μΌ€μ€„λŸ¬ μ„€μ •
└── job/
    └── testJob/                    # 배치 μž‘μ—… μ •μ˜

μ˜μ‘΄μ„± κ·Έλž˜ν”„

graph TD
    A[memory-api] --> B[memory-common]
    A --> C[memory-domain]
    C --> B
    D[memory-adapter] --> C
    D --> B
    E[memory-batch] --> C
    F[memory-infra]
Loading