REST API에 대하여 설명해 주세요.
-
“Representational State Transfer” 의 약자로 자원을 이름(자원의 표현)으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다.
-
구성요소
- 자원(Resource)
- 행위(Verb)
- 표현(Representations)
-
제약조건
- Client-Server
- Stateless
- Caching
- Uniform Interface
- identification of resources
- manipulation of resources through representations
- self-descriptive message
- HATEOAS(hyermedia as thr engine of application state)
- Layered System
- Code on demand(Optional)
MVC에 대하여 설명해 주세요.
- MVC(Model-View-Controller) 패턴은 소프트웨어 개발에서 사용되는 아키텍처 패턴 중 하나로, 소프트웨어의 구성 요소를 Model, View, Controller 3개의 역할로 분리하여 각각의 역할을 담당하도록 설계하는 패턴입니다.
- 각각의 역할을 분리하여, 코드의 재사용성과 유지보수성을 향상시키고, 소프트웨어 개발 과정에서의 역할 분담과 협업을 용이하게 합니다.
- Model: 애플리케이션의 데이터와 데이터 처리 로직을 담당합니다. 데이터의 유효성 검사, 데이터베이스와의 상호작용, 데이터의 변경 등의 작업을 수행합니다.
- View: 사용자 인터페이스(UI)를 담당합니다. 모델에서 처리한 데이터를 적절한 형식으로 사용자에게 보여주거나, 사용자의 입력을 수신하여 컨트롤러에 전달합니다.
- Controller: 모델과 뷰 간의 상호작용을 조정합니다. 사용자의 입력에 따라 모델의 데이터를 업데이트하거나, 뷰의 표시를 갱신합니다.
Cookie, 세션(Session)에 대하여 설명해 주세요.
-
Cookie
- 웹 서버가 클라이언트(웹 브라우저)에게 전송하는 작은 데이터 조각입니다.
- 쿠키는 클라이언트 측에서 저장되며, 클라이언트가 웹 서버에 요청을 보낼 때마다 해당 쿠키가 함께 전송됩니다.
-
Cookie 특징
- 이름, 값, 만료일(저장 기간 설정), 경로 정보로 구성되어 있습니다.
- 클라이언트에 총 300개의 쿠키를 저장할 수 있습니다.
- 하나의 도메인 당 20개의 쿠키를 가질 수 있습니다.
- 하나의 쿠키는 4KB(=4096byte)까지 저장 가능합니다.
-
쿠키의 동작 순서
- 클라이언트가 페이지를 요청합니다. (사용자가 웹사이트 접근)
- 웹 서버는 쿠키를 생성합니다.
- 생성한 쿠키에 정보를 담아 HTTP 화면을 돌려줄 때, 같이 클라이언트에게 돌려줍니다.
- 넘겨 받은 쿠키는 클라이언트가 가지고 있다가(로컬 PC에 저장) 다시 서버에 요청할 때 요청과 함께 쿠키를 전송합니다.
- 동일 사이트 재방문시 클라이언트의 PC에 해당 쿠키가 있는 경우, 요청 페이지와 함께 쿠키를 전송합니다.
-
세션(Session)
- 서버 측에서 클라이언트의 상태를 유지하기 위해 사용되는 개념입니다.
- 클라이언트가 서버에 접속하면 서버는 클라이언트에게 고유한 세션 ID를 부여하고, 해당 세션 ID를 서버에 저장합니다. 클라이언트가 서버에 요청을 보낼 때마다 세션 ID를 함께 전송하고, 서버는 세션 ID를 사용하여 클라이언트의 상태를 유지합니다.
- 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라 합니다.
-
세션 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장합니다.
- 웹 서버의 저장되는 쿠키(=세션 쿠키)
- 브라우저를 닫거나, 서버에서 세션을 삭제했을때만 삭제가 되므로, 쿠키보다 비교적 보안이 좋습니다.
- 저장 데이터에 제한이 없습니다.(서버 용량이 허용하는 한...)
- 각 클라이언트 고유 Session ID를 부여합니다. Session ID로 클라이언트를 구분하여 각 클라이언트 요구에 맞는 서비스 제공합니다.
-
세션의 동작 순서
- 클라이언트가 페이지를 요청합니다. (사용자가 웹사이트 접근)
- 서버는 접근한 클라이언트의 Request-Header 필드인 Cookie를 확인하여, 클라이언트가 해당 session-id를 보냈는지 확인합니다.
- session-id가 존재하지 않는다면, 서버는 session-id를 생성해 클라이언트에게 돌려줍니다.
- 서버에서 클라이언트로 돌려준 session-id를 쿠키를 사용해 서버에 저장합니다. 쿠키 이름 : JSESSIONID
- 클라이언트는 재접속 시, 이 쿠키(JSESSIONID)를 이용하여 session-id 값을 서버에 전달합니다.
JWT(JSON Web Token)에 대하여 설명해 주세요.
-
Json Web Token의 약자로 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격입니다.
-
주로 사용자의 인증(authentication) 또는 인가(authorization) 정보를 서버와 클라이언트 간에 안전하게 주고 받기 위해서 사용됩니다.
-
특징
- 보통
Authorization
HTTP 헤더를Bearer <토큰>
으로 설정하여 클라이언트에서 서버로 전송됩니다. - 서버에서는 토큰에 포함되어 있는 서명(signature) 정보를 통해서 위변조 여부를 빠르게 검증할 수 있게 됩니다.
- Base64로 인코딩이 되어있습니다.
- 보통
-
구조
- 하나의 JWT 토큰은 헤더(header)와 페이로드(payload), 서명(signature) 이렇게 세 부분으로 이루어지며 각 구역이
.
기호로 구분됩니다.
<헤더>.<페이로드>.<서명>
- 헤더(header)에는 토큰의 유형과 서명 알고리즘에 명시합니다.
- 페이로드(payload)에는 소위 claim이라고도 불리는 사용자의 인증/인가 정보가 담깁니다.
- 서명(signature)에는 헤더와 페이로드가 비밀키로 서명되어 저장됩니다.
- 하나의 JWT 토큰은 헤더(header)와 페이로드(payload), 서명(signature) 이렇게 세 부분으로 이루어지며 각 구역이
-
장점
- 확장성이 용이하다. JWT는 토큰 자체에 사용자의 정보가 저장되어 있어있기 때문에 서버 입장에서 토큰을 검증만 해주면 되기 때문입니다.
- 쿠키를 사용하지 않으므로 CORS 문제에서 자유로워진다.
-
한계
-
어느 정도 규모가 있는 서비스에서 사용자 인증 용도로 JWT를 사용하기에는 부족한 경우가 있습니다.
-
현재 로그인된 사용자의 모든 장비들을 나열
-
특정 장비에서 로그아웃을 허용하는 기능을 구현