본문 바로가기

카테고리 없음

[WIL] 항해 1주차 회고

1주차 회고록


2022년 3월 7일부터 16주간 진행되는 항해99 부트캠프에 등록 후 한주가 지나고  그에 대한 회고록을 작성한다.

회고록을 적기에는 짧은 기간이긴 하지만 그 안에서 또 새로운 것을 느낄 수 있었던 한 주였다.

이에 대해 짧지만 간단한 소감을 적으려 한다.

 

미니 프로젝트, 알고리즘 문제 풀이 (3월 7일 ~ 3월 13일)


간단한 미니 프로젝트를 3월 7일부터 3월 10일 까지 4일간 진행하였으며

3월 11일 부터 3월 12일 이틀간 알고리즘 문제 풀이를 진행하였다.

6일간 평균 14시간 가량 팀원들이랑 같이 프로젝트와 알고리즘 공부를 하는 시간을 가져보았다.

향해 99를 진행한지 6일 밖에 지나지 않았음에도 벌써 중도 포기를 하는 사람이 나타나고 있었다.

아무래도 팀원과 많은 격차가 나는 사람들은 멘탈이 버티지 못하는 것 같다.

이번 일주일은 나 자신이 개발을 얼마나 좋아하는지를 되돌아 볼  수 있는 시간이었다.

공부는 게더타운이라는 공간에서 모두 화상 카메라를 켜고 서로의 상태를 지켜보면서 공부를 진행하였다.

오프라인이 아닌 온라인에서 같이 공부를 함에도 서로의 열기가 느껴졌으며, 어느덧 서로가 서로에게 시너지를 주는 존재가 되어 있었다.

 

일 예로 3월 10일부터 3월 11일까지 우리 조원들은 각각 35 ~ 54문제 가량을 푸는 성과를 얻었다.

6일간 하루 14시간씩 사람들과 공부를 하면서 내가 얼마나 개발을 좋아하는지 알 수 있었다.

 

JWT 토큰


첫번째 미니 프로젝트를 진행하면서 내가 담당한 부분은 회원 가입과 로그인 부분이었다.

첫번째 미션에서 주어진 조건은 jwt 토큰을 이용하여 로그인 기능을 구현해보기였다.

그래서 이번 기회에 쿠키와 세션, 토큰에 대해서 공부해 보았다.

 

HTTP

기본적으로 HTTP 프로토콜 환경은 "connectionless, stateless"한 특성을 가지기 때문에 서버는 클라이언트가 누구인지 매번 확인해야한다. 이 특성을 보완하기 위해서는 쿠키나 세션 또는 JWT 토큰을 사용할 수 있습니다.

 

쿠키

쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일이다.

쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조하는 형태로 사용되는데, 쿠키에는 사용자의 정보를 직접 저장하기 때문에 탈취 되었을 경우 보안상에 문제가 생길 수 있다.

 

세션

이를 해결하기 위핸 방법으로 세션을 사용할 수 있다.

 

세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리한다.

서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.

그러나 세션은 쿠키와 달리 서버에서 정보를 관리하기 떄문에 사용자가 많아질수록 서버 메모리를 많이 차지하게 된다는 단점이 있다.

 

 

JWT 토큰

이러한 세션의 단점과 쿠키의 단점을 보완할 수 있는 방법이 JWT 토큰이다.

JWT 토큰은 3가지로 구성되어있다.

헤더, 페이로드, 서명 부분인데 서버에서는 서명에 들어가는 비밀 값만 들고 있으면 되기 때문에 리소스를 최소한으로 사용할 수 있는 장점이 있다.

 

1. 헤더: 알고리즘(3번 서명 값을 만드는데 사용될 알고리즘이 지정 ex) HS256), type이 들어감
2. 페이로드: 토큰이 갖는 데이터
3. 서명 (signature): 1번 헤더에 정의된 알고리즘을 통해 암호화한 비밀 값으로 서버만 알고 있음

 

하지만 세션도 만능은 아니다.

앞에서 말한 것과 같이 세션은 서버에서 정보를 저장하지 않고, 오직 JWT 토큰을 해독하기 위한 암호값만 가지고 있다.

그렇기 때문에 JWT 토큰 자체가 중간에 해킹 당하고, 해커가 그 JWT 토큰을 이용하여 접속을 한다면 서버는 해커가 접속한 것인지, 진짜 사용자가 접속한 것인지 알 수가 없는 것이다.

 

로그인에 대표적인 인증 방식으로 쿠키, 세션, JWT 토큰을 알아보았다.

각각의 장, 단점이 명확히 보이는가?

개발자는 우리의 서버 상황과, 어떤 웹 어플리케이션을 만들 것인지 생각한 다음 적절한 로그인 인증 방식을 사용하면 될 것 같다.