DTO๋ Data Transfer Object๋ฅผ ์๋ฏธํ๋ค.
์ง์ญ์ ํด๋ณด๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ Object์ด๋ค.
๊ฐ ํด๋์ค๋ฅผ ์ด๋ํ ๋๋ง๋ค DTO๋ผ๋ ์ด๋์๋จ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธด๋ค.
DTO๋ฅผ ์ฒ์ ๋ณธ๊ฑด Controller์์ Client์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ค๋์ด๋ค.
์ฝ๊ฒ๋ DB์์ ๋์ง์ด๋ธ ๊ฐ์ฒด ๊ทธ ๋ชจ๋๋ฅผ ์ ์กํ ์ ๋์๋ค.
์ ์ ์ ๊ฐ์ฒด๋ฅผ ๊บผ๋๋ค๋ฉด ์์ด๋ ๋น๋ฐ๋ฒํธ ๋ฑ ๊ฐ์ธ์ ๋ณด๊ฐ ๋ชจ๋ ๋ค์ด์์๊ฑด๋ฐ ๊ทธ๊ฒ์ ํ์ํ ๊ฒ๋ง ๋ด์์ ๋ณด๋ด์ผํ๋ค๋๊ฒ์ด๋ค.
๋จ์ํ๊ฒ ์ ์ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ ๊ทธ์ค ํ์ํ ๊ฒ๋ง ๋ณ์์ ๋ด์์ ๋ณด๋ด๋ ๊ฒ์ด๋ผ ๋จ์ํ๊ฒ ์๊ฐํ ์์๋ค.
Controller, Service, Repository์ ์ด๋์ ์ํฐํฐ = Domain์ ํ๋ก ์ด๋ํ๋คํ๋๋ฐ DB์ ์ ์ก๋๋ ๊ฐ์ฅ ์ค์ํํ์ Controller, Service, Repository์ด๋ํ๋ค๋ณด๋ฉด ๋ค๋ฅธ ๋ก์ง์ด ์ฒจ๊ฐ๋ ์๊ฐ ์๋ค๋๊ฒ์ด๋ค. ์์ธํ ์์๋ณด์.
View Layer์ DB Layer์ ์ญํ ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด์
-> ๊ฐ์ฒด๋ฅผ ํํํ๊ธฐ ์ํ ๊ณ์ธต๊ณผ ์ ์ฅํ๋ ๊ณ์ธต์ ์ญํ ์ ๋ถ๋ฆฌํ๊ธฐ ์ํด์ DTO๋ฅผ ์ฌ์ฉํ๋ค.
Entity ๊ฐ์ฒด์ ๋ณ๊ฒฝ์ ํผํ๊ธฐ ์ํ์ฌ
-> Entity ๊ฐ์ฒด๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋๋จธ์ ์๋์ ๋ค๋ฅด๊ฒ ๋ฐ์ดํฐ๊ฐ ๋ณ์ง๋ ์ ์๋ค.
View์ ํต์ ํ๋ DTO ํด๋์ค๋ ์์ฃผ ๋ณ๊ฒฝ๋๋ค
-> View(ํด๋ผ์ด์ธํธ)์ ํต์ ํ๋ DTO ํด๋์ค, ์๋ฅผ ๋ค์ด ResponseDTO, RequestDTO๋ ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ์์ฃผ ๋ณ๊ฒฝ๋๋ค. ์ด๋ค ์์ฒญ์์๋ ํน์ ๊ฐ์ด ์ถ๊ฐ๋ ์๋ ์๊ณ , ํน์ ๊ฐ์ด ์์ ์๋ ์๋ค.
๋ฐ๋ผ์ Entity ํด๋์ค์ ๋ถ๋ฆฌํ์ฌ ๊ด๋ฆฌํด์ผ ํ๋ค.
๋๋ฉ์ธ ๋ชจ๋ธ๋ง์ ์งํค๊ธฐ ์ํ์ฌ
-> ๋๋ฉ์ธ ์ค๊ณ๋ฅผ ์ํ์๋ค๊ณ ํ๋๋ผ๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ธฐ๊ฐ ์ฝ์ง ์์ ์ ์๋ค.
์๋ฅผ ๋ค์ด Entity ํด๋์ค์ ํน์ ์ปฌ๋ผ๋ค์ ์กฐํฉํ์ฌ ํน์ ํฌ๋งท์ ์ถ๋ ฅํ๊ณ ์ถ๋ค๊ณ ํ์.
Entity ํด๋์ค์ ํํ์ ์ํ ํ๋๋ ๋ก์ง์ด ์ถ๊ฐ๋๋ฉด ๊ฐ์ฒด ์ค๊ณ๋ฅผ ๋ง๊ฐ๋จ๋ฆด ์ ์๋ค.
๋ฐ๋ผ์ DTO์ ํํ์ ์ํ ๋ก์ง์ ์ถ๊ฐํด์ ์ฌ์ฉํ๋ ๊ฒ์ด Entity์ ๋๋ฉ์ธ ๋ชจ๋ธ๋ง์ ์งํฌ ์ ์๋ค.
Entity
public class User {
public Long id;
public String name;
public String email;
public String password; //์ธ๋ถ์ ๋
ธ์ถ๋์๋ ์ ๋ ์ ๋ณด
public DetailInformation detailInformation; //์ธ๋ถ์ ๋
ธ์ถ๋์๋ ์ ๋ ์ ๋ณด
//๋น์ฆ๋์ค ๋ก์ง, getter, setter ๋ฑ ์๋ต
}
Controller
@GetMapping
public ResponseEntity<User> showArticle(@PathVariable long id) {
User user = userService.findById(id);
return ResponseEntity.ok().body(user);
// ์ด๋ ๊ฒ return ํด์ฃผ๋ฉด password๊น์ง ๋ค ๋์ด๊ฐ๋ค
}
DTO
public class UserDto {
public final long id;
public final String name;
public final String email;
//์์ฑ์ ์๋ต
public static UserDto from(User user) {
return new UserDto(user.getId(), user.getName(), user.getEmail());
}
}
Controller
@GetMapping
public ResponseEntity<UserDto> showArticle(@PathVariable long id) {
User user = userService.findById(id);
return ResponseEntity.ok().body(UserDto.from(user));
// ํ์ํ๊ฒ๋ง ๋ด์์ ๋ณด๋ด๋ DTO๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ฉด ํ์ํ๊ฒ๋ง ๋ณด๋ผ์์๋ค.
}