티스토리 뷰

Spring

Spring MVC 패턴 CRUD API 만들기

장진혁 2023. 2. 28. 00:46

평소에 MVC 패턴에 대해서는 Model, View, Controller 계층으로 나누어진 모델로 알고있었다. 

하지만 이것을 어떻게 적용하고 이용하는지는 모르고 있었는 것 같다. 

그래서 오늘 과제를 하면서 계층별로 나누어서 적용하여 코드를 작성해 보았다. 

 

매니저님 순회 시간에 Model 이라는 개념에서 잘 이해가 가지 않아서 물어봤는데

내가 모르고 있었던 부분이 완벽하게 이해가 되었다. 

 

그 부분이 무엇이냐면 모델이라는 부분이 Service, Repository, Entity 가 모여서 만들어진 것이 모델계층이라는 것이다.

Controller에서 계층간에 값을 이용할때 Dto를 쓰고 Model 계층에서는 Entity를 쓰다고 한다.

그리고 Controller에서 Entity를 쓰지말고 Model 계층에서는 Dto를 쓰지 말라고 한다.

이유는 간단하다 적용하는 계층이 다르기 때문이다.

MVC 패턴의 사용 이유

Business logic과 Presentation logic을 분리하기 위함
  • Business logic : 데이터의 처리 및 응용을 수행하는 로직
  • Presentation logic : 화면상의 디자인 구성을 위한 로직
Model
  • 데이터 저장소와 연동하여 사용자의 데이터를 저장하거나
    데이터를 출력하는 등의 일을 수행함 여러개의 데이터 변경작업(추가, 변경 , 삭제)
  • 여러개의 데이터 변경작업을 하나로 묶는 트랜잭션의 역할도 수행함 DAO class중 service에 해당됨
public class PostService {

    private final PostRepository postRepository;

    @Transactional
    public Post createPost(PostDto postDto) {
        Post post = new Post(postDto);
        postRepository.save(post);
        return post;
    }
View
  • 모델이 처리한 데이터나 결과를 바탕으로 사용자에게 출력할 화면을 만드는 역할
  • 뷰 컴포넌트는 html , css , Js를 사용하여 출력할 UI를 생성해줌 생성된 UI는 웹 브라우저가 출력
Controller
  • Client의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 Model을 호출
  • 클라이언트가 보낸 데이터가 있다면 Model을 호출할 때 전달하기 쉽게 데이터의 가공
  • 모델의 업무 수행이 완료되면 그 결과를 바탕으로 화면을 구성하도록 View에 전달
@PostMapping("/api/posts") // 게시글 저장 name content password
    public Post createPost(@RequestBody PostDto postDto) {
        System.out.println(postDto.toString());
        return postService.createPost(postDto);
DTO(Data Transfer Object)
  • 데이터를 전달하기 위한 객체. 주로 View와 Controller 사이에서 데이터를 주고받을 때 활용.
  • getter, setter 메소드 포함. 이 외의 비즈니스 로직은 포함하지 않음.
@Getter
@ToString
public class PostDto {
    private String username;
    private String password;
    private String title;
    private String contents;
}
Entity
  • 실제 DB 테이블과 매핑되는 핵심 클래스. 절대로 Entity를 요청이나 응답 값을 전달하는 클래스로 사용해서는 안된다. 이를 기준으로 테이블이 생성되고 스키마가 변경되기 때문.
  • DTO처럼 setter 메소드를 가지는 경우 가변 객체로 활용 가능. 비즈니스 로직 포함.
@Getter
@Entity
@NoArgsConstructor
public class Post extends Timestamped{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @Column(nullable = false)
    private String username;

 

 

 

 

 

참고 사이트

https://oneul-losnue.tistory.com/259

 

[TIL] 3주차 주특기 입문ㅣCRUD API 만들기 1편

Spring 입문 주차 개인 과제 이번 주차는 처음으로 개인 과제를 받았다. 스프링 부트를 이용하여 CRUD API를 만드는 것인데 자세한 요구사항은 다음과 같다. 🚩 Goal: "스프링 부트로 로그인 기능이

oneul-losnue.tistory.com

https://tecoble.techcourse.co.kr/post/2021-05-16-dto-vs-vo-vs-entity/

 

DTO vs VO vs Entity

DTO와 VO는 분명히 다른 개념이다. 그런데, 같은 개념으로 생각해서 사용하는 경우가 많다. 왜일까? ⌜Core J2EE Patterns: Best Practices and Design Strategies⌟ 책의 초판에서는 데이터 전송용 객체를 로 정의

tecoble.techcourse.co.kr

https://velog.io/@dplo1514/SPRING-MVC-%EB%AA%A8%EB%B7%B0%EC%BB%A8

 

SPRING MVC 모뷰컨

Model , View , Controller 패턴의 개념이다.스프링 JPA , DATA 등등의 스프링 생태계에서 내가 제일 처음 접한 봄은 스프링 부트이다. MVC모델에 대한 개념을 이해하기위해 정리했던 내용들을 적어보려한

velog.io

 

'Spring' 카테고리의 다른 글

@Valid 어노테이션으로 Parameter 검증하기 ft.정규식  (0) 2023.03.05
JPA  (0) 2023.03.04
트랜젝션(Transaction)  (0) 2023.03.02
IoC 와 DI  (0) 2023.03.01
객체지향 프로그래밍  (1) 2023.02.26
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함