오전 수업은 X-ray 서비스맵을 직접 살펴보고 프로젝트를 빌드하여 Docker 이미지화하는 과정이었다.
디버깅으로 사용되고 서버리스 환경에서도 유용한 X-ray는 이름답게 비쌌다...
나도 모르게 EBS가 t3.large로 생성되던데 X-ray를 쓰려면 그렇게 하는 건지 아니면 후에 바꿔도 무리가 없는지는 모르겠다... 하여튼 로컬에서는 쓰지 않는 것으로...^^
그렇지만 시각적으로 알기 쉬워서 복잡해진다면 더더욱 편리할 것으로 생각된다.
Docker는 데스크탑에 깔 수가 없는 상황이라 노트북 세팅 때문에 조금 시간을 더 달라고 말씀드리려 했는데...
튜터님께서 오늘까지만 계신다고 하셔서 마지막 인사를 드렸다.
이전에 내주셨던 퀴즈들을 풀어보면서 삽질도 많이 했지만 배운 것도 많았기에 정말 감사했다!!!
오후 수업은 도커, 쿠버네티스 등장 배경과 보안에 대해 배웠다.
조금 내용이 많았는데 후루룩 지나가서 주말에 정리를 좀 해볼 생각이다.
그리고 튜터님께서 계속 강조하시는 부분이 보안에 대한 부분이었는데 오늘 진행된 타임어택 테스트도 JWT 토큰으로 로그인 구현하는 내용이었다. 이 부분은 추후 설명...
CSRF와 XSS 관련 내용은 지난 프로젝트 때 팀원분이 구현하면서 간단하게 설명해주신 부분이라 반가웠다.
CSRF
CSRF의 경우 토큰으로 요청을 제어하면 방어가 가능한 부분이고, 크롬 쿠키 정책이 변경되면서 기본 쿠키가 same-site none에서 lax로 변경되면서 서버와 클라이언트에서 쿠키를 사용하려면 1차 도메인이 같아야 한다고 한다.
XSS
CSRF를 방어하기 위해 토큰을 쿠키에 저장하고 HTTP Only 옵션을 주지 않을 경우 토큰은 탈취를 당할 수 있다.
이를 secure option(https)과 cors등으로 방어하면, proxy로 탈취할 수 있으므로 body 자체를 암호화해야 한다.
또한 proxy로 해킹하는 것을 막기위해 디바이스 등록을 요하기도 한다. 등록시 저장된 MAC address는 변경시킬 수 없으므로 이와 다를 경우 알림 혹은 토큰 무효화를 한다.
더하여 refresh token으로 access token과 구분지어 지속적인 확인을 한다.
이외에도 access Token을 http only로 설정하여 xss 공격을 막고 csrf를 방어하는 방법, 즉 매우 짧은 세션을 사용한다고는 하는데 확실한 정보는 없다고 하셨다.
백엔드 개발자는 보이지 않는 곳에서 작업을 하지만 로그인의 경우 사용자와 맞닿아있는 최전선이다. 튜터님께서는 이 부분이 정말 중요하고 가장 중요하다고 생각한다고 하셨다.
그리하여 JWT 로그인 구현 문제가 나오게 되는데...
3시간 정도 준비 시간이 주어졌다. 이리저리 살펴보니 jjwt라이브러리를 많이 쓰는 듯했다.
문제대로 구현하려다 도저히 응용이 어려워서 그냥 찾아본대로라도 해보자...하고 시작했다ㅎㅋ...
나는 스프링 시큐리티 클래스들을 상속받아 override하고 java-jwt 라이브러리를 쓰는 방식으로 구현했다.
사실 구현했다고 하기에는 어폐가 있지만서도ㅎㅎ... 처음에는 role 빼고 password 빼고 진행하려다가 오히려 빼는 게 응용이라 더 어려운거다ㅠㅠㅠ... 아무튼 있는 거 고대로 따라 치기만 하는 것도 어려운 상황이었다.
jjwt라이브러리를 사용하고 로그인 구현하는 방식에도 아주 다양한 방법들이 있었는데,
일단 내가 선택한 방법이 좀 더 쉽게 구현한 것 같아서 이것부터 제대로 이해하고 튜터님 코드를 이해해볼 생각이다.
SAVE 💾
드디어 주말!!! 이번 주말에는 덜 놀고 정말 알차게 보내보자... 제발...!!!