2025. 5. 7. 11:48ㆍCS
MVC 패턴
model view controller의 약자로 model은 데이터를 조작하는 역할, view는 화면단에 표출되는 페이지, 컨트롤러는 비지니스 로직을 담당한다.
MVT 패턴
model, view, template의 약자며, MVC와 유사한 구조를 가진다.
Django에서 view는 비지니스 로직을 담당하며, template은 장고 템플릿(화면단)을 의미한다.
model은 동일한 역할을 한다.
Rest API
Rest API는 HTTP 요청을 통해 리소스를 URI로 표현하고, 이에 대해 CRUD 행위를 수행하는 구조다.
리소스에 대한 의미있는 행위를 HTTP메서드로 나타냄.
GET : 검색
POST : 생성
PUT : 업데이트
DELETE : 삭제
일반적으로 JSON 형식으로 데이터를 주고받지만, XML이나 YAML 등의 포맷도 사용 가능하다.
REST API는 백엔드와 프론트엔드의 개발을 분리할 수 있게 해주며, 다음과 같은 특징을 가진다:
- 무상태(Stateless)
- 캐시 가능(Cacheable)
- 일관된 인터페이스
- 자체 서술적(Self-descriptive) 메시지
- Client - Server 구조
요청 헤더 및 매개변수에는 메타데이터, 권한 정보, URI, 캐싱 정책, 쿠키 등 중요한 식별자 정보가 포함될 수 있다.
MVC 패턴 요청 과정

구성 요소
- DispatcherServlet
- 가장 먼저 요청을 받기 때문에 프론트 컨트롤러라고도 한다.
- HandlerMapping
- 어떤 컨트롤러로 요청을 전달할지 결정해주는 역할
- Controller
- 비지니스 로직을 수행
- ViewResolver
- 어떤 뷰(화면)을 선택할지 결정하는 역할을 한다.
- View
- 화면에 데이터를 표출하여 사용자에게 인터페이스를 제공
- 과정*
- 사용자 요청
- 디스페처 서블릿이 요청을 받는다.
- 받은 요청을 어떤 비지니스 로직으로 수행해야 할지 핸들러 매핑에게 물어본다.
- 핸들러 매핑은 어떤 컨트롤러로 전달하라고 알려준다.
- 디스페처 서블릿이 전달받은 컨트롤러로 요청을 전달한다.
- 컨트롤러에서 비즈니스 로직을 수행 후, ModelAndView를 전달한다.
- 디스페처 서블릿이 전달 받고, 뷰리솔버에게 어떤 뷰를 사용할지 view를 전달해서 물어본다.
- 뷰리솔버가 어떤 뷰를 사용할지 알려준다.
- 디스페처 서블릿이 특정 뷰에게 데이터를 전달한다.
- 뷰에서 인터페이스를 만들어서 사용자에게 제공한다.
MVT 패턴 요청 과정

구성요소
- URLconf(URL Configuration)
- 사용자의 요청 URL이 어떤 VIEW 함수로 연결될지 라우팅하는 설정
- View
- 비즈니스 로직 수행
- Model
- 데이터베이스와 연결되어 데이터를 처리, 제공 역할
- Template
- 사용자에게 제공되는 인터페이스
- 과정*
- 사용자 요청
- URLconf 를 통해 어떤 view 함수나 클래스로 라우팅할지 결정
- view에서 로직 수행 후 데이터를 Template에 전달한다.
- Template은 데이터를 사용해 HTML 페이지를 생성한다.
- 사용자에게 인터페이스 제공
Spring에서 Rest API 요청 과정
구성 요소
- DispatcherServlet
- 가장 먼저 요청을 받기 때문에 프론트 컨트롤러라고도 한다.
- HandlerMapping
- 어떤 컨트롤러로 요청을 전달할지 결정해주는 역할
- Controller(@RestController)
- 비지니스 로직을 수행, JSON 데이터를 반환
- HttpMessageConverter
- 컨트롤러에서 반환된 자바 객체를 JSON 등의 형식으로 변환하는 역할.
@RestController나 @ResponseBody에 의해 자동으로 동작함
- 컨트롤러에서 반환된 자바 객체를 JSON 등의 형식으로 변환하는 역할.
과정
- 사용자 API 요청
- 디스페처 서블릿이 요청을 받는다.
- 받은 요청을 어떤 비지니스 로직으로 수행해야 할지 핸들러 매핑에게 물어본다.
- 핸들러 매핑은 어떤 컨트롤러로 전달하라고 알려준다.
- 디스페처 서블릿이 전달받은 컨트롤러로 요청을 전달한다.
- 컨트롤러에서 비즈니스 로직을 수행 후, HttpMessageConverter를 통해 자바 객체를 JSON변환해 전달한다.
- 디스페처 서블릿이 JSON을 HTTP 응답으로 만들어 사용자에게 반환한다.
무상태(stateless)란?
REST API에서 무상태란, 서버가 클라이언트의 요청 간 상태 정보를 저장하지 않는 구조를 말한다.
즉, 각 요청은 독립적이며 서버는 이전 요청의 상태를 기억하지 않는다.
기존의 세션 기반(MVC 패턴)에서는 로그인을 하면 서버 메모리에 세션을 저장하고, 이후 요청 시 세션 ID를 통해 사용자 상태를 파악한다.
이 방식은 사용자가 많아질수록 서버의 메모리 부하가 커진다.
반면 REST API는 토큰 기반(JWT 등) 인증 방식을 자주 사용하며,
클라이언트가 상태 정보를 토큰에 담아 요청에 포함시킨다.
서버는 그 토큰만으로 사용자를 식별할 수 있어 별도의 세션을 유지할 필요가 없다.
이 덕분에 서버는 훨씬 가볍고, 수평 확장이 쉬운 구조가 된다.
JSON WEB TOKEN ?
JWT는 사용자 인증 및 권한 부여에 자주 사용되는 토큰 기반 인증 방식이다.
토큰은 3개의 구성 요소로 나뉘며, 각각 "."(dot) 으로 구분된다.
구성
token = base64urlEncoding(header) + '.' + base64urlEncoding(payload) + '.' + base64urlEncoding(signature)
- HEADER
- 서명생성을 위해 어떤 알고리즘을 사용할지 식별한다. HS256은 이 토큰이 HMAC-SHA256을 사용해 서명됨을 의미함.
- PAYLOAD
- 실질적인 사용자 데이터(클레임), 토큰의 주요 데이터가 위치
- SIGNATURE
- 서버의 비밀 키를 기반으로 header + payload를 암호화한 값
- HMAC-SHA256(secret, base64urlEncoding(header)+"."+ base64urlEncoding(payload))
JWT는 자체적으로 인증 정보를 포함하므로, 서버가 별도로 사용자 상태를 저장하지 않아도 된다.
이로 인해 무상태성을 유지하면서도 인증이 가능하다.
'CS' 카테고리의 다른 글
| 프로세스, os, 멀티태스킹, 신호처리 (3) | 2024.12.19 |
|---|