본문 바로가기

[Web] Proxy를 알아보자 들어가며 웹 서버와 WAS에 관하여 공부하면서, 웹 서버를 프록시 서버로 활용할 수 있다는 것을 알았습니다. 이때 프록시는 무엇이고, 프록시를 왜 사용해야 하는지 모르고 있다고 생각했습니다. 이 기회에 네트워크 상에서 프록시에 대해 정리하여, 개발자로서의 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. Proxy 프록시의 사전적 의미는 '대신', '대리'입니다. 그럼 네트워크 프록시에서, 프록시 서버는 무엇인가 대신 혹은 대리로 처리하는 서버라고 생각할 수 있습니다. 즉 PC끼리 네트워크 통신을 할 때, PC끼리 직접 통신하지 않고, 중간에서 대리로 통신하는 것을 '프록시'라고 합니다. 프록시 서버는 보안 목적이나 캐싱 등의 기능을 제공합니다. 프록시의 종류는..
[Web] Web Server와 WAS 들어가며 누군가 제게 웹 서버와 WAS의 차이점에 대해 물었습니다. 이때 명확하게 차이점에 대해 설명하지 못했습니다. 웹 서버와 WAS를 내가 제대로 모르고 있다고 생각했습니다. 이 기회에 웹서버와 WAS를 정리하여, 개발자로서의 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. 이 글은 [Web] Web Server와 WAS의 차이와 웹 서비스 구조 글을 참고했습니다. 웹서버와 WAS 웹서버와 WAS에 대해 살펴보겠습니다. Web Server 먼저 웹 서버는 하드웨어와 소프트웨어로 구분됩니다. Web 서버가 설치되어 있는 컴퓨터를 Web Server의 하드웨어 개념이며, 웹 브라우저 클라이언트로부터 HTTP 요청을 받아 정적인 콘텐츠(html, jpeg, cs..
[Web] 토큰을 사용할 때 Bearer는 무엇인가? 들어가며 JWT를 인증 방법으로 활용하면서, 헤더 값으로 bearer + token 값을 받아서 사용했습니다. 이때 bearer가 무엇인지, 제대로 모르고 사용했습니다. 이번 기회에 토큰 값에 붙어있는 bearer가 무엇인지 알아야겠다고 생각했습니다. 토큰 기반 인증에서 bearer는 무엇인지에 대해 정리하겠습니다. 이 글은 토큰 기반 인증 Bearer Authentication 글과 토큰 기반 인증에서 bearer는 무엇일까? 글을 참고했습니다. 토큰은 어떻게 보내지는가? 일반적으로 토큰은 아래처럼 요청 헤더의 Authorization 필드에 담아져 보내집니다. Authorization: 여기서 bearer는 위 형식에서 type에 해당합니다. 토큰에는 많은 종류가 있고, 서버는 다양한 종류의 토큰을 ..
[Web] 안전하게 로그인 처리하기 들어가며 항상 프로젝트를 진행하면서, 회원가입 기능을 만들 때, JWT를 무지성으로 활용했습니다. 왜 JWT를 사용해야 하는지, JWT를 사용하면 어떤 문제가 있는지, 왜 세션은 고려하지 않았던 것인지 단 한 번도 제대로 생각해본 적 없다는 생각이 들었습니다. 기본적인 부분도 모르는 개발자라는 생각이 들었습니다. 이번 기회에 JWT는 어디에 저장해야 하며, JWT를 잘 활용하는 방법은 무엇인지에 대해 정리해보려 합니다. 세션과 토큰 탈취 웹 서비스에서 인증 인가를 구현하기 위해 쿠키/세션 또는 JWT를 활용합니다. 세션과 JWT는 다양한 공격 방식으로 인해 노출이 될 수 있는데, 이에 대해 크게 두 가지 공격 방식을 알아보겠습니다. XSS(Cross Site Scripting) 여기서 XSS(Cross ..
[Web] JWT 토큰을 알아보자 들어가며 항상 프로젝트를 진행하면서, 회원가입 기능을 만들 때, JWT를 무지성으로 활용했습니다. 왜 JWT를 사용해야 하는지, JWT를 사용하면 어떤 문제가 있는지, 왜 세션은 고려하지 않았던 것인지 단 한 번도 제대로 생각해본 적 없다는 생각이 들었습니다. 기본적인 부분도 모르는 개발자라는 생각이 들었습니다. 이번 기회에 JWT는 무엇이고, 왜 JWT를 사용하는지, JWT는 안전한지, 더 나은 회원가입 방법은 무엇인지 정리해보려 합니다. 쿠키 & 세션의 장단점 JWT를 살펴보기 전, 왜 JWT를 사용하는 것인지 알아보겠습니다. JWT가 아닌, 쿠키, 세션을 활용한 인증 인가 방식을 구현한다면 구현이 상당히 명확하며, 서버에서 유저 상태 확인이 편리합니다. 또한 상대적으로 안전하며, 서버 측에서 관리하..
[Web] 다중 서버에서 세션을 관리해보자 - 4 (feat Redis, Memcached) 들어가며 세션에 대해 조금씩 이해를 하고 있지만, 세션을 어떻게 활용해야 잘 활용할 수 있는 것인지에 대해 정리해보고 싶었습니다. 세션을 쓸 때 어떤 것들을 고려해야 하는지에 대해 더 늦기 전에, 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. In-memory DB 중 어떤 DB를 저장소로 사용해야 할까? 지난 시간 세션 저장소로 In-Memory Database를 사용하기로 하였습니다. 하지만, In-Memory Database에는 다양한 데이터베이스들이 존재합니다. 그렇다면 세션 객체를 저장하기 위해서 어떤 데이터베이스를 활용하면 좋을까요? 그전에 먼저 세션 객체가 어떤 형태로 구성되어 있는지부터 알아보겠습니다. 세션 객체는 어떤 형태로 구성되어 있을까?..
[Web] 다중 서버에서 세션을 관리해보자 - 3 (feat 세션 스토리지 선택) 들어가며 세션에 대해 조금씩 이해를 하고 있지만, 세션을 어떻게 활용해야 잘 활용할 수 있는 것인지에 대해 정리해보고 싶었습니다. 세션을 쓸 때 어떤 것들을 고려해야 하는지에 대해 더 늦기 전에, 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. 세션 스토리지 설정 2편에서는 다중 서버 환경에서 세션 데이터 불일치 문제를 어떻게 해결할 수 있는지에 대해 알아봤습니다. 여기서 별도의 세션 스토리지를 구성해서 세션 데이터 불일치 문제를 해결하는 방법까지 알아봤는데, 여기서 생각해볼 문제가 있습니다. 웹 서비스의 특성상 대부분의 요청은 인가된 사용자가 보내는 요청인지 확인하는 절차가 선행되어야 합니다. 이때 요청마다 사용자가 인가된 사용자인지 확인하기 위해 매번 세션..
[Web] 다중 서버에서 세션을 관리해보자 - 2 (feat 세션 불일치) 들어가며 세션에 대해 조금씩 이해를 하고 있지만, 세션을 어떻게 활용해야 잘 활용할 수 있는 것인지에 대해 정리해보고 싶었습니다. 세션을 쓸 때 어떤 것들을 고려해야 하는지에 대해 더 늦기 전에, 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. 세션 불일치란? 저번 자료에서 스케일 아웃을 할 때, 여러 대의 서버가 각각 세션 저장소를 독립적으로 갖기 때문에 데이터 불일치 문제가 발생한다는 것을 확인했습니다. 이번 시간에는 스케일 아웃을 했을 때 세션의 데이터 불일치 문제를 어떻게 해결하는지 알아보겠습니다. 먼저 Sticky Session을 활용해서 세션을 유지하는 방법에 대해 알아보겠습니다. Sticky Session 방식 Sticky Session이란 말 그..
[Web] 다중 서버에서 세션을 관리해보자 - 1 (feat Scale-up, Scale-out) 들어가며 세션에 대해 조금씩 이해를 하고 있지만, 세션을 어떻게 활용해야 잘 활용할 수 있는 것인지에 대해 정리해보고 싶었습니다. 세션을 쓸 때 어떤 것들을 고려해야 하는지에 대해 더 늦기 전에, 기초를 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. 서버를 확장하는 방법? 다중 서버에서 세션을 관리하는 방법에 대해 알아보기 전에, 다중 서버에 대해 먼저 알아보겠습니다. 먼저 서비스를 만든다고 가정해봅시다. 처음에는 10명이 사용하는 서비스였지만, 엄청난 인기 덕에 100000명이 사용하는 애플리케이션을 운영하려고 할 때 서버를 어떻게 구축할 수 있을까요? 만약 서버의 크기가 한정적이라면 서버의 크기를 조절해야 할 텐데, 서버의 크기를 조절하는 방법에는 어떤 것들이 ..
[Web] 세션을 알아보자 들어가며 세션, 참 많이 들어본 단어입니다. 하지만 세션이 무엇이고, 어떻게 활용할 수 있는지 전혀 알지 못했습니다. 지금이라도 세션이 무엇이며, 세션을 어떻게 활용할 수 있는지 알아야겠다고 생각했습니다. 더 늦기 전에, 웹의 기초에 대해 쌓고 싶어서 개념을 정리해보고자 합니다. 무지를 반성하는 마음으로 이 글을 적습니다. 세션(Session) 세션이란 일정 시간 동안 같은 사용자(정확하게 브라우저를 말한다)로 부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술입니다. 여기서 일정 시간이란 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료함으로써 연결을 끝내는 시점을 말합니다. HTTP에서 Session은 다음과 같이 동작합니다. 1) 클라이언..