| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- DI
- redis
- AWS
- @ComponentScan
- securitycontextholderfilter
- JPA
- mybatis
- 페이징
- MSA
- 지연 로딩
- DLQ
- docker compose
- @Transactional
- CORS
- Spring
- 스프링 부트
- 컨테이너
- Dead Letter Queue
- Spring Data JPA
- dockerhub
- 쿠버네티스
- Web
- kafka
- Routing Key
- JWT
- JdbcTemplate
- docker
- JPQL
- 서블릿 컨테이너
- Spring Container
- Today
- Total
look-forest
Spring 웹 개발 기초 본문
이번 시간에는
먼저 백엔드의 큰 그림부터 보고, Server가 무엇을 어떻게 Serve 하는지 알아보겠다.
백엔드 구조의 큰 그림
Spring을 활용한 백엔드는 보통 MVC 패턴 구조를 사용한다.

- 컨트롤러: 웹 MVC의 컨트롤러 역할
- 도메인: DB에 저장되고 관리되는 비즈니스 도메인 객체 (예: 회원, 주문 등)
- 레파지토리: DB에 접근, 도메인 객체를 DB에 저장하고 관리.
- 서비스: 핵심 비즈니스 로직 구현. 도메인 객체를 가지고 핵심 비즈니스가 동작하도록 구현한 객체
Q. 도메인과 DTO의 차이는?
DTO(Data Transfer Object)
DTO는 계층간 데이터 교환을 위한 객체이다.
화면에서 넘어온 Form 데이터를 받기 위한 목적으로 DTO를 만들었다.
"DTO 클래스는 View와 통신하며 자주 변경되므로 entity와 분리"
도메인 패키지는 가급적 HTML Form이나 UI에서 직접 넘어오는 데이터를 모르도록 설계해야 좋다
이렇게 분리해두면 향후 UI나 넘어오는 정보가 변경되어도 해당 도메인을 변경하지 않아도 된다.
(도메인을 변경해야 할 만큼 변경이 크면 모두 변경 필요)
아래 코드에서 무엇이 도메인이고 무엇이 DTO인가?

DTO는 바로~

서버가 데이터를 전달하는 방식
개요
1. 정적 컨텐츠 전달
- 그냥 미리 만들어 둔 HTML을 브라우저에게 전달
2. MVC와 템플릿 엔진(동적 컨텐츠)
- 서버가 HTML을 동적으로 바꿔서 전달
- MVC: Controller가 HTML 생성을 위한 템플릿(View) 지정하여 데이터(Model) 전달
- 템플릿 엔진: Controller로부터 전달받은 데이터(Model)에 기반해 동적으로 HTML 생성. View에 해당. JSP, PHP 등.
3. API
- HTML이 아닌 JSON(데이터 포맷)으로 내려줌
- 모바일 or FE(React.js)에게 API로 데이터를 내려주면 화면을 클라이언트가 그림
- 서버끼리 통신할 때도 사용하는 방식
1. 스프링 부트의 정적 컨텐츠 기능
톰캣이 요청받아 스프링에게 요청을 넘긴다
- 컨트롤러 먼저 뒤진다
- 없으면 static 폴더를 뒤진다

예)

로 요청하면, 컨트롤러 등 아무것도 만들지 않아도 스프링이 알아서 찾아 전달한다.

resource - static에서 꺼내서.
- URL에 해당하는 Controller가 있을 경우: resource/template/home.html 반환
@GetMapping("/")
public String home(){
return "home"
}
- 없을 경우: resource/static/index.html 반환
2. MVC와 템플릿 엔진
MVC로 나누는 이유: 관심사의 분리
- View는 화면을 그릴뿐
- Model은 데이터를 담아 화면에 전달
- Controller는 비즈니스 로직 및 뒷단의 내부 처리에 집중

예)

로 요청하면, 해당 Controller를 거쳐

View가 지정되고 Model(DTO)에 데이터가 담겨 전달된다.


3. HTTP API
HTML이 아닌 Data를 직접 전달하므로,
- @ResponseBody 설정 - HTTP Response Body에 데이터를 직접 반환하겠다는 표시
- Model 필요 X - View를 만들지 않으므로

주로 객체를 전달한다
@ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환된다
# @ResponseBody 사용 원리
- HTTP의 BODY에 데이터를 직접 반환한다
- viewResolver 대신에 HttpMessageConverter가 동작한다
- 문자 처리, 객체 처리 등 여러 HttpMessageConverter가 기본으로 등록되어 있다.
- 이는 클라이언트의 HTTP Accept 헤더와 Controller 반환 타입 정보를 조합해 선택된다.

예)


참고 자료 & 이미지 출처
스프링 입문(김영한 님)
'Spring > Spring 웹 개발 큰 그림' 카테고리의 다른 글
| AOP (0) | 2021.05.02 |
|---|---|
| 스프링 DB 접근 기술(신) (0) | 2021.05.01 |
| 스프링 DB 접근 기술(구) (0) | 2021.05.01 |
| 스프링 빈과 의존 관계 (0) | 2021.04.27 |
| 프로젝트 환경 설정 (0) | 2021.04.24 |