์๋ ํ์ธ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๋ฏผ์ ์ ๋๋ค ๐ซง
์ค๋์ DTO, Entity๊ฐ ๋ฌด์์ด๋ฉฐ Mapper๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค.
๋ํ ์ถ๊ฐ์ ์ผ๋ก @Mapper ์ ๋ํ ์ด์ ๊น์ง ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค !
์์๋ณด๊ธฐ์ ์์, ๊ทธ๋ฆผ์ผ๋ก ์ดํด๋๊ธฐ ์ฝ๊ฒ ์ค๋ช ํด ๋ณด์์ต๋๋ค.
โ๐ป Entity
- ์ค์ DB์ ํ ์ด๋ธ๊ณผ ๋งค์นญ๋ ํด๋์ค
- ํ ์ด๋ธ๊ณผ ์ฐ๊ฒฐ๋ ํด๋์ค์์ ๋ํ๋
- DB ํ ์ด๋ธ์ ์กด์ฌํ๋ ์ปฌ๋ผ๋ค์ ํ๋๋ก ๊ฐ์ง๋ ๊ฐ์ฒด๋ฅผ ๋งํจ
์ฆ, ํ ์ด๋ธ์ด ๊ฐ์ง์ง ์๋ ์ปฌ๋ผ์ ๊ฐ์ ธ์๋ ์๋จ
โ๐ป DTO
- Data Transfer Object, ๋ฐ์ดํฐ ์ ์ก ๊ฐ์ฒด
- ํ๋ก์ธ์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๊ฐ์ฒด
- DB์์ ๋ฐ์ดํฐ๋ฅผ ์ป์ด Service๋ Controller ๋ฑ์ผ๋ก ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ๊ฐ์ฒด
- ๋ก์ง์ ๊ฐ์ง์ง ์๊ณ Getter/Setter ๋ฉ์๋๋ง์ ๊ฐ๋ ์์ํ ๊ฐ์ฒด
๐ User์ ์๋ ์ ๋ณด๊ฐ Id, name, email, password ๊ฐ ์์ ๋,
* Password๋ ๊ด๋ก์, ์ธ๋ถ์ ๋ ธ์ถ์ด ๋์๋ ์๋๋ ์ ๋ณด
๐ User.java
public class User {
public Long id;
public String password;
public String name;
public String email;
}
๐ UserDto.java
public class UserDto {
public Long id;
public String name;
public String email;
}
๐ ์ DTO๋ฅผ ์ธ๊น?
- ์ธ๋ถ์ ํต์ ํ๋ ํ๋ก๊ทธ๋จ์๊ฒ ์์ด ํธ์ถ์ ํฐ ๋น์ฉ ! ์์ฒญ์ ๋ฐ๋ผ ๋น์ฉ์ด ์ฆ๊ฐํจ
- ๋๋ฌธ์ ํ๋ฒ์ ์์ฒญ์ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํด์ผ ํจ → ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ชจ์ ํ ๋ฒ์ ์ ๋ฌํ ์ ์๋ ํด๋์ค์ธ DTO ์ฌ์ฉ
๐ DTO์ Entity๋ฅผ ๋ถ๋ฆฌํ๋ ์ด์ : ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ
- Entity์ ๊ฐ์ด ๋ณํ๋ฉด Repository์์ DB ๊ฐ์ด ๋ฐ์๋๊ณ ์ด๋ ๋ค๋ฅธ ๋ก์ง์๋ ์ํฅ์ ๋ฏธ์นจ
- View์ ํต์ ํ๋ฉด์ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ง์ DTO ํด๋์ค๋ฅผ ๋ถ๋ฆฌํด์ฃผ์ด์ผ ํจ
์ฆ, DB์ ์ํธ์์ฉํ ๋์๋ Entity ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
Request, Response ์ฒ๋ฆฌํ ๋๋ DTO ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ
์ฌ๊ธฐ์ Entity → DTO๋ก, DTO → Entity๋ก ๋ณํํด ์ฃผ๊ธฐ ์ํด MapStruct ๋ฅผ ์ฌ์ฉ !
(ModelMapper ํด๋์ค๋ ์์ง๋ง, ์ด๋ฒ ํฌ์คํ ์์๋ MapStruct ์ฌ์ฉ)
โ๐ป MapStruct
- DTO์ Entity ๊ฐ ๊ฐ์ฒด Mapping์ ํธํ๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๐ ์์กด์ฑ ์ถ๊ฐ
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
- ์๋ฐ์์ ์ฌ์ฉํ ๋๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๊ณ @Mapper ์ ๋ํ ์ด์ ์ ๋ถ์ฌ์ฃผ๋ฉด ๋จ
- ํ๋ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋๋ฉฐ ๋ง์ฝ ์ด๋ฆ์ด ๋ค๋ฅด๋ฉด @Mapping(sourc="~" , target="~")์ผ๋ก ์ง์
@Mapper
public interface UserMapper {
UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
@Mapping(target="id")
UserEntity userDtoToEntity(UserDto dto);
UserDto uwerEntityToDto(UserEntity entity);
}
โ๐ป Mapper
- Mapper ํด๋์ค๋ DTO ํด๋์ค์ ์ํฐํฐ ํด๋์ค๋ฅผ ์๋ก ๋ณํํ๋ ํด๋์ค
์ฆ, DB์ ์ ์ฅํ๊ธฐ ์ํด ์ํฐํฐ์ ๋ง๊ฒ ๋ณํํด์ฃผ๋ ๊ณผ์
- ์์กด๊ด๊ณ๋ ์ต๋ํ ์ฝํ๊ฒ ํจ
- ์ปจํธ๋กค๋ฌ์ ์๋น์ค์ ์์กด์ ๋น์ฉ ๋ฌธ์ ์์ ์ํํจ
→ ์๋น์ค DTO๋ฅผ ๋ง๋ค๊ฑฐ๋ Mapper๋ฅผ ํตํด ์ํธ ๋ณํํ์ฌ ์์กด๊ด๊ณ๋ฅผ ์ค์ฌ ํด๊ฒฐ
๐ Mapper XML
- Mapper ์ธํฐํ์ด์ค๋ง์ผ๋ก๋ ์ถฉ๋ถํ SQL๋ฌธ์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํจ
But, ๋ณต์กํ๊ณ ๊ธธ์ด์ง๋ SQL ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ XML ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์ข์
'Study > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] DAO / DTO / VO / Entity (0) | 2022.11.21 |
---|---|
[Spring] ModelAndView ๊ฐ์ฒด (0) | 2022.11.18 |
[Spring] Annotation (0) | 2022.10.24 |
[Spring] JDBC์ JPA (0) | 2022.10.23 |
[Spring] Spring Data JPA์ QueryDSL (1) | 2022.10.08 |