쿠키와 세션
쿠키
- 클라이언트의 상태 정보를 클라이언트에 PC에 저장했다가 필요시 정보를 참조하거나 재사용 가능
- 저장 위치 : 클라이언트
- 만료 시점 : 쿠키 저장시 설정
세션
- 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 유지시키는 기술
- 저장 위치 : 웹 서버
- 만료 시점 : 브라우저 종료시 삭제 (기간 지정 가능)
속도 : 쿠키 > 세션 (쿠키는 파일을 읽고, 세션은 요청마다 서버에서 처리를 해야함)
보안 : 쿠키 < 세션 (쿠키는 탈취와 변조가 가능하시만, 세션은 ID값만 가지고 있으므로 상대적으로 안전)
REST API
REST
- REST는 HTTP 통신을 활용하기 위해 고안된 아키텍쳐이다.
- 클라이언트는 URI로 표현된 자원을 HTTP 메서드를 이용해 CRUD 연산을 할 수 있다.
- 자원을 명시에 연산을 수행하고 상태를 전달하는 것
특징
- 일관된 인터페이스 : 자원을 나타내는 URI를 HTTP 메서드로 조작하는 일관된 인터페이스를 사용한다.
- 따라서 HTTP를 따르는 모든 플랫폼에서 REST를 사용할 수 있다
- 클라이언트-서버 구조 : 클라이언트와 서버 간의 요청-응답의 독립적인 구조를 갖는다
- 무상태성 : 서버에서는 클라이언트의 요청을 저장하거나 관리하지 않는다
- 캐싱 가능 : HTTP 표준을 사용하므로 클라이언트는 이전에 서버로부터 받은 응답을 저장 및 재사용하는 캐싱을 할 수 있다
- 자체 표현 구조 : REST API는 자원, 행위, 표현으로 구성되어 REST API 메시지를 보고 어떤 요청을 하는지 알 수 있다
- 계층형 구조 : REST 서버는 다중 계층으로 구성될 수 있어서 보안, 암호화와 같은 계층을 추가해 서버에 대한 기능을 유연하게 확장할 수 있다.
URI(Uniform Resource Identifier) : 인터넷에 있는 자원을 나타내는 주소. URI는 인터넷에서 요구하는 기본 조건으로 인터넷 프로토콜에 항상 붙어 다닌다. URI의 하위 개념으로 URL, URN이 있다.
- URL(Uniform Resource Locator) : 인터넷에서 자원의 위치를 알 수 있는 규약이다. 웹 사이트 주소와 인터넷의 모든 자원을 나타낼 수 있다.
- URN(Uniform Resource Name) : 자원의 위치 정보가 아닌 실제 자원을 특정한다.
REST API
- REST를 기반으로한 인터페이스이다.
- REST 규칙을 지키며 API를 제공하는 서비스를 RESTful하다고 한다.
- 자원에 대한 행위는 HTTP 메서드로 나타내며, HTTP 메서드나 행위에 대한 표현이 URI에 들어가면 안 된다.
- HTTP 메서드는 명시적이어야 한다. 즉, 요청하려는 목적에 맞게 HTTP 메서드를 사용해야 한다.
- POST 메서드로 Create뿐 아니라 Update 같은 연산을 하면 명시적이라고 할 수 없다.
- URI 경로는 슬래시(/)로 계층 관계를 표현하며, URI 마지막에 슬래시가 들어가면 안 된다.
- URI 경로에는 언더바(_)를 사용하면 안 되고, 소문자 사용을 지향한다.
토큰
- 서버가 접속한 클라이언트에게 유일한 토큰을 부여
- 세션 인증은 서버가 세션정보를 가지고 있어야하고 이를 조회하는 과정이 필요하기 때문에 많은 오버헤드 발생
- 토크는 세션과 달리 서버가 아닌 클라이언트에 저장되기 대문에 서버의 부담을 덜 수 있다.
- 쿠키와 세션이 없는 앱에서 서버와 통신할 때 사용
인증방식
- 사용자가 아이디와 비밀번호로 로그인
- 서버측에서 사용자(클라이언트)에게 유일한 토큰을 발급한다
- 클라이언트는 서버 측에서 전달받은 토큰을 쿠키나 스토리지에 저장해두고 서버에 요청을 할 때마아다 해당 토큰을 HTTP 요청 헤더에 포함시켜 전달한다
- 서버는 전달받은 토큰을 검증하고 응답한다. 토큰에 요청한 사람의 정보가 담겨있어 서버는 DB를 조회하지 않고 누가 요청하는지 알 수 있다.
단점
- 토큰 자체의 데이터 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해진다
- Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다.
- 토큰을 탈취당하면 대처하기 어렵다 (사용 기한을 제한하는 식으로 극복)
프록시
- 프록시 서버는 클라이언트와 서버 사이에 존재하는 중개자이다.
- 클라이언트로 동작하기도 하고 서버로 동작하기도 한다.
- 데이터를 필터링 또는 변환하거나, 방화벽을 세우거나, 캐시 서버로 동작할 수 있다.
- 프록시 서버는 네트워크 상 어디에 위치하느냐, 혹은 어느 방향으로 데이터를 제공하느냐에 따라 포워드 프록시와 리버스 프록시로 나뉜다.
포워드 프록시
- 프록시 서버는 클라이언트 바로 뒤에 놓여 있다.
- 같은 내부망에 존재하는 클라이언트의 요청을 받아 인터넷을 통해 외부 서버에서 데이터를 가져와 클라이언트에게 응답
- 이점 : 클라이언트 보안, 캐싱, 암호화
리버스 프록시
- 리버스 프록시는 웹서버/WAS 앞에 놓여 있다.
- 클라이언트는 웹서비스에 접근할때 웹서버에 요청하는 것이 아닌, 프록시로 요청하게 되고, 프록시가 배후(reverse)의 서버로부터 데이터를 가져오는 방식
- 이점 : 로드 밸런싱, 서버 보안, 캐싱, 암호화
XXS : 웹 브라우저에 악성 스크립트를 삽입하여 사용자 정보를 탈취하는 공격방식
웹 브라우저에서 사용자 입력값과 출력값을 철저히 검증해서 XSS를 예방할 수 있음
SOP(Same-Origin-Policy) : 다른 출처의 리소스를 사용하는 것에 제한하는 보안 방식
CORS(Cross-Origin Resource Sharing) : 현재 접속한 도메인 말고 다른 도메인에 접근할 수 있도록 처리 해주는 웹 브라우저 표준 기술
SQL Injection : 악의적인 SQL 쿼리문을 삽입하여 데이터베이스를 비정상적으로 조작하는 공격 기법
주기적으로 모니터링하고 비상 알림을 걸어두어 확인 가능
참고
기술 면접 대비 CS전공 핵심요약집 | 이수진 https://product.kyobobook.co.kr/detail/S000208504237
'CS' 카테고리의 다른 글
[네트워크] OSI 7계층, TCP/IP, HTTP (0) | 2023.10.14 |
---|---|
[운영체제] 기본개념, 커널, 시스템 (0) | 2023.10.14 |
[운영체제] 메모리 관리, 가상메모리 (0) | 2023.10.14 |
[운영체제] 프로세스 동기화, 데드락 (0) | 2023.10.07 |
[네트워크] 네트워크 레이어, IP 프로토콜 (0) | 2023.10.07 |