
ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ์ DDD๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํ๋ฉด์,
๊ฐ์ฅ ํฌ๊ฒ ๋ถ๋ชํ ๋ฌธ์ ์ค ํ๋๋ DTO โ Domain โ Entity ๋ณํ ์ฑ
์์ ์ด๋์ ๋ ๊ฒ์ธ๊ฐ์๋ค.
์ฒ์์๋ Service๋ Controller ์์์ ๋ฌด์ฌ์ฝ ๋ณํ์ ์ฒ๋ฆฌํ๋๋ฐ, ์๊ฐ์ด ์ง๋ ์๋ก ๋ ์ด์ด ๊ฐ ๊ฒฝ๊ณ๊ฐ ๋ฌด๋์ง๊ณ , ๋๋ฉ์ธ ์์์ฑ์ด ์ค์ผ๋๋ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ฒ ๋์๋ค.
๊ทธ๋์ ๋ ์ด์ด ๊ฐ ๋ณํ ์ฑ
์์ ๋ถ๋ฆฌํ๋ ๊ธฐ์ค์ ๋ช
ํํ ์ก์๊ณ , ๊ทธ ๊ฒฐ๊ณผ ๊ตฌ์กฐ์ ์์ ์ฑ๊ณผ ๋ณ๊ฒฝ ๋ด์ฑ์ด ํฌ๊ฒ ์ข์์ง๊ฒ ๋์๋ค.
์๋๋ ํ๋ก์ ํธ ๊ฐ๋ฐ์์ ์ ์ฉํ ๊ตฌ์กฐ์ด๋ฉฐ board ๋๋ฉ์ธ์ ๊ฒ์๊ธ์ ์ฌ๋ฆฌ๋ ๊ฒ์ ์๋ฅผ ๋ค์ด๋ณด์.
adapter/web/mapper/ // ๐ board/adapter/web/mapper/BoardWebMapper.java
@Component
public class BoardWebMapper {
public CreateBoardRequest toApplicationDto(CreateBoardWebRequest request, Long userId) {
return new CreateBoardRequest(request.title(), request.content(), userId);
}
public BoardWebResponse toWebDto(CreateBoardResponse response) {
return new BoardWebResponse(response.boardId());
}
}
application/mapper/ // ๐ board/application/mapper/BoardMapper.java
@Component
public class BoardMapper {
// Application Request DTO โ Domain Model
public Board toDomain(CreateBoardRequest request) {
return Board.of(request.title(), request.content(), request.userId());
}
// Domain Model โ Application Response DTO
public CreateBoardResponse toResponse(Board board) {
return new CreateBoardResponse(board.getId());
}
}
adapter/jpa/mapper/ // ๐ board/adapter/jpa/mapper/BoardJpaMapper.java
@Component
public class BoardJpaMapper {
public BoardEntity toEntity(Board board) {
return BoardEntity.of(board.getId(), board.getTitle(), board.getContent(), board.getUserId());
}
public Board toDomain(BoardEntity entity) {
return Board.of(entity.getId(), entity.getTitle(), entity.getContent(), entity.getUserId());
}
}
| ๋ณํ ์ฑ ์ | ์์น | ์ด์ |
|---|---|---|
| Web DTO โ Application DTO | adapter/web/mapper/ | API ํํ๊ณผ ๋ด๋ถ DTO๋ฅผ ๋ถ๋ฆฌ โ ํฅ์ฌ๊ณ ๋ ๊ฒฝ๊ณ ๋ช ํํ |
| Application DTO โ Domain | application/mapper/ | Domain์ ์ธ๋ถ DTO๋ฅผ ๋ชฐ๋ผ์ผ ํจ โ ์์์ฑ ์ ์ง. Request/Response ์๋ฐฉํฅ ๋งคํ ํ์ |
| Domain โ JPA Entity | adapter/jpa/mapper/ | Persistence ์ ์ฉ, JPA ์์กด์ฑ ์ฐจ๋จ โ ๋๋ฉ์ธ ์ค์ผ ๋ฐฉ์ง |
ํฅ์ฌ๊ณ ๋ ์ํคํ
์ฒ + DDD๋ฅผ ์ค๋ฌด์ ์ ์ฉํ๋ฉด์ ๊ฐ์ฅ ํฌ๊ฒ ๋ฐฐ์ด ์ ์
โ๋๋ฉ์ธ ์์์ฑ์ ์งํค๋ ค๋ฉด, ๋ณํ ์ฑ
์์ ๋ฐ๋์ ๊ฒฝ๊ณ์ ๋์ด์ผ ํ๋คโ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ฐ ๊ณ์ธต์ ๊ด์ฌ์ฌ๋ฅผ ๊ตฌ๋ถํ๋๋,
์ฝ๋ ํ์ง์ด ์ ์ง๋๊ณ , ํ
์คํธ๊ฐ ๋จ์ํด์ง ์ ์์ผ๋ฉฐ, ๊ฐ ๊ณ์ธต์ ์๋ฏธ๋ฅผ ๋์ฑ ๋ช
ํํ ํ ์ ์์ ๊ฒ ๊ฐ๋ค!