๐ก
1. DTO ์ ๋ํ ๊ฐ๋ ์ ์ค๋ช ํ ์ ์๋ค.
2. ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ๋ํด์ ์ค๋ช ํ ์ ์๋ค.
3. ์๋น์ค ๊ณ์ธต, ์ปจํธ๋กค๋ฌ ๊ณ์ธต์ ์ฝ๋๋ก ์์ฑํ ์ ์๋ค.
์์ 1
DTO(Data Transfer Object) ํด๋์ค ๋ง๋ค๊ธฐ (๊ฒ์๊ธ ์ ์ฅ)
DTO๋ ๋ฐ์ดํฐ ์ ์ก์ ์ํ ๊ฐ์ฒด๋ก, ์ฃผ๋ก ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ๊ตํ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด,
ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก, ํน์ ์๋น์ค ๊ณ์ธต์์ ํ๋ ์ ํ ์ด์ ๊ณ์ธต์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
@NoArgsConstructor
@AllArgsConstructor
@Getter
// ์ฆ, ์ฃผ๋ก ๊ณ์ธต๊ฐ์ ๋ฐ์ดํฐ ์ ์ก ๋ชฉ์ ์ผ๋ก ์ค๊ณ ๋๋ค.
public class ArticleDTO {
private String title;
private String content;
// ์ฌ๊ธฐ์ ArticleDTO --> Articl ๋ฐ์ดํฐ ํ์
์ ๋ณํ ์ํค๋
// ๋ฉ์๋๋ฅผ ๋ง๋ค์๋ค.
public Article toEntity() {
return Article.builder()
.title(this.title)
.content(this.content)
.build();
}
}
์์ 2
์๋น์ค ํด๋์ค ๋ง๋ค๊ธฐ (๊ฒ์๊ธ ์ ์ฅ)
์๋น์ค ๊ณ์ธต์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์๋น์ค ๊ณ์ธต์ ์ฃผ๋ก ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ค๊ฐ ๊ณ์ธต์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ์ฒ๋ฆฌํ๋ ๋ชจ๋ ๋น์ฆ๋์ค ๊ท์น์ ๋ด๋นํฉ๋๋ค.
@RequiredArgsConstructor
@Service // IoC (๋น์ผ๋ก ๋ฑ๋ก)
public class BlogService {
//@Autowired // DI <-- ๊ฐ๋ฐ์๋ค์ด ๊ฐ๋
์ฑ ๋๋ฌธ์ ์์ฑ์ ํด์ค๋ค.
private final PostRepository postRepository;
@Transactional // (์์
์ ๋จ์) // ์ฐ๊ธฐ ์ง์ฐ ์ฒ๋ฆฌ๊น์ง
public Article save(ArticleDTO dto) {
// ๋น์ฆ๋์ค ๋ก์ง์ด ํ์ํ๋ค๋ฉด ์์ฑ...
return postRepository.save(dto.toEntity());
}
}
@Service ์ด๋ ธํ ์ด์ ์ ํด๋น ํด๋์ค๋ฅผ ์คํ๋ง ์ปจํ ์ด๋์ ๋น(Bean)์ผ๋ก ๋ฑ๋กํด์ฃผ๋ ์ญํ
์ฆ, ์คํ๋ง ์ปจํ ์ด๋ ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ๋น์ผ๋ก ๋ฑ๋ก๋๋ค.
๐ก
์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ(ApplicationContext)๊ฐ ์คํ๋ง ์ปจํ ์ด๋์ ๊ตฌ์ฒด์ ์ธ ๊ตฌํ์ฒด ์ค ํ๋์ ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋(Spring Container)๋ ์คํ๋ง ํ๋ ์์ํฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ฆฌํ๊ณ ์คํํ๋ ํต์ฌ ๋ถ๋ถ์ ๋๋ค. ์คํ๋ง ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉํ ๊ฐ์ฒด๋ค(Bean)์ ์์ฑํ๊ณ , ์ด ๊ฐ์ฒด๋ค ๊ฐ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ฉฐ,
์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
์์ 3
์ปจํธ๋กค๋ฌ ํด๋์ค ๋ง๋ค๊ธฐ (๊ฒ์๊ธ ์ ์ฅ)
์ปจํธ๋กค๋ฌ ํด๋์ค๋ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ (URL ๋งตํ), ๊ทธ ์์ฒญ์ ์๋น์ค ๊ณ์ธต์ผ๋ก ์ ๋ฌํ๋ฉฐ, ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ฌ์ฉ์์๊ฒ ๋ฐํํ๋ ์ญํ ์ ํฉ๋๋ค.
@RequiredArgsConstructor
@RestController // @controller + @responsebody
public class BlogApiController {
private final BlogService blogService;
// URL , ์ฆ, ์ฃผ์ ์ค๊ณ - http://localhost:8080/api/article
@PostMapping("/api/articles")
public ResponseEntity<Article> addArticle(@RequestBody ArticleDTO dto) {
// 1. ์ธ์ฆ ๊ฒ์ฌ
// 2. ์ ํจ์ฑ ๊ฒ์ฌ
Article savedArtilce = blogService.save(dto);
return ResponseEntity.status(HttpStatus.CREATED).body(savedArtilce);
}
}