이 글은 HTTP, Web, Network에 대해 다루고 있습니다.
자세한 내용은 추가로 검색을 해보셔서, 본인의 언어로 정리하시길 추천드립니다.
이 글 역시 제 생각과 언어에 맞게 정리하였고, 틀린 부분이 있을 수 있으니 댓글로 지적해 주시면 감사하겠습니다!
[Web]
💡REST와 RESTful API
⬇️Answer
REST?
REST는 자원(Resource)의 표현(Representation)에 의한 상태 전달을 뜻합니다.
URL을 통해 자원을 명시하고, HTTP Method를 통해 자원에 대한 처리 방법을 지정합니다.
Restful API
REST API는 REST를 기반으로 서비스 API를 구현한 것입니다.
또한, RESTful API는 REST의 원리를 잘 따르는 시스템을 말한다.
📁[Web/Network] REST API란?
💡HTTP
⬇️HTTP의 특징
- HTTP : 하이퍼 텍스트 전송 프로토콜
- 연결을 유지하지 않는 비연결성 특징
- 상태 정보를 저장하지 않는 무상태성 특징
- 정해진 규격의 메시지에 모든 정보를 담아서 통신을 합니다.
⬇️HTTP 통신 방법
클라이언트가 HTTP 요청 메시지에 정보를 담아 서버에 요청하면,
서버는 클라이언트로부터 받은 HTTP 메시지를 확인해서 요청받은 정보를 새로운 HTTP 응답 메시지에 담아 클라이언트에게 응답하게 됩니다.
⬇️HTTP 메시지 구조
- start-line : HTTP method / uri / statusCode
- HTTP Header : HTTP 전송에 필요한 부가 정보들
- Message Body : 실제 전송할 데이터
💡RESTful API와 HTTP
⬇️Answer
REST는 HTTP의 장점을 잘 활용하기 위한 원칙이다.
URI로 자원을 표현하는 데에 집중하고, (API 설계 규칙에 따른 설계)
HTTP Method를 적절히 사용하여 자원의 행위에 대한 정의를 한다.
💡HTTP Method
⬇️Answer
HTTP Method는 REST API에서 해당 자원을 어떤 방식으로 처리할 것인지를 명시해 주는 역할을 합니다.
- GET : 데이터 조회
- POST : 요청 데이터 처리 (데이터 추가)
- PUT : 데이터 수정(데이터가 없으면 새로 생성)
- PATCH : 데이터의 일부를 수정
- DELETE : 데이터 삭제
⬇️💡GET과 POST 메서드의 차이
GET은 데이터를 조회하기 위해 사용합니다.
보통 요청 시에 필요한 데이터를 URL에 PathVariable로 추가시키거나 HTTP Header를 이용합니다.
POST는 데이터를 추가하기 위해 사용합니다. 데이터를 Request Body에 포함하여 전송합니다.
GET 요청 시에도 Request Body를 전송할 수 있지만, 일반적으로 GET 요청을 보내면 Body를 확인하지 않습니다.
💡www.google.com을 웹 브라우저에 입력하고 접속했을 때 일어나는 일 (미완)
⬇️Answer
💡JWT 토큰
⬇️Answer
JWT는 Json Web Token의 약자로, 웹에서 사용되는 JSON 형식의 토큰에 대한 표준 규격입니다.
토큰 자체에 정보를 담고 있어서 JWT 토큰 만으로 사용자의 인증, 인가 정보를 안전하게 주고받을 수 있습니다.
JWT는 헤더(Header), 내용(Payload), 서명(Signature)을 점(.)으로 구분합니다.
헤더는 토큰의 타입과 암호화 알고리즘으로 이루어져 있습니다.
내용에는 원하는 데이터를 key-value 형태로 담습니다. (Clam)
서명에는 헤더와 페이로드가 비밀 암호화 키로 서명되어 저장됩니다.
📁[Spring security] JWT 토큰이란?
💡JWT 토큰을 이용한 인증 인가(Spring Security)
⬇️Answer
- 사용자 로그인 시 JWT 토큰을 생성해서 반환한다.
- 해당 토큰을 클라이언트에서 관리하며, 모든 요청의 "Authorization" header에 토큰을 포함시킨다.
- SpringSecurity filter를 등록해서 JWT 토큰에 문제가 없는지 확인한다. (변조 여부, expired 여부 등)
- 문제가 없다면 SecurityContext에 UserDetails를 로드하는 방식으로 인증을 한다.
📁[Spring Security / JWT] Spring Security - JWT 토큰 인증/인가
💡JWT 토큰을 이용한 인증을 사용하는 이유 vs 세션 인증
⬇️Answer
단일 도메인이라면 세션 기반 인증을 사용할 수 있지만, 분산 환경의 경우 토큰 기반 인증을 사용하는 것이 적합합니다.
세션을 이용하려면 클라이언트에서 갖고 있는 세션 ID에 맞는 value를 서버 측에서 보관해야 합니다.
이 세션 쿠키는 단일 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하기는 어렵습니다.
반면에 JWT 토큰은 토큰 자체에 데이터를 담고 있기 때문에 파싱 방법만 알고 있다면, 어디서나 토큰 내에 저장된 데이터를 이용할 수 있습니다. 따라서 여러 도메인으로 분리된 서비스의 경우 토큰 방식의 인증을 선택해야 합니다.
[네트워크]
💡OSI 7계층과 TCP/IP 4 계층
⬇️Image 정리
⬇️OSI 7계층과 TCP/IP 4 계층
OSI 7 계층
- 1계층(물리 계층) :전기적, 기계적 특성을 이용하여 시스템 간 물리적인 연결을 담당 (주로 하드웨어)
- 2계층(데이터 링크 계층) : 네트워크 기기간 데이터 전송을 관리, 물리주소 부여 (이더넷)
- 3계층(네트워크 계층) : 다른 네트워크와의 데이터 통신을 위한 경로 설정 및 논리 주소 결정 (IPv4, IPv6)
- 4계층(전송 계층) : 두 지점 간의 신뢰성 있는 통신을 담당 (TCP, UDP)
- 5계층(세션 계층) : 통신을 위해 세션을 만드는 계층
- 6계층(표현 계층) : 데이터의 표현 방식을 결정(데이터 변환, 암호화 등)
- 7계층(응용 계층) : 사용자에게 통신을 위한 서비스를 제공
TCP/IP 4계층
OSI 7 계층은 네트워크 통신 과정을 이론적으로 정의한 것이고,
TCP/IP는 실제로 이 이론을 사용하는 표준이고, 4 계층으로 나눕니다.
1(물리), 2(데이터 링크) 계층을 네트워크 접근 계층으로 묶고,
5(전송), 6(표현), 7(응용) 계층을 응용 계층으로 묶습니다.
📁[CS/Network] OSI 7계층과 TCP/IP 4계층
💡TCP와 UDP
⬇️TCP, UDP의 특징
TCP(Transmission Control Protocol)
TCP는 연결형 서비스로 3 way handshake 과정을 통해 연결하고, 4 way handshake 과정을 통해 연결을 해제하기 때문에 높은 신뢰성을 보장합니다.
UDP(User Datagram Protocol)
UDP는 비연결형 서비스로 3 way, 4 way handshake와 같은 과정을 거치지 않기 때문에 신뢰성은 떨어지지만, 효율성을 중요시하는 프로토콜입니다.
일방적으로 데이터를 보내고 수신 여부를 확인하지 않고, 송신 확인 정도의 절차만 거치기 때문에 속도가 빠릅니다.
TCP는 신뢰성이 중요한 경우 쓰이고, UDP는 실시간성이 중요한 스트리밍에 자주 사용합니다.
💡3 way handshake, 4 way handshake?
3 way handshake는 연결 시에 서로 연결이 잘 되었는지 확인하는 방법이고,
4 way handshake는 연결을 해제하는 방법입니다.
3 way handshake 과정
- Client -> Server 연결 요청
- Server -> Client 연결 요청 확인
- Client -> Server 연결
Data 전송 시
- Client -> Server 패킷 전송
- Server -> Client 요청 확인 (데이터를 잘 받았다는 신호)
- 2번 응답이 없으면 Client는 Server로 패킷을 재전송 한다.
4 way handshake 과정
- Client -> Server 연결 종료 요청
- Server -> Client 요청 확인 (대기하세요)
- Server -> Client 종료 요청 (이제 종료해도 됩니다.)
- Client -> Server) 연결 종료 (종료했습니다.)
📁[CS/Network] TCP와 UDP 프로토콜
💡쿠키와 세션?
⬇️Answer
HTTP는 무상태성
HTTP가 무상태성이라는 특징을 갖고 있어서, 통신이 끝나면 상태(정보)를 유지하지 않습니다.
이를 보완하고자 사용하는 것이 쿠키와 세션입니다.
쿠키
클라이언트는 쿠키를 브라우저에 저장해 뒀다가 HTTP 요청 시 서버로 전달하여 데이터를 요청하는 데에 사용할 수 있습니다.
그러나 쿠키는 클라이언트에서 쉽게 조회, 변경할 수 있고, 그 값을 조작할 수 있다는 단점이 있습니다.
이 문제를 해결하고자 세션을 사용합니다.
세션
세션은 쿠키에 기반하여 만들어졌고,
쿠키와 같이 key - value로 만들어졌지만 value를 임의의 uuid로 지정하고,
이 uuid에 해당하는 데이터는 서버 측에서 관리합니다.
이 방식으로 쿠키의 보안 문제를 해결할 수 있습니다.
💡HTTP 1.1 - keep alive 기능? (미완)
⬇️Answer
💡HTTP와 HTTPS의 차이점 (미완)
⬇️Answer
'기타 > Tech Interview' 카테고리의 다른 글
백엔드 개발자 기술 면접 정리 - 운영체제(CS) (0) | 2024.03.19 |
---|---|
백엔드 개발자 면접 질문 모음 (답변 없음) (0) | 2024.03.19 |
백엔드 개발자 기술 면접 정리 - 기타 기술 스택 (0) | 2024.02.12 |
백엔드 개발자 기술 면접 정리 - Spring, JPA (1) | 2024.02.10 |
백엔드 개발자 기술 면접 정리 - Java, 객체 지향 (0) | 2024.02.09 |