2022 Masters Course/Project Course

2022 마스터즈 코스(백엔드) 118일차 회고(2022. 6. 29.) - "지난 팀 프로젝트에서의 로그인 구현에 대한 회고"

ikjo 2022. 6. 29. 19:06

해당 글은 코드스쿼드 2022 마스터즈 코스 "Java 웹 백엔드" 과정을 수강하면서 학습한 내용 등에 대한 회고 글입니다. :)

 

수강 회고

오늘로 호눅스의 마스터 클래스 강의가 모두 종료되었다. 7주간의 웹 백엔드 과정부터 12주간의 팀 프로젝트 과정까지 자바, 스프링, DB, 인프라 등 백엔드와 관련하여 정말 많은 내용들에 대해 알아갈 수 있었다. 하지만 솔직하게 스스로를 되돌아 보면 현재 해당 내용들에 대해 제대로 숙지하고 있는 것이 얼마나 있을까 하는 마음이 있다. 😂

 

나름대로 그동안 미션 과제를 수행한다고 강의에서 다루고 있는 (단순 구현과는 다른) 기술들에 대해 깊이있는 학습을 하지 못했던 것이다. 마스터즈 코스를 수료하고나면 가장 하고싶은 것들 중 하나가 CS 공부이다. 과정 중에 나름대로 CS 공부를 한다고 책은 잔뜩 사놨지만 제대로 읽어 본 것이 전무한 실정이다. 🤣

 

 

학습 회고

그동안 프론트 엔드와 팀 프로젝트를 진행하면서 항상 아쉬웠던 것이 로그인 구현과 관련된 부분이었다. 첫 번째 팀프로젝트였던 투두리스트 웹 앱 구현 미션의 경우 선택 요구사항으로 JWT를 통한 로그인 구현 기능이 있었지만 막연한 JWT 기술에 대해 접근하기 어려웠다. 당시 AWS를 통한 배포 작업 역시 처음이었기에 다음 프로젝트에서 하기로 미루어 두었다.

 

두 번째 팀프로젝트였던 온라인 반찬 주문 미션의 경우 JWT는 아니었지만 세션을 통해 로그인 기능을 구현했었다. 사실 세션의 경우는 스프링에서 이미 JSessionId, 세션 저장소 등 세션과 관련한 기술들을 제공하고있었기에 백엔드 개발자 입장에서 특별히 추가적으로 신경써서 개발할 부분은 없었다. (물론, 여러대의 서버가 있어 세션 클러스터링 등을 하는 경우는 예외)

 

세션 아이디(JSessionId)의 경우 자동으로 서버와 클라이언트가 통신을 할 때 쿠키에 담겨 전송된다. 때문에, 클라이언트 입장에서도 이 세션 아이디만 활용한다면 사용자 정보에 대한 상태 유지를 하는데 용이했다. 클라이언트 단에서 별다른 라우터 등의 기능 없이 서버에서 특정 페이지(/ 경로 등)로 리다이렉트를 시켜도 이 세션 아이디는 쿠키에 저장되어 있어 상태 유지에 문제가 없었다.

 

세 번째 팀 프로젝트였던 숙소 예약 서비스 미션의 경우부터는 얘기가 좀 달랐다. 이때부터는 JWT를 통한 로그인 검증 기능이 필수 요구상으로서 이제 세션이 아닌 JWT에 대해 학습하고 이를 프로젝트에 적용시킬 필요가 있었다. 부리나케 JWT의 기초 개념부터 학습했고 토큰의 발행 원리 및 흐름부터 액세스 토큰과 리프레쉬 토큰의 역할 등 여러모로 신경써서 학습해야할 것들이 많았다.

 

여러 기술 블로그 자료들을 참고하면서 나름대로 액세스 및 리프레쉬 토큰을 통한 로그인 검증 기능을 구현해봤고 이에 대해 지난 리뷰어였던 단이 좋은 피드백을 많이 주신 덕에 개선해나갈 수 있었다. 하지만 JWT에 대해 학습하는데 너무 많은 시간이 소요되었고 시간상 프론트 엔드와 직접 연동하지 못했었던 점이 아쉬움으로 남았다.

 

마지막 팀 프로젝트인 이번 이슈 관리 서비스 미션의 경우는 앞서 구현했었던 JWT 로그인 검증 기능을 활용하여 구현 자체에는 많은 시간을 절약할 수 있었고 지난 리뷰어 단이 피드백 사항으로 주셨던 토큰을 객체 형태로 관리하는 방향으로 리팩토링을 진행하여 기존 코드를 개선시킬 수 있었다.

 

그리고 마침내 프론트 엔드와 직접적으로 연동해볼 수 있었는데, 그 과정에서 프론트 엔드에서 로컬 환경에서 API 서버에 있는 API를 호출할 때 발생하는 CORS와 관련하여 여러 이슈들을 만나볼 수 있었다. 예전부터 클라이언트 단에서 쿠키 값에 접근하지 못하는 이슈를 종종 목격했었는데 이는 SameSite와 관련된 이슈였고 충분히 학습해볼만한 내용들이었다.

 

액세스 토큰의 경우 세션과 달리 서버와 클라이언트간 헤더에 값을 실어 주고받았는데, 클라이언트 입장에서는 (새로고침 등의 상황에서) 사용자 상태 유지를 위해 별도의 로직을 통해 토큰 값을 관리할 필요가 있었다. 이를 위해 클라이언트에서 많이 애써주셨다.

 

또한 서버에서의 별다른 리다이렉트 없이 클라이언트에서 라우터라는 기술을 활용하여 화면 전환이 가능하게끔 했다. 다만, 서버 단에서는 이를 위해 웹 서버인 Nginx에서 별도의 path 설정이 필요했다. 처음에는 return, rewrite을 사용했다가 같은 프론트 엔드 팀원께서 try_files라는 키워드를 제시해주신 덕에 문제를 해결할 수 있었다. 이를 해결하는 과정에서 그동안 내가 알고있었던 Nginx 사용법은 정말 새발의 피라는 사실을 깨달을 수 있었다. Nginx 자체만 해도 굉장히 깊이가 있는 분야였다.

 

아무쪼록 오늘 학습 회고는 지난 12주간의 팀 프로젝트 동안 "로그인 기능 구현"과 관련하여 느꼈던 점들에 대해 작성하다 보니 다소 길어진 감이 있다. 팀 프로젝트를 하면서 스프링, DB, 인프라 등등 깊이있게 학습해야할 부분들이 정말 많았지만 나의 경우 로그인 인증과 관련해서 좀 더 관심을 갖고 시간을 많이 할애했었던 것 같다.

 

 

좋았던 점

  • 처음으로 세션이 아닌 JWT를 통해 로그인 검증 기능을 적용한 웹 앱을 클라이언트와 연동해볼 수 있어 뿌듯했습니다 👍

 

아쉬웠던 점

  • 팀 프로젝트들을 하면서 스프링, DB, 인프라 등등 깊이있게 학습해야할 부분들이 정말 많다는 걸 느꼈습니다. 짧은 시간이었기에 각각의 팀 프로젝트를 수행하면서 두루두루 학습하지 못했었던 점이 아쉬웠습니다. 💦 하지만 마스터즈 코스 이후에라도 각각의 분야에 대해 깊이 있는 학습 필요성을 많이 느끼고 있습니다.

 

이전 보다 개선되었던 점

  • 온라인 주문 서비스 미션 과제를 통해 깃허브 OAuth 및 세션을 통한 로그인 기능 구현을, 숙소 예약 서비스 미션 과제를 통해 깃허브 OAuth 및 JWT를 통한 로그인 기능에 대한 기초 및 동작 원리 학습을, 마지막으로 이번 이슈 관리 서비스 미션 과제를 통해 깃허브 OAuth 및 JWT를 통한 로그인 기능을 연동까지 하여 구현할 수 있게 되어 유익했습니다 🎉