일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- HTML
- stringbuffer
- 부트캠프
- 기본생성자
- @builder
- 캡슐화
- 상속
- CRUD
- 깃허브
- @NoArgsConstructor
- html tag
- 자바
- 에러
- 부스트코스
- DTO
- entity
- Python
- 코드업
- java
- Codeup
- SQL
- 파이썬
- HashSet
- github
- 알고리즘
- lv1
- git
- @AllArgsConstructor
- 프로그래머스
- 브랜치
- Today
- Total
잉?
[SpringBoot] 3 Layer Architecture를 알아보자 본문
3 레이어 아키텍처를 이용해 간단한 CRUD기능이 들어간 게시판을 만들보겠다.
3 레이어 아키텍처는 Controller / Service / Repository로 나뉘어있다.
Controller
클라이언트의 요청을 받고, 요청에 대한 로직 처리를 Service에게 전담한다.
Service에서 처리 완료된 결과를 클라이언트에게 응답한다.
Service
사용자의 요구사항을 처리하는 실세이다.
DB저장 및 조회가 필요할 때는 Repository에 요청한다.
Repository
DB 관리 + CRUD 작업을 처리한다.
DTO(Data Transfer Object)
프로세스 사이에서 데이터를 전송하는 객체이다.
Entity
실제, 독립체라는 뜻을 가지고 있는데 데이터베이스와 1:1로 매칭하기 위해 존재한다라고 생각할 수 있다.
데이터베이스 테이블이라고 생각하면 이해가 편하다.
3 Layer에 추가로 request, response 데이터가 들어있는 dto와 entity 패키지를 추가해 줬다.
오늘은 흐름에 대해 살펴보는 것에 중점을 두겠다.
먼저 게시글을 생성하는 기능을 구현한 것인데
BlogController.java
@RestController
@RequiredArgsConstructor // 조건 final 붙여주기
public class BlogController {
private final BlogService blogService;
@PostMapping("/blogs")
public BlogResponseDto createBLog(@RequestBody BlogRequestDto blogRequestDto){
// responseDto 로 보내줌
BlogResponseDto blogResponseDto = blogService.createBlog(blogRequestDto);
return blogResponseDto;
// 이렇게 한줄로도 가능
// return blogService.createBlog(blogRequestDto);
}
1. 게시글에 작성할 변수가 들어간 blogRequestDto를 받아와서 service의 createBlog() 메서드로 보낸다.
BlogService.java
@Service
@RequiredArgsConstructor
public class BlogService {
private final BlogRepository blogRepository;
public BlogResponseDto createBlog(BlogRequestDto blogRequestDto) {
// dto -> entity
Blog newBlog = new Blog(blogRequestDto);
// entity -> db저장
Blog saveBlog = blogRepository.save(newBlog);
// entity -> ResponseDto 바꿔서 보내줌
BlogResponseDto responseDto = new BlogResponseDto(saveBlog);
return responseDto;
// 한줄로 줄인다면
// return new BlogResponseDto(blogRepository.save(new Blog(blogRequestDto));
}
2. 받아온 dto를 데이터베이스에 넣어주기 전 entity로 바꿔줘야 한다.
그 과정을 Service에서 진행한다.
Blog.java
@Entity
@Getter
@NoArgsConstructor
public class Blog {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column
private String title;
@Column
private String username;
@Column
private String contents;
@Column
private String password;
public Blog(BlogRequestDto blogRequestDto) {
this.title = blogRequestDto.getTitle();
this.username = blogRequestDto.getUsername();
this.contents = blogRequestDto.getContents();
this.password = blogRequestDto.getPassword();
}
3. Blog 엔티티를 만들어준다.
BlogRepository.java
public interface BlogRepository extends JpaRepository<Blog, Long>{ }
4. repository는 인터페이스로 만들어주고, Jpa를 사용해서 간결하게 코드작성을 수행한다.
'자바(Java) > 스프링부트(SpringBoot)' 카테고리의 다른 글
[SpringBoot] Service단에서의 DTO <--> Entity의 변환. (0) | 2023.07.11 |
---|---|
[SpringBoot] Entity란? + @Table, @NoArgsConstructor, @AllArgsConstructor (0) | 2023.07.10 |
[SpringBoot] 빌더 패턴의 “toEntity”와 “of” 메서드 (0) | 2023.07.04 |
[SpringBoot] 빌더 패턴(Builder Pattern)이란? + 사용 이유 (0) | 2023.06.30 |
[SpringBoot] Path Variable과 Request Param의 차이점 (0) | 2023.06.27 |