
์คํธ๋ง๋ถํธ์์ DDD์ฒ ํ์ ๊ธฐ๋ฐํ์ฌ ๊ฐ๋ฐํ๋๊ฒ๊ณผ EDD์ ๊ธฐ๋ฐํ์ฌ ๊ฐ๋ฐํ๋ ๊ฒ์ ๋น๊ตํด์ค
Spring Boot ํ๊ฒฝ์์ DDD(Domain-Driven Design, ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ) ์ EDD(Event-Driven Design, ์ด๋ฒคํธ ์ฃผ๋ ์ค๊ณ) ๋ ๋ชจ๋ ๋๊ท๋ชจ ์์คํ
์ค๊ณ์ ์์ฃผ ์ฌ์ฉ๋๋ ์ฒ ํ์
๋๋ค.
ํ์ง๋ง ๋ ๋ฐฉ์์ ๊ด์ , ์ด์ , ์ํคํ
์ฒ ๊ตฌ์ฑ ๋ฐฉ์์ด ๋ค๋ฆ
๋๋ค.
์๋์ ๋น๊ต๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌํด๋๋ฆด๊ฒ์.
๐งฉ ๊ฐ์ ๋น๊ต
| ํต์ฌ ๊ฐ๋ | ๋๋ฉ์ธ(๋น์ฆ๋์ค ๋ก์ง)์ ์ค์ฌ์ผ๋ก ์ค๊ณ | ์ด๋ฒคํธ(event)๋ฅผ ์ค์ฌ์ผ๋ก ์์คํ ๊ฐ ํต์ ์ค๊ณ |
| ์ฃผ์ ๋ชฉ์ | ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ ๋ช ํํ ๋ชจ๋ธ๋ง | ์์คํ ๊ฐ ๋น๋๊ธฐ์ ์ฐ๋๊ณผ ํ์ฅ์ฑ ํ๋ณด |
| ์ค๊ณ ์ด์ | ๋๋ฉ์ธ ๋ชจ๋ธ, ์ ๊ทธ๋ฆฌ๊ฒ์, ๋ฆฌํฌ์งํ ๋ฆฌ, ์๋น์ค | ์ด๋ฒคํธ ๋ฐํ(Publish)๊ณผ ๊ตฌ๋ (Subscribe) ํ๋ฆ |
| ์ฃผ์ ๊ตฌ์ฑ์์ | Entity, Value Object, Domain Service, Aggregate Root | Event, Event Producer, Event Consumer, Message Broker |
| ํต์ ๋ฐฉ์ | ์ฃผ๋ก ๋๊ธฐ (๋ฉ์๋ ํธ์ถ, REST ๋ฑ) | ๋น๋๊ธฐ (Kafka, RabbitMQ, Event Bus ๋ฑ) |
| ์ ํฉํ ์ํฉ | ๋ณต์กํ ๋น์ฆ๋์ค ๊ท์น ์ค์ฌ์ ๋๋ฉ์ธ | ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ๋น๋๊ธฐ ํต์ ์ด ํ์ํ ์์คํ |
โ๏ธ Spring Boot ๊ธฐ๋ฐ ๊ตฌํ ๊ด์ ๋น๊ต
๐ข DDD ๊ธฐ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์
1. ๊ตฌ์กฐ ์์

2. ํน์ง
- ๋๋ฉ์ธ ์ค์ฌ์ผ๋ก ํจํค์ง๋ฅผ ๊ตฌ์ฑํ์ฌ, ๋น์ฆ๋์ค ๊ท์น์ ์ฝ๋์ ๋ช ํํ ๋ฐ์ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด Order ๋๋ฉ์ธ์ ์ํ ๋ณํ(OrderCreated, OrderPaid, OrderShipped)๋ฅผ ์ํฐํฐ ๋ด๋ถ์์ ๊ด๋ฆฌํฉ๋๋ค.
- ์ ์ง๋ณด์๊ฐ ์ฝ๊ณ , ๋๋ฉ์ธ ์ ๋ฌธ๊ฐ(๊ธฐํ์)์์ ํ์ ์ด ์ฉ์ดํฉ๋๋ค.
3. ๋จ์
- ์ด๊ธฐ ์ค๊ณ๊ฐ ๋ณต์กํ๊ณ , ๋๋ฉ์ธ ๋ชจ๋ธ๋ง์ ๋ง์ ์๊ฐ ํฌ์ ํ์
- ๋ง์ดํฌ๋ก์๋น์ค๋ก ๋ถ๋ฆฌํ๊ธฐ์ ๊ฒฝ๊ณ ์ค์ ์ด ๋ชจํธํ ์ ์์
๐ก EDD ๊ธฐ๋ฐ ๊ฐ๋ฐ ๋ฐฉ์
1. ๊ตฌ์กฐ ์์

