쿠키나 세션, 토큰이 필요한 이유
HTTP는 기본적으로 상태가 없는(stateless) 프로토콜이기 때문에, 이전 요청과 관련된 정보가 새로운 요청에 자동으로 전달되지 않기에, HTTP 상태를 유지하기 위해 클라이언트와 서버가 상호작용시 이전 정보를 기억할 수 있게 해주는 방법으로 사용한다.
쿠키(Cookie)는 웹사이트에서 사용자의 정보를 추적하고 관리하기 위해 사용되는 기술 중 하나로, 웹사이트가 사용자의 컴퓨터에 저장하는 작은 텍스트 파일이다.
쿠키를 통한 HTTP 상태유지 작동 방식
장점
1. 사용자 경험 개선: 사용자의 환경 설정, 로그인 상태 등과 같은 정보를 기억하여 웹 사이트 방문 시 사용자에게 맞춤화된 경험을 제공할 수 있다.
2. 서버 부하 감소: 클라이언트 측에 데이터를 저장함으로써 서버의 저장 공간과 처리 부하를 줄일 수 있다.
단점
1. 보안 문제: 쿠키는 클라이언트 측에 저장되기 때문에 악의적인 사용자가 쿠키를 탈취하거나 변조할 가능성이 있기에, 중요한 정보는 쿠키에 저장하지 않는 것이 좋다.
2. 용량 제한: 쿠키는 용량이 제한되어 있어(약 4KB) 많은 정보를 저장할 수 없다.
3. 브라우저 호환성: 일부 브라우저에서는 쿠키를 지원하지 않거나 사용자가 쿠키를 비활성화할 수 있다. 이 경우 쿠키를 사용한 상태 유지 기능이 작동하지
않기에 이러한 상황에 대비해야 한다.
4. 개인 정보 침해 우려: 쿠키는 사용자의 행동을 추적하고 개인화된 경험을 제공하기 위해 사용되기 때문에, 사용자의 개인 정보 보호에 대한 우려가 있다. 이러한 이유로 일부 사용자들은 쿠키를 비활성화하거나 정기적으로 삭제할 수 있다.
세션(Session)은 사이트에서 사용자의 정보를 추적하고 관리하기 위해 사용되는 기술 중 하나로, 서버와 클라이언트 사이의 일시적인 상호작용을 의미한다.
세션을 통한 HTTP 상태유지 작동 방식
장점
1. 보안: 중요한 정보가 서버 측에서 관리되기 때문에 클라이언트에서 정보가 탈취되거나 변조될 가능성이 줄어든다.
2. 저장 용량: 세션은 서버에서 관리되므로 쿠키보다 더 많은 정보를 저장할 수 있다.
3. 사용자 개인화: 사용자의 환경 설정, 로그인 상태 등과 같은 정보를 저장하여 웹 사이트 방문 시 사용자에게 맞춤화된 경험을 제공할 수 있다.
단점
1. 서버 부하 증가: 세션 정보가 서버에 저장되기 때문에 서버의 저장 공간과 처리 부하가 증가할 수 있다. 이를 해결하기 위해 세션 정보를 분산 저장하거나, 서버의 자원을 적절히 관리해야 한다.
2. 세션 타임아웃: 세션은 일정 시간동안 유효하며, 이 시간이 지나면 세션 정보가 삭제된다. 따라서 사용자가 웹사이트를 오랫동안 방문하지 않을 경우, 저장된 정보가 소멸되어 사용자가 다시 로그인해야 하는 등의 불편함이 발생할 수 있다.
3. 확장성 문제: 웹 사이트의 규모가 커질수록 세션 관리에 필요한 자원과 처리 과정이 복잡해질 수 있습니다. 이를 해결하기 위해 로드 밸런서, 세션 클러스터링 등의 기술을 사용할 수 있다.
토큰은 클라이언트와 서버 간에 인증, 권한 부여, 정보 전달 등의 목적으로 사용되는 문자열로, 웹 서비스에서 상태 유지를 위한 중요한 기술이다. 토큰은 일반적으로 암호화되어 안전하게 전송되며, 서버는 토큰을 통해 사용자를 식별하고 인증한다.
토큰을 통한 HTTP 상태유지 작동 방식
장점
1. 상태를 저장하지 않는 서버: 토큰은 클라이언트 측에서 관리되기 때문에, 서버는 상태를 저장할 필요가 없어서, 서버의 부하를 줄이고, 확장성을 높여준다.
2. 보안성: 토큰은 암호화되어 전송되기 때문에, 사용자 인증 정보를 안전하게 보호할 수 있다.
단점
1. 토큰 크기: 토큰은 인증 정보와 메타데이터를 포함하므로, 쿠키에 비해 상대적으로 크기가 클 수 있어, 네트워크 부하가 증가할 수 있다.
2. 저장 및 관리: 클라이언트는 토큰을 저장하고 관리해야 하며, 이에 따른 보안 문제가 발생할 수 있다. 예를 들어, 토큰이 노출되거나 탈취당할 경우, 사용자의 인증 정보가 위험에 노출될 수 있다.
CORS(Cross-Origin Resource Sharing, 교차 출처 리소스 공유)는 웹 페이지가 다른 도메인의 리소스에 액세스할 수 있도록 하는 웹 보안 메커니즘이다.
Same-Origin Policy(동일 출처 정책)는 웹 보안의 핵심 원칙 중 하나로, 웹 페이지가 다른 출처의 리소스에 액세스하는 것을 제한한다. 출처는 URL의 스키마(http, https 등), 호스트(도메인) 및 포트 번호의 조합으로 구성된다. 동일 출처 정책은 사용자의 정보를 보호하고 악의적인 사이트로부터의 공격을 방지하기 위해 사용된다.
기본적으로 웹 브라우저의 보안 정책인 SOP로 인해, 웹 페이지는 동일한 출처에서만 리소스를 로드할 수 있지만, CORS를 사용하여 서버는 다른 출처의 요청에 대한 액세스를 허용할 수 있다.
CORS에 대한 프론트엔드의 관점
CORS에 대한 백엔드의 관점
CORS를 사용하면 다른 출처의 리소스에 액세스할 수 있지만, 안전하게 정보를 공유하려면 백엔드 서버에서 적절한 CORS 정책을 설정해야 한다. 서버에서 너무 많은 출처를 허용하면 보안에 취약해질 수 있으므로, 필요한 출처만 허용하는 것이 좋다.
REST(Representational State Transfer)는 분산 시스템을 설계하는 아키텍처 스타일로, 웹 서비스와 API의 디자인에 널리 사용된다.
REST는 웹 서비스가 확장성, 성능, 간편함, 수정 용이성, 신뢰성 등의 특징을 가지도록 설계하는 데 도움을 줍니다.
REST 아키텍처의 6가지 원칙
RESTful이란, REST 원칙을 따르는 시스템을 의미한다. REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTful하다 말할 수 있다.
REST 원칙에 따라 설계된 API(Application Programming Interface)이다. 클라이언트와 서버 간의 통신을 가능하게 하는 인터페이스로, 클라이언트가 서버의 자원에 액세스하고 조작할 수 있다.
URI는 정보의 자원을 표현해야하며, 자원에 대한 행위는 HTTP Method (GET, PUT, POST, DELETE등등)로 표현
특징
REST 원칙에 따라 설계된 API는 확장성, 성능, 간편함 등의 이점을 제공하여, 다양한 플랫폼과 기기에서 효율적으로 사용할 수 있으며, 이를 통해 웹 서비스와 애플리케이션의 개발 및 유지 보수가 용이해진다.
XSS(Cross-Site Scripting)는 웹 사이트의 보안 취약점 중 하나로, 공격자가 웹 사이트에 악성 스크립트를 삽입하여 다른 사용자의 정보를 탈취하거나 조작하는 공격이다. XSS 공격은 주로 웹 사이트가 사용자로부터 입력 받은 데이터를 충분히 검증하지 않고 사용할 때 발생한다.
XSS의 공격방식
XSS에 대한 대응방식
SQL Injection은 웹 애플리케이션의 보안 취약점 중 하나로, 공격자가 악의적인 SQL 쿼리를 주입하여 데이터베이스를 조작하거나 민감한 정보를 탈취하는 공격이다.
SQL 인젝션은 주로 웹 애플리케이션에서 사용자로부터 입력받은 데이터를 처리할 때, 충분한 검증 없이 SQL 쿼리에 사용되는 경우 발생한다.
SQL 인젝션의 대표적인 공격 방식
SQL 인젝션 공격에 대한 대응 방식
URI (Uniform Resource Identifier): 인터넷에서 자원을 식별하는 고유한 문자열이다.
URL (Uniform Resource Locator): 인터넷에서 자원의 위치를 나타내는 문자열이다. URL은 프로토콜(예: HTTP, FTP), 도메인, 경로, 쿼리 문자열 등을 통해 자원의 위치를 표현한다. 예를 들어, "https://www.example.com/index.html"과 같은 형태를 가진다.
URN (Uniform Resource Name): 인터넷에서 자원의 고유한 이름을 나타내는 문자열이다. URN은 자원의 실제 위치와 관계없이 고유한 이름을 부여하며, 자원의 이름만으로 식별이 가능하다. 예를 들어, "urn:isbn:0451450523"과 같은 형태를 가집니다.
웹 캐시는 웹 페이지나 파일 등의 자원을 일시적으로 저장해두는 저장소를 의미한다. 웹 캐시를 사용하면 이전에 요청했던 자원을 빠르게 다시 불러올 수 있다. 웹 캐시는 주로 웹 브라우저, 프록시 서버, CDN(Content Delivery Network) 등에서 사용된다.
웹 캐시를 사용했을 때의 이점
네트워크 부하 감소: 캐싱된 자원은 원본 서버에서 다시 요청할 필요가 없기 때문에, 네트워크 트래픽과 서버 부하를 줄일 수 있다.
빠른 로딩 속도: 캐싱된 자원은 로컬 저장소나 가까운 프록시 서버에서 불러올 수 있으므로, 원격 서버에서 자원을 가져오는 것보다 훨씬 빠르게 로딩된다. 이로 인해 사용자 경험이 향상되며, 웹 사이트의 성능이 개선된다.
대역폭 절약: 캐싱된 자원은 원본 서버와의 통신을 최소화하기 때문에, 대역폭 사용량을 줄일 수 있다. 이는 특히 데이터 전송 비용이 중요한 모바일 환경에서 큰 이점이 된다.
내구성과 가용성 향상: 원본 서버에 문제가 발생하거나 접속이 불가능한 경우에도, 캐싱된 자원을 통해 웹 사이트의 일부 기능이나 콘텐츠를 계속 사용할 수 있다.
웹 캐시를 사용하면 네트워크 부하를 줄이고, 로딩 속도를 높이며, 대역폭을 절약하고, 서비스의 내구성과 가용성을 향상시킬 수 있지만, 웹 캐시를 사용할 때 주의해야 할 점도 있다.
예를 들어, 캐시된 자원이 최신 정보를 반영하지 못하는 경우가 있을 수 있으므로, 캐시 정책을 적절하게 설정하고 관리해야 한다.
웹 프록시란 클라이언트와 서버 간의 통신을 중계하는 중간 서버다. 클라이언트가 서버에 요청을 보내면, 웹 프록시가 그 요청을 받아 서버로 전달하고, 서버로부터 받은 응답을 클라이언트에게 전달한다. 웹 프록시는 보안, 성능 최적화, 로드 밸런싱 등 다양한 목적으로 사용된다.
웹 프록시의 사용 예시:
웹 프록시는 주로 포워드 프록시와 리버스 프록시로 구분된다.
포워드 프록시는 클라이언트 측에서 사용되며, 클라이언트의 요청을 원격 서버로 전달하여, 캐싱, 필터링, 익명성 보장 등의 기능을 제공한다. 예를 들어, 기업이나 학교 네트워크에서 특정 웹 사이트에 대한 접근을 제한하거나, 개인정보를 보호하기 위해 포워드 프록시를 사용할 수 있다.
리버스 프록시는 서버 측에서 사용되며, 외부 클라이언트의 요청을 내부 서버로 전달하여 로드 밸런싱, SSL 암호화, 캐싱 등의 기능을 제공한다. 예를 들어, 웹 서비스에서 리버스 프록시를 사용하여 여러 서버에 분산된 요청을 처리하거나, 안전한 암호화 통신을 위해 SSL 인증서를 관리할 수 있다.