νλ‘μ νΈλ 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
μν : μΈλΆ μμ²μ λ°μ μ²λ¦¬νλ μΉ κ³μΈ΅ + 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
μν : μμ λλ©μΈ λͺ¨λΈκ³Ό λΉμ¦λμ€ κ·μΉ
- λΌμ΄λΈλ¬λ¦¬ JAR: λλ©μΈ μν°ν°μ μΈν°νμ΄μ€ μ 곡
- μμ‘΄μ±:
memory-common
μ£Όμ ꡬμ±μμ:
memory-domain/
βββ domain/ # JPA μν°ν°
β βββ member/Member.java # νμ μν°ν°
β βββ memory/Memory.java # μΆμ΅ μν°ν°
β βββ BaseTimeEntity.java # κ³΅ν΅ λ² μ΄μ€ μν°ν°
βββ repository/ # Repository μΈν°νμ΄μ€ (ꡬν체 μμ)
βββ dto/search/ # λλ©μΈ νΉν DTO (ElasticSearch)
μν : μΈλΆ μμ€ν μ°λ λ° κΈ°μ μ ꡬν체
- λΌμ΄λΈλ¬λ¦¬ 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/ # μ€μ νμΌ
μν : ν‘λ¨ κ΄μ¬μ¬ λ° κ³΅ν΅ μ νΈλ¦¬ν°
- λΌμ΄λΈλ¬λ¦¬ JAR: λ€λ₯Έ λͺ¨λμμ μ°Έμ‘°
- μμ‘΄μ±: λ€λ₯Έ λͺ¨λλ€μ κΈ°λ°
μ£Όμ ꡬμ±μμ:
memory-common/
βββ annotation/ # 컀μ€ν
μ΄λ
Έν
μ΄μ
(@Auth, @MemberId)
βββ component/
β βββ jwt/ # JWT ν ν° μ²λ¦¬
β βββ security/ # 보μ μ»΄ν¬λνΈ
βββ config/security/ # Spring Security + CORS μ€μ
βββ exception/ # κ³΅ν΅ μμΈ ν΄λμ€
βββ response/ # κ³΅ν΅ μλ΅ ν¬λ§·
βββ util/ # κ³΅ν΅ μ νΈλ¦¬ν°
μν : μΈνλΌμ€νΈλμ² λ° 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 # νλ‘λμ
νκ²½ μμμν : λ°°μΉ μ²λ¦¬ λ° μ€μΌμ€λ§
- λΌμ΄λΈλ¬λ¦¬ 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]