2. ํน์ง
- ๋น์ฆ๋์ค ๋ก์ง์ด ์ด๋ฒคํธ ๋จ์๋ก ๋ถ๋ฆฌ๋์ด, ์๋น์ค ๊ฐ ๊ฒฐํฉ๋๊ฐ ๋ฎ์์ง๋๋ค.
- ์: ์ฃผ๋ฌธ ์์ฑ → OrderCreatedEvent ๋ฐํ → ์ฌ๊ณ ์๋น์ค์์ ํด๋น ์ด๋ฒคํธ ์๋น
- Spring Boot์์๋ Spring Cloud Stream, Kafka, RabbitMQ ๋ฑ์ ํ์ฉํฉ๋๋ค.
3. ๋จ์
- ์ด๋ฒคํธ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ด๋ ค์ (๋๋ฒ๊น , ํธ๋์ญ์ ๊ด๋ฆฌ ๋ณต์ก)
- ๋จ์ํ ์์คํ ์์๋ ์คํ๋ ค ๊ณผ๋ํ ์ค๊ณ๊ฐ ๋ ์ ์์
๐ง ๊ฒฐํฉ ์ ๋ต (DDD + EDD)
์ฌ์ค ์ต๊ทผ์๋ DDD์ EDD๋ฅผ ๊ฒฐํฉํ๋ ์ค๊ณ๊ฐ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
DDD๋ฅผ ํตํด ๋๋ฉ์ธ ๋ชจ๋ธ์ ๋ช
ํํ ์ ์ํ๊ณ , ๊ทธ ์์์ ๋ฐ์ํ๋ ๋๋ฉ์ธ ์ด๋ฒคํธ๋ฅผ EDD๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ์์
๋๋ค.
์์:

์ด๋ ๊ฒ ํ๋ฉด
- DDD์ ๋๋ฉ์ธ ๋ช ํ์ฑ
- EDD์ ๋น๋๊ธฐ ํ์ฅ์ฑ
์ ๋์์ ํ๋ณดํ ์ ์์ต๋๋ค.
โ ์ ๋ฆฌ ์์ฝ
| ์ด์ | ๋๋ฉ์ธ ๋ก์ง๊ณผ ๋ชจ๋ธ๋ง | ์์คํ ๊ฐ ์ด๋ฒคํธ ํ๋ฆ |
| ์ฅ์ | ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง ํํ์ ๊ฐํจ | ์๋น์ค ๊ฐ ํ์ฅ์ฑ๊ณผ ๋์จํ ๊ฒฐํฉ |
| ๋จ์ | ์ด๊ธฐ ์ค๊ณ ๋ณต์ก, ํ์ฅ์ฑ ํ๊ณ | ์ถ์ ์ด๋ ค์, ํธ๋์ญ์ ๋ณต์ก |
| ๊ถ์ฅ ์กฐํฉ | DDD ๊ธฐ๋ฐ + ๋๋ฉ์ธ ์ด๋ฒคํธ๋ฅผ EDD๋ก ์ฒ๋ฆฌ |
@Bean @component @controller @ service @repository @ entity ์ค์์ ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ๊ฒ์ด ์์ผ๋ฉด ๋ถ๋ฆฌํด์ฃผ๊ณ , ์ด๊ฑฐ๋ค์ด ์คํ๋ง์ bean ๊ฐ์ฒด์ ์ด๋ค ๊ด๊ณ๊ฐ ์๋์ง ์๋ ค์ค
์คํ๋ง(Spring)์์ @Bean, @Component, @Controller, @Service, @Repository, @Entity๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
๊ตฌ์ฑ ์์๋ฅผ ์ ์ํ๊ฑฐ๋ ๋ฑ๋กํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ด๋
ธํ
์ด์
์ด์ง๋ง, ๊ทธ ์ญํ ๊ณผ ๋์ ๋ฐฉ์์ด ์กฐ๊ธ์ฉ ๋ค๋ฆ
๋๋ค.
ํนํ, ์ด ์ค์๋ Spring Bean๊ณผ ๋ฌด๊ดํ๊ฑฐ๋ ๊ฐ์ ์ ์ผ๋ก๋ง ๊ด๋ จ๋ ๊ฒ๋ ์์ต๋๋ค.
์๋์ ์ ๋ฆฌํด๋๋ฆฌ๊ฒ ์ต๋๋ค.
๐งฉ ๋จผ์ ๋ถ๋ฅ๋ถํฐ
| โ ์คํ๋ง ๋น(Bean) ๊ด๋ จ ๊ทธ๋ฃน | @Component, @Controller, @Service, @Repository, @Bean | ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ Spring IoC ์ปจํ ์ด๋์ ๋ฑ๋ก๋๋ ๊ฐ์ฒด๋ฅผ ์ ์ | Bean์ผ๋ก ๋ฑ๋ก๋จ |
| ๐ซ ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ๊ทธ๋ฃน | @Entity | JPA์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ๋๋ฉ์ธ ๊ฐ์ฒด | Bean์ผ๋ก ๋ฑ๋ก๋์ง ์์ |
๐ข 1. ์คํ๋ง ๋น ๊ด๋ จ ์ด๋ ธํ ์ด์
์ด๋ค์ ๋ชจ๋ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด, ์ฆ Spring Bean์ ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋ ธํ ์ด์ ์ ๋๋ค.
๐ธ @Component
- ์คํ๋ง์ด ๊ด๋ฆฌํด์ผ ํ ๊ธฐ๋ณธ์ ์ธ ํด๋์ค์ ๋ถ์ด๋ ์ด๋ ธํ ์ด์
- ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ์์ ๊ฐ๋
- ์์:
-
@Component
-
public class MailSender { ... }
๐ธ @Controller
- @Component์ ํน์ํ ์ด๋ ธํ ์ด์
- ์น ์์ฒญ์ ์ฒ๋ฆฌํ๋ MVC ์ปจํธ๋กค๋ฌ๋ก ์ธ์
- ์คํ๋ง์ด DispatcherServlet์ ํตํด ์์ฒญ์ ๋งคํํจ
- ์์:
-
@Controller
-
public class UserController { ... }
๐ธ @Service
- @Component์ ํน์ํ
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ๊ณ์ธต์ ๋ช ์์ ์ผ๋ก ํํ
- ํธ๋์ญ์ ์ด๋ ๋ก๊น ๋ฑ AOP(๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ์ ์ฉ ์ ์ธ์์ ์ ๋ฆฌ
- ์์:
-
@Service
-
public class OrderService { ... }
๐ธ @Repository
- @Component์ ํน์ํ
- ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต(DAO) ์์ ์ฌ์ฉ
- ์คํ๋ง์ด JPA ์์ธ๋ฅผ Spring DataAccessException์ผ๋ก ๋ณํํ ๋ ์๋ ์ธ์
- ์์:
-
@Repository
-
public class OrderRepository { ... }
๐ธ @Bean
- ์ง์ Bean์ ์์ฑํด์ ๋ฑ๋กํ ๋ ์ฌ์ฉ
- ๋ฉ์๋ ๋จ์์์ Bean์ ๋ฐํํ๋ฉฐ, @Configuration ํด๋์ค ์์ ์ ์ธ๋จ
- ์ฆ, ๊ฐ๋ฐ์๊ฐ ์๋์ผ๋ก Bean์ ๋ฑ๋กํ๋ ๋ฐฉ์
- ์์:
-
@Configuration
-
public class AppConfig { @Bean public MailSender mailSender() { return new MailSender(); } }
๐ ์ ๋ฆฌํ์๋ฉด
- @Component, @Controller, @Service, @Repository → ์๋ ์ค์บ(Auto-detection) ์ผ๋ก Bean ๋ฑ๋ก
- @Bean → ์๋ ๋ฑ๋ก(Explicit registration) ๋ฐฉ์
๐ด 2. ์ฑ๊ฒฉ์ด ๋ค๋ฅธ ์ด๋ ธํ ์ด์ : @Entity
@Entity
- JPA(Java Persistence API)์์ DB ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ํด๋์ค์์ ํ์
- ์คํ๋ง ๋น๊ณผ๋ ๋ณ๊ฐ์ ๊ฐ๋ ์ ๋๋ค.
- @Entity ๊ฐ์ฒด๋ ์คํ๋ง IoC ์ปจํ ์ด๋๊ฐ ์๋ JPA EntityManager์ ์ํด ๊ด๋ฆฌ๋ฉ๋๋ค.
- ์์:
-
@Entity
-
public class User { @Id private Long id; private String name; }
์ฆ,
๐ @Entity๋ Spring Bean์ด ์๋๋ผ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ ๋ฒจ์ ์ํฐํฐ ๊ฐ์ฒด์
๋๋ค.
๐ง ์คํ๋ง Bean๊ณผ์ ๊ด๊ณ ์์ฝ
| @Component | ์๋ | Spring IoC | ์ผ๋ฐ ์ปดํฌ๋ํธ |
| @Controller | ์๋ | Spring IoC | ์น ์์ฒญ ์ฒ๋ฆฌ |
| @Service | ์๋ | Spring IoC | ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ |
| @Repository | ์๋ | Spring IoC | ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต |
| @Bean | ์๋ | Spring IoC | ๋ช ์์ Bean ๋ฑ๋ก |
| @Entity | โ Bean ์๋ | JPA EntityManager | DB ๋งคํ ๊ฐ์ฒด |
โ ๊ฒฐ๋ก ์์ฝ
- @Component, @Controller, @Service, @Repository, @Bean → Spring Bean ๋ฑ๋ก์ฉ
- @Entity → JPA ์ ์ฉ, Spring Bean ์๋
- ์คํ๋ง์์ Bean์ผ๋ก ๊ด๋ฆฌ๋๋ค๋ ๊ฒ์ IoC ์ปจํ ์ด๋๊ฐ ๊ฐ์ฒด์ ์์ฑ, ์ด๊ธฐํ, ์ฃผ์ , ์๋ฉธ์ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
'Project ESG+AI > Tech Basics' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| 26์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (1) | 2025.11.13 |
|---|---|
| 25์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.12 |
| 23์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.10 |
| 22์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.07 |
| 21์ผ์ฐจ. IT ๊ฐ๋ ์ ๋ฆฌ (0) | 2025.11.06 |