잉?

[SpringBoot] 3 Layer Architecture를 알아보자 본문

자바(Java)/스프링부트(SpringBoot)

[SpringBoot] 3 Layer Architecture를 알아보자

Jye_647 2023. 6. 23. 10:14

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를 사용해서 간결하게 코드작성을 수행한다.

 

 

 

 

Comments