본문 바로가기

[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] OAuth 2.0을 알아보자 들어가며 지금까지 인증 방식을 구현하면서 주로 JWT를 사용했습니다. 그래서 소셜 로그인을 구현해야 할 때도 원리를 제대로 이해하지 못하고 외부 블로그에 있는 코드를 복사 붙여 넣기 하는 식으로 코드를 작성했습니다. 이 기회를 통해 소셜 로그인과 OAuth에 대해 제대로 이해해야겠다고 생각했습니다. 이 글은 OAuth에 대해 제대로 이해하기 위해 작성된 글입니다. Oauth 2.0? 사용자가 우리 서비스에서 게시글을 남길 때, 페이스북에 동시에 게시글을 남기고 싶다고 가정해보겠습니다. 그럼 우리 서비스는 사용자로부터 사용자가 사용하고 있는 페이스북에 접근할 수 있도록 허가를 받아야 합니다. 가장 쉬운 방법은 사용자의 페이스북 아이디와 비밀번호를 알면 됩니다. 사용자로부터 아이디와 비밀번호를 전달받아서 저..
[Web] passport에 대해 알아보자 들어가며 인증에 대한 기능을 구축하면 passport를 들어보게 됩니다. 이때 passport는 무엇이며, 왜 passport를 사용해야 하는지 궁금했습니다. passport를 사용하지 않아도 인증에 대한 부분을 구축할 수 있는데 왜 passport를 사용해야 하는지 알아보고자 이 글을 작성합니다. Passport.js Passport.js는 express 프레임워크 상에서 사용되는 인증 미들웨어입니다. 여권은 입/출국 시 여권 소지자가 입/출국 자격에 대해 인증하는 역할을 하는데, 이를 서버에서 활용한다면 클라이언트가 서버에 요청할 자격이 있는지 인증할 때 Passport를 사용합니다. Passport는 구글, 페이스북과 같은 소셜 로그인을 할 수 있도록 도와주고, 로컬 인증 방법도 제공해주며, 총 ..
[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이란 말 그..