์๋
์ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ entity
๋ฅผ view
์ ๊ทธ๋๋ก ๋ฐํํ๋ค๊ฐ Dto
๋ก ๋ณํํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์ด์ ๋ฐ๊ฟจ์๋๋ฐ, Entity
์ dto
์ ๋ํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌํ๋ฉด ์ข์ ๊ฑฐ ๊ฐ์ ๊ธ์ ์ฐ๊ฒ ๋์๋ค.
(์ผ๊ธฐ ๊ฐ์ด ์จ์ง ์๋ ์๊ณ , ๊ตฌ๊ธ ์๋จ์ ๋
ธ์ถ๋ ๋ธ๋ก๊ทธ ๊ธ์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ ๊ธ์ด ๋ ์๋ ์์ ๊ฒ ๊ฐ์ง๋ง ํ๋ก์ ํธ ๊ธฐ๋ก ํ๊ธฐ ์ํด ์์ฑํด๋ณด๊ฒ ๋ค!)
entity
์ ์ง์ ๋ฐํํ๋ ์ฝ๋์์ dto
๋ก ๋ณํํ์ฌ view
ํํ
๋ฐํํ ์ด์ ๋ ์ฒซ ๋ฒ์งธ ์ด์ ๋ Entity
์ setter
๋ฅผ ์์ ๊ธฐ ์ํด์์์ง๋ง ์ด์ ๋๋ถ์ด ๋ด๊ฐ ์ฐพ์๋ณธ entity
์ dto
๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋ ์ด์ ์ ๋ํด ์ ์ด๋ณด๊ฒ ๋ค.
entity
๋ฅผ ์ฌ์ฉ์์๊ฒ ๋
ธ์ถํ๋ฉด ์ํ์ง ์๋ ์ํฉ์์ ์์์ ์์ฑ์ด ๋ณ๊ฒฝ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ํฐํฐ๋ฅผ UI๊ณ์ธต์ ๋
ธ์ถํ๋ ๊ฒ์ ํ
์ด๋ธ ์ค๊ณ๋ฅผ ํ๋ฉด์ ๊ณต๊ฐํ๋ ๊ฒ์ด๋ ๋ค๋ฆ์๊ธฐ ๋๋ฌธ์ ๋ณด์์์ผ๋ก๋ ๋ฐ๋์งํ์ง ๋ชปํ ๊ตฌ์กฐ๊ฐ ๋๋ค.
๋ํ dto
๋ setter
๋ฅผ ํ์ฉํ์ง๋ง entity
์์ setter
๋ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉด ์๋๋ค.
์๋ฅผ ๋ค์ด ํ์๊ฐ์
์ ํ ๋๋ ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ, ์๋๋ก๊ทธ์ธ ์ฌ๋ถ ์ ๋ณด๋ง ์์ฑํ๋ฉด ๋๋ค. ํ์ง๋ง ๋๋ฉ์ธ ๊ฐ์ฒด Member
๋ ๊ทธ ์ด์์ ์์ฑ์ ๊ฐ์ง๊ณ ์์ ๊ฒ์ด๋ค. ํ์ ์ด์์ผ๋ก ์ฌ์ฉ์๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ค๋ฅธ ์์ฑ๋ค๊น์ง ํญ์ ๋ฐ์ดํฐ ์ ์ก์ ์ฐธ์ฌํ๊ฒ ๋๋ ๊ฒ์ด๋ค. (๋ณด์์๋ ์์ข๊ณ ์๋๋ ๋๋ ค์ง)
๊ทธ๋ฆฌ๊ณ ์๋๋ก๊ทธ์ธ ์ฌ๋ถ์ ๊ฐ์ ์์ฑ์ Member
์ ์์ ์๋ ์๋ค.
์ด์ ๊ฐ์ด Dto
์ Entity
์ ์ฐจ์ด๋ก ์ธํด Dto
์ Entity
๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ ์ ์๊ฒ ๋ณด์ฌ์ค์ผ ํ ์ ๋ณด๊ฐ ๋ฐ๋๋ฉด, ์ํฐํฐ๋ฅผ ์์ ํด์ผ ํ๋ค.
jpa์์ ์๋ฐฉํฅ ์ฐธ์กฐ๋ ์ํฐํฐ๋ฅผ controller
์์ ๋ฐํํ๋ฉด, ์ํ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. ๊ฒฐ๊ตญ ๋ฌดํ ๋ฃจํ์ ๋น ์ ธ ์คํ์ค๋ฒ ํ๋ก์ฐ๊ฐ ๋ฐ์ํ๋ค.
jpa์์ ์ํ์ฐธ์กฐ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด @JsonManagedReference์ @JsonBackReference
์ ์ฌ์ฉํ๊ฑฐ๋, @JsonIgnore
์ ์ฐ๊ฑฐ๋ ํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง Dto
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์์ ๊ธฐ๋ ํ๊ณ ๊ฐ๋ฐ์๊ฐ ๋ณด๊ธฐ์๋ ์ข๊ธฐ ๋๋ฌธ์ ๋ง์ด ์ถ์ฒํ๊ณ ์๋ค.
์ํฐํฐ ํด๋์ค๋ DB์ ํ
์ด๋ธ๊ณผ ๋งค์นญ๋๋ ํ๋๊ฐ ์์ฑ์ผ๋ก ์ ์ธ๋์ด ์๊ณ , ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด ์์ฑ๋์ด์๋ ๊ณณ์ด๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์์ฑ์๋ @Column, @JoinColumn , @ManyToOne, @OneToOne
๋ฑ์ ๋ชจ๋ธ๋ง์ ์ํ ์ฝ๋๊ฐ ์ถ๊ฐ๋๋ค.
์ฌ๊ธฐ์ ๋ง์ฝ @NotNull, @NotEmpty, @NotBlank
๋ฑ๊ณผ ๊ฐ์ ์์ฒญ์ ๋ํ ๊ฐ์ validation
์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ค๋ฉด ์ํฐํฐ ํด๋์ค๋ ๋ ๋ณต์กํด์ง๊ณ ๊ทธ๋งํผ ๊ฐ๋
์ฑ์ด ์ ํ๋๋ค.
์ด๋, ๊ฐ๊ฐ์ ์์ฒญ์ ํ์ํ validation
์ DTO
์์ ์ ์ํ๋ค๋ฉด, ์ํฐํฐ ํด๋์ค๋ฅผ ์ข ๋ ๋ชจ๋ธ๋ง๊ณผ, ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์ค๋๋๋ก ๋ง๋ค ์ ์๋ค.
๊ทธ๋ผ Dto
์ Entity
๋ฅผ ์ด๋์ ๋ณํํด์ผ ํ ๊น?
์ผ๋จ์ (controller-service-repository ๊ณ์ธต์ธ ๊ฒฝ์ฐ) repository
์์ dto
์ entity
์ ๋ณํํ๋ ๊ฑด ์๋๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. Repository
๋ Entity
์ ์์์ฑ์ ๊ด์ฅํ๋ ์ญํ ์ ํ๋๊น ๊ตณ์ด ์ฐพ์๋ณด์ง ์์๋ repository
์์ ๋ณํํ๋ ๊ฒ ์ณ์ง ์๋ค๋ ์๊ฐ์ ์์ฐ์ค๋ฌ์ ๋ค.
๊ทธ๋ผ service vs controller
์ ๋ํ ๊ณ ๋ฏผ์ ํ ์ ์์ ๊ฒ์ด๋ค.
View
์ ๋ฐํํ ํ์๊ฐ ์๋ ๋ฐ์ดํฐ๊น์ง Domain
๊ฐ์ฒด์ ํฌํจ๋์ด Controller
(ํํ ๊ณ์ธต)๊น์ง ๋์ด์จ๋ค.Controller
๊ฐ ์ฌ๋ฌ Domain
๊ฐ์ฒด๋ค์ ์ ๋ณด๋ฅผ ์กฐํฉํด์ DTO
๋ฅผ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ, ๊ฒฐ๊ตญ Service
(์์ฉ ๊ณ์ธต) ๋ก์ง์ด Controller
์ ํฌํจํ๋ค.Domain
๊ฐ์ฒด๋ค์ ์กฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ ํ๋์ Controller
๊ฐ ์์กดํ๋ Service
์ ๊ฐ์๊ฐ ๋น๋ํด์ง๋ค.์ด๋ฌํ ๋ฌธ์ ์ ์ด ์์ง๋ง, service์ ์์ ๋๊ฐ ๋์์ง๋ค๋ ์ฅ์ ์ด ์๋ค.
service
์์ entity
๋ฅผ dto
๋ก ๋ณํํ๋ฉด, controller
๋ ๊ทธ dto
์ ๋ณด๋ฅผ ๊ทธ๋๋ก view
์ ๋ณด๋ด์ฃผ๋ฉด ๋๋ค.
'๋ก์ง'์ service
๊ฐ ์ํํ๋ค๋ ์ ์์ ์์ฐ์ค๋ฌ์ ๋ณด์ด๊ธฐ๋ ํ๋๋ฐ
Dto
๋ view
์ ์์กดํ๊ณ ์๋ ๋ฐ์ดํฐ์ด๋ค. ๊ทธ๋ผ Dto
๋ฅผ service
๊ณ์ธต์์ ์๊ณ ์๋ ๊ฒ์ด ๋ฐ๋์งํ๊ฐ์ ๋ํ ๊ณ ๋ฏผ์ด ์์ ์ ์์ ๊ฒ ๊ฐ๋ค. ๋ง์ฝ ์ ์ ์๊ฒ ๋ณด์ฌ์ค ๋ฐ์ดํฐ๊ฐ ๋ฐ๋๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค๋ฉด? service
๊ณ์ธต๊น์ง ์ฝ๋ ์์ ์ด ๋ฐ์ํ๋ค.
๋ํ serive
์์ view
์๊ฒ ์ ๋ฌํ ์ ๋ณด๋ฅผ ๋ชจ๋ ์๊ณ ์์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋ view
์ entity
๋ฅผ ์ง์ ๋ฐํํ๋ค๊ฐ dto
๋ฅผ ๋์
ํ๋ฉด์ ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋๋ฐ,
๋ค๋ฅธ Service์์ ํ์ฌ Service๋ฅผ ํธ์ถ ํ๊ณ ์ถ์๋ฐ DTO๋ฅผ ๋ฐํํ๋๊น ๋ฌธ์ ๊ฐ ๋๋ค
๊ทธ๋์ dto๋ฅผ ๋์
ํ์ ๋ ์ฝ๋๋ฅผ ์๊ฐ๋ณด๋ค ์ฝ๋๋ฅผ ๋ง์ด ๋ฏ์ด๊ณ ์ณค๋ ๊ฒ ๊ฐ๋ค. Serice๊ฐ entity๋ฅผ ๋ฐํํ๊ณ , Controller๊ฐ dto๋ก ๋ณํํ๋ ๊ฒฝ์ฐ
์๋ค๋ฉด ์ด๋ฌํ ์ํฉ์ด ์ผ์ด๋์ง ์์์ ๊ฒ์ด๋ค. (์ด๊ฒ service์ ์์ ๋๊ฐ ๋๋ค๋ ๋ง!)
Controller
๊ฐ View
์์ ์ ๋ฌ๋ฐ์ DTO
๋ง์ผ๋ก Entity
๋ฅผ ๊ตฌ์ฑํ๊ธฐ๊ฐ ์ด๋ ค์ธ ์๋ ์๋ค.
์๋ฅผ ๋ค๋ฉด ๋ก๊ทธ์ธํ ๋, LonginDto
์๋ ์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ์ ๋ณด๋ง ์๋๋ฐ ์ด ์ ๋ณด๋ง์ผ๋ก Member
entity ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์ ๊ฒ์ด๋ค. Member
์๋ ํ์ ์ด๋ฆ, ํ์ id, ๋น๋ฐ๋ฒํธ, ํ์ ์ฃผ์, ๋ฑ๊ธ ๋ฑ ๋ค์ํ ์ ๋ณด๊ฐ ์์ ๊ฒ์ด๋ค.
๋ํ Dto
์๋ Entity
์ ๋ค์ด๊ฐ์ง ์๋ ์ ๋ณด๊ฐ ์์ ์ ์๋ค. (ex. ์ฝ๊ด ์ ๋ณด)
๋ฐ๋ผ์ controller
๊ฐ dto
๋ฅผ entity
๋ก ๋ณํํ๋ ๊ฑด (service
์ ์์กดํ๊ฒ ๋๋ฏ๋ก)
controller
์๊ฒ ๋ฒ๊ฑฐ์ด ์ผ์ด ๋ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
service
์ Dto
๊ฐ ๋ค์ด์จ๋ค๋ ์ ์์ ์ฝ๊ฐ์ ์ข
์์ ์ด๋ผ๊ณ ํ ์ ์์ง๋ง, service
ํจ์ ์๋จ์์ Dto->Entity
์์
์ ํด์ฃผ๊ณ ๊ทธ ๋ค์๋ถํฐ๋ Dto
๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ํ์๋ค๋ผ๋ฆฌ ์ฝ์ํ๋ฉด ์ข
์์ ์ต์ฌํ ์ค์ผ ์ ์๋ค.
๋๋ controller๊ฐ dto๋ฅผ entity๋ก ๋ณํํด์ service์๊ฒ ์ ๋ฌ
ํ๋ ์ ๋ฐฉ๋ฒ๋ณด๋ค๋ ์ด๊ฒ ๋ ๋์ ์ ํ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค.
๋๋ ์ฒ์์ service
์์ Dto->Entity
, Entity->Dto
์์
์ ๋ ๋ค ํด์ฃผ์๋ค. dto
์ entity
๋ฅผ ๋ณํํ๋ค๋ ๊ฒ๋ ๋ด๋ถ ๋ก์ง์ ํด๋นํ๊ณ service
์ ์ญํ ๊ณผ ์ด์ธ๋ฆฐ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ตณ์ด entity->dto
, dto->entity
์ด ๋ ๊ณผ์ ์ ๋ฐ๋ก ๋์ง ์๋ ๊ฒ ๊น๋ํ๋ค๊ณ ์๊ฐํด์ serive
๊ฐ ๋ ๋ณํ ์์
์ ํ๊ฒ ๋ง๋ค์๋ค.
(์ด๊ฑด ๊ทธ๋ฅ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์
๋๋ค)
๊ทผ๋ฐ service
์์ Dto
๋ฅผ ์๊ณ ์๋ค๋ ๊ฒ ๊ฑธ๋ฆฌ๊ธฐ๋ ํ๊ณ , Dto
๋ง์ผ๋ก entity
๋ฅผ ๋ง๋๋ ๊ฑด ์ด๋ ต์ง๋ง entity
๋ฅผ ๊ฐ์ง๊ณ dto
๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฑด service
๊ณ์ธต์ด๋ controller
๊ณ์ธต์ด๋ ๋น์ทํ ๊ฑฐ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋์ service
์์๋ ๋ฐ๋ก dto->entity
ํด์ ์ดํ์ entity
๋ง ์ฌ์ฉํ๊ณ , service
๋ controller
์๊ฒ entity
๋ฅผ ๋ฐํํ์ฌ controller
๊ฐ entity->dto
์์
์ ์ํํ๊ฒ ๋ง๋ค ์๊ฐ์ด๋ค.
Member
public MemberDto toMemberDto(){
MemberDto memberDto = new MemberDto();
...
return memberDto;
}
}
LoginDto
public Member toEntity(){
...
return new Member(this.getName(), homeAddress, workAddress, this.getEmail(), this.password);
}
๋ ์ฒ์์ Entity
์ toDto()
๋ฉ์๋๋ฅผ ๋ง๋ค๊ณ , Dto
์ toEntity()
๋ฉ์๋๋ฅผ ๋ง๋ค์ด ๋ณํํ๋ค.
๊ทผ๋ฐ Entity
๊ฐ Dto
๋ฅผ ์๊ณ ์๋ ๊ฒ ๊ทธ๋ ๊ฒ ์ข๊ฒ ๋ณด์ด์ง ์๋๋ค. Entity
๋ ํต์ฌ ํด๋์ค์ธ๋ฐ Dto
ํ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด toDto()
๋ผ๋ ๋ฉ์๋๋ ๋ฐ๊ปด์ผ ํ๊ธฐ ๋๋ฌธ์ Entity
์ ์ฝ๋ ์์ ์ด ๋ฐ์ํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ Entity
๊ฐ Dto
์ ์์กดํ๋ ๊ฒ์ ์ข์ง ์๋ค.
์ด๊ฑด ๊ทธ๋ฅ ๊ฐ๋จํ๊ฒ Dto
์์ toDto()
์ toEntity()
๋ฅผ ๋ ๋ค ๊ตฌํํด์ฃผ๋ ๊ฑธ๋ก ํด๊ฒฐํ๋ค. ์ฒ์์ ์ด ๋ฐฉ๋ฒ์ด ์๊ฐ ์๋ฌ๋ ์ด์ ๊ฐ ์ด๋ ๊ฒ ํ๋ฉด entity๋ฅผ dto๋ก ๋ฐ๊ฟ ๋ dto ๊ฐ์ฒด๊ฐ ์์ด์ผ ๋ฐ๊ฟ ์ ์๋ ๊ฑฐ ์๋๊ฐ..? ๊ทธ๋ผ ์ด๋ฏธ dto๊ฐ ์๋๋ฐ ์ ๋ฐ๊พธ์ง?
๋ผ๋ ์๊ฐ ๋๋ฌธ์ด์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ ์ ๋ฉ์๋๋ก ๋ง๋ค์ด์ ๊ฐ์ฒด ์์ด ์ธ ์ ์๊ฒ ํ์ฌ Dto
์์ ๋ ํจ์๋ฅผ ๋ค ๋ฃ์ ์ ์์๋ค.
์ดํํฐ๋ธ ์๋ฐ ์์ดํ
1, ์์ดํ
2๋ฅผ ์ฝ์ผ๋ฉด์ ๊ธฐ์กด ์์ฑ์๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๋ฐฉ์์ด ์๋ Builder
๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ๋ฐ๊ฟจ๋ค.
๊ทธ๋ฆฌ๊ณ ์์๋ ์จ๋จ์ง๋ง Dto
์์ entity->dto
, dto->entity
ํจ์๋ฅผ ๋ ๋ค ๋ฃ์ผ๋ฉด์ ์ ์ ๋ฉ์๋๋ก ๋ฐ๊พธ์๋๋ฐ, ๋ฐ๊พธ๋ฉด์ toDto๋ผ๋ ๋ฉ์๋๋ช
๋ณด๋ค ์ ์ ํฉํ ๋ฆฌ๋ฉ์๋ ๋ค์ด๋ฐ ์ปจ๋ฒค์
์ ์ง์ผ from
์ด๋ of
์ด๋ผ๋ ์ด๋ฆ์ด ์ ํฉํ๋ค๊ณ ํ๋จํ์ฌ ์์ ํ์๋ค.
์ฐธ๊ณ ํ๋ ๊ธ๋ค
[DTO] DTO์ ์ฌ์ฉ๋ฒ์์ ๋ํ์ฌ
DTO์ ์ฌ์ฉ ๋ฒ์์ ๋ํ์ฌ
Service์์ DTO๋ฅผ ๋ฐํํด๋ ๊ด์ฐฎ์๊น?
์์ฒญ๊ณผ ์๋ต์ผ๋ก ์ํฐํฐ(Entity) ๋์ DTO๋ฅผ ์ฌ์ฉํ์
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค.