[Spring] 데이터의 흐름 Spring MVC, 3 Layer

Sun choi·2024년 8월 19일

NEW 지식

목록 보기
17/34
post-thumbnail

스프링 입문강의와 수준별수업과 구글링에서 배운 내가 이해한 것들을 내 언어로 정리!

JSON

서버 - 클라이언트 통신을 위한 규격.
대부분의 언어에서 핸들링하는 라이브러리를 제공(그 중 하나가 Jackson-spring.starter 안에 포함)
통일된 언어(양쪽 통번역 가능)

DTO

data transfer object
데이터 이동 객체, 계층간의 데이터 이동(3 Layer의 계층)

동기 vs 비동기

동기(Synchronous) - Spring MVC. 작업이 순차적으로 진행되는 것. 요청 들어오면 끝날때까지 기다렸다가 처리.
비동기(Asynchronous) - Spring webFlux. 작업이 독립적으로 실행되며, 작업의 완료 여부를 기다리지 않고 다른 작업을 실행할 수 있는 방식을 의미.


Spring MVC (Spring Boot)

우리가 배우고 있는 것(스프링 생태계에서 우리는 한 부분을 배운다)
Spring: 자바 어플리케이션 개발을 도와주는 프레임워크.
회사에서 많이 쓰는 spring 무언가 : Spring MVC(전통적인 동기식 웹 애플리케이션 개발을 위한 프레임워크.), Spring webFlux(비동기식, 논블로킹 웹 애플리케이션 개발을 위한 프레임워크), Sping Bath(대규모의 데이터 처리 작업을 배치로 실행하기 위한 프레임워크)...

그래서 MVC가 무엇이냐!

개념 분리, 파일 분리 (디자인패턴과 유사)
클라이언트와 서버간의 구조 관점에서 접근한 개념.
코드의 재사용성과 유지보수성을 높이고, 개발자들 간의 협업을 용이하게 함.
Model View Controller

1. Model (모델)

  • 역할: 데이터와 비즈니스 로직을 다룬다.
  • 쉽게 설명: 모델은 애플리케이션이 관리해야 하는 정보나 데이터를 의미. 예를 들어, 사용자의 정보(이름, 나이, 주소 등)를 저장하거나 데이터베이스에서 가져오는 작업을 담당.

2. View (뷰)

  • 역할: 사용자가 보게 될 화면을 담당.
  • 쉽게 설명: 뷰는 데이터를 시각적으로 표현하는 부분. 화면에 출력될 내용(HTML, 텍스트 등)을 만들고, 사용자에게 보여주는 역할.

3. Controller (컨트롤러)

  • 역할: 모델과 뷰를 연결하는 다리 역할.
  • 쉽게 설명: 컨트롤러는 사용자의 요청을 받아서, 그 요청을 처리하고, 결과를 뷰에 전달해 화면에 나타나게 하는 역할.
  • 예시: 사용자가 스케줄 일정을 요청을 하면, 컨트롤러는 그 요청을 받아 모델에게 전달해주고 모델에서 작업이 마무리되면 뷰에게 전달하는 역할.

✔️ 옛날에 MVC 패턴이 생겨날 당시에는 스프링에서 데이터도 만들어주고 화면도 보여주는 방식이 일반적인 방식이였다. 그러나 점점 기술이 발전되면서 데이터를 만들어서 보여주는 서버와 사용자에게 화면을 보여주는 클라이언트 부분의 역할이 커지면서 복잡해지기 시작하여 이를 분리시켰다.
서버와 클라이언트 간의 데이터를 주고 받는 RESTful API 가 주류로 자리 잡았다
이전에는 View를 통해서 직접 화면을 그려서 보여줬다면 요즘은 Json 형식으로 프론트에 데이터를 전달해주고 프론트에서 이를 받아서 사용자에게 보여준다.
결론 : 방식이 변경 되었어도 개념은 동일하기 때문에 여전히 MVC 패턴임
(우리가 하는 responseDto가 view. 요즘 버전의 view는 Json 데이터를 전달하는 것)

전체 흐름 ( RESTful API 버전 )
1. Todo 스케쥴 작성을 위해서 Postman 을 통해서 일정 생성 api를 호출.
2. 컨트롤러가 이 요청을 받아, 모델에게 Todo 스케줄을 생성하도록 지시.
3. 모델이 스케줄을 생성하고 결과를 컨트롤러에게 전달.
4. 컨트롤러는 그 결과를 에 전달하여 Postman에 전달하기 위한 Json 형식을 만든다.
5. 최종적으로 는 Json을 Postman에 전달.


Spring 3 Layer

서버 개발 관점에서 각 계층별로 역할을 분리하는 개념. 역할별로 구별.
사용 이유? 책임의 분리, 유지보수성, 재사용성, 테스트 용이성, 확장성, 보안성 등
Controller은 사용자의 입력값
Servise에서 데이터가 있는지 없는지 실질적인 로직에서 검사
Data Access Layer(Repository, Entity)는 데이터 접근 레이어

1. Presentation Layer (프레젠테이션 레이어) Controller

  • 역할: 사용자가 입력한 데이터의 형식이나 간단한 유효성 검사를 수행. 예를 들어, 입력 필드가 빈 값인지, 숫자 필드에 숫자가 들어왔는지, 이메일 형식이 올바른지 등을 검증.
  • 쉬운 설명 :
    • 사용자가 입력한 요청이 유효한 요청인지 검사하고 필터링 하는 역할
    • 사용자에게 요청을 받고, 데이터를 전달하는 역할
  • 구성 요소:
    • Controller: Spring MVC의 @Controller 또는 @RestController

2. Service Layer (서비스 레이어) Service

  • 역할: 비즈니스 로직을 처리하는 핵심 레이어. Presentation Layer와 Data Access Layer 사이에서 중간 역할. Presentation Layer의 요청을 받아 필요한 데이터를 가공하거나 로직을 실행하여 결과를 반환.
  • 쉬운 설명 :
    • 사용자가 요청한 요구사항이 실질적으로 처리하는 역할
  • 구성 요소:
    • Service: @Service 어노테이션으로 표시된 클래스

3. Data Access Layer (데이터 접근 레이어) Repository

  • 역할: 데이터베이스와 상호작용하며, 데이터를 저장, 검색, 업데이트, 삭제하는 역할. 비즈니스 로직에서 데이터를 필요로 할 때 이 레이어를 통해 데이터를 처리.
  • 쉬운 설명 :
    • 스프링에서 데이터 베이스의 데이터를 처리하는 역할
  • 구성 요소:
    • Repository : @Repository 어노테이션으로 표시된 클래스들이 여기에 속하며, JPA, Hibernate, MyBatis 등과 같은 ORM(Object-Relational Mapping) 프레임워크를 사용해 데이터베이스와 상호작용.
    • Entity: 데이터베이스 테이블과 매핑되는 도메인 객체로, 데이터베이스에서 가져오거나 저장할 데이터를 캡슐화.

MVC와 3 Layer의 차이점

MVC - 클라이언트와 서버 간의 구조 관점. 웹 전체!
Spring 3 Layer - 서버 개발 관점 내 각 계층별로 역할 분리. 서버 내!

Spring MVC
주된 관심사 : 사용자 요청 처리와 응답 생성
- Spring MVC의 주요 목적은 클라이언트(사용자)와 서버 간의 상호작용을 관리하는 것이다. 이를 통해 웹 애플리케이션이 사용자의 요청을 받아 처리하고, 그 결과를 사용자에게 적절한 형식으로 반환하는 과정을 쉽게 구현할 수 있다.

Spring 3 Layer
주된 관심사 : 애플리케이션의 구조화 및 계층화
- Spring 3 Layer 는 애플리케이션을 세 개의 주요 계층으로 나누어 각 계층이 독립적으로 동작할 수 있도록 구조화하는 데 초점을 맞춘다. 이를 통해 애플리케이션의 유지보수성과 확장성을 향상시킬 수 있다.

profile
풀스택 개발자의 공부기록 📖

0개의 댓글