코드스테이츠 12주차 회고
보안/인증 주간이었습니다. 섹션 2에서 서버 코드 짜는 것을 특히 어려워했던 저는 이번주에도 페어활동이 아니었다면 과제 시작조차 못했을 것 같습니다.
이번주에 배운 내용은 크게 아래와 같습니다.
1. http/https
2. 쿠키/세션
3. 토큰
4. OAuth
블로깅 챌린지로 지난 유닛의 http의 개념을 간단하게 복습했었는데 이번 유닛에는 https서버를 직접 만들어보는 실습을 가졌습니다. 로컬환경에서 mkcert라는 프로그램을 이용해서 인증서를 생성하고 인증서를 통해 간단하게 HTTPS서버를 만들어 볼 수 있었습니다. HTTPS는 HTTP와는 달리 요청과 응답으로 오가는 내용을 암호화해서 더 안전합니다. 이 암호화 방식에는 2가지가 있습니다. 대칭키와 비대칭 키 암호화 방식이 있는데 후자의 방식이 비밀키가 없다면 복화 할 수 없으므로 전자의 방식보다 보안성이 더 좋습니다. 라이브 세션 때 자세한 암호화 원리를 들을 수 있었는데 듣기만 해도 복잡해서 안전하다는 생각을 했습니다 🤣
인터넷을 이용하면서 쿠키라는 단어를 쉽게 볼 수 있습니다. 데이터 정리를 할 때 쿠키를 삭제 한다~ 라는 말을 들어서 데이터를 가지고 있는 무엇인가 정도로만 알고 있었습니다. 쿠키는 무상태성을 가진 http에서 영속성 있는 데이터를 저장하는 방법입니다. 쿠키에 서버와 클라이언트를 오가며 데이터를 전달해 줍니다.
세션은 웹사이트에서 인증된 사용자를 추적하고 유지하는 방법 중 하나 입니다. 보통 세션은 서버 측에서 생성되며, 세션 ID라는 고유 식별자를 할당합니다. 세션 ID는 보통 쿠키를 사용해서 사용자의 브라우저에 저장되고, 사용자가 웹사이트를 방문할 때마다 서버에서 해당 세션 ID를 읽어와 사용자의 상태를 유지합니다.
토큰은 세션 인증 방식을 보완한 인증 방식입니다. 세션과는 달리 서버에서 유저의 인증상태를 관리하지 않기 때문에 서버의 부담이 적습니다. 토큰 기반 인증 구현을 위한 여러 가지 기술 중 대표적인 JWT에 대해서 공부를 했습니다. JWT는 JSON 객체에 정보를 담고 이를 토큰으로 암호화하여 전송할 수 있는 기술입니다.
토큰은 보완된 인증 방식이지만 토큰의 유효기간 , 크기에 의해 한계점이 드러납니다. 이를 극복하기 위해 다양한 방법들이 고안되었고 대표적으로 액세스 토큰과 리프레시 토큰을 알아보았습니다. 액세스 토큰은 말 그대로 서버에 접근하기 위한 토큰으로 보통 짧은 유효기간을 가지고 있고 이 액세스 토큰이 만료되었을 시 리프레시 토큰이 있다면 액세스 토큰을 재발급받을 수 있습니다. 그러므로 리프레시 토큰은 액세스 토큰보다 더 긴 유효기간을 가지고 있습니다.
OAuth는 한단어로 표현하자면 우리가 요즘 자주 볼 수 있는 간편 가입 서비스입니다. 구글이나 네이버, 카카오아이디만 있다면 웹사이트에 정보를 모두 기입할 필요 없이 필수정보만 제공하여 간편하게 가입할 수 있습니다. 유저입장에서도 서비스제공입장에서도 참 편리한 기능입니다. OAuth 인증방식은 사용자가 애플리케이션에 접속하면 인증 서버로 인증요청을 보내고 유효한 인증 요청인지 확인 후 액세스 토큰을 발급합니다. 애플리케이션은 액세스토큰을 가지고 리소스서버로 사용자의 정보를 요청합니다. 액세스토큰이 유효하다면 요청한 정보를 전달합니다. 여기서 유효성 검사를 한번 더 확인하는 단계가 추가가 되고 리프레시 토큰 인증 방식이 더해지면 더욱 안전하여 이러한 방식으로 널리 쓰이고 있습니다.
정해진 아이디와 비밀번호를 가지고 로그인을 구현하는 과제도 정말 신기했지만 OAuth 인증 방식 구현은 앞으로 프로젝트를 하면서도 유용할것 같아 페어분들과 함께 카카오 로그인 구현을 시도했지만 저는 가랑이가 찢어질뻔해서 도전에 의의를 두었습니다.. 어찌어찌 카카오 로그인 화면은 나왔으나 인증 후 화면을 제대로 구현하지 못해 아직 숙제로 남아있습니다. 같이 했던 동기분들은 주말 동안 완벽구현에 성공하셔서 잘 정리해 주신 블로그를 참고할 예정입니다.
프론트엔드를 공부하다 보니 보이지 않는 부분을 구현하는 백엔드 부분은 여전히 어렵게만 느껴집니다. 개념을 300번을 읽어도 그때만 이해가 되고 막상 코드를 짜려면 머리가 하얘지는 게 저는 영원히 백엔드와 친해질 수 없을 것 같습니다. 🥹 그래도 최소한 이번 유닛에서 진행했던 과제는 모두 소화시킬 수 있도록 복습을 놓치지 않아야겠습니다.
다음주에는 섹션 3가 마무리되고 회고의 시간과 기술면접이 시간이 있습니다. 면접은 피할 수 없는 존재지만 너무너무너무너무너무너무 떨리고 무섭습니다... 이 또한 저번처럼 지나가겠죠! 주간회고를 밀리지 않고 써서 기분이 좋습니다. 이번주는 대부분의 스터디가 방학을 맞이했고 그럭저럭 무난하게 흘러갔습니다. 다음 주부터는 본격적으로 모든 게 다시 시작되고 새로운 환경에서의 일주일이 될 텐데 부디 컨디션 조절을 잘했으면 좋겠습니다.