본문으로 건너뛰기
Jun's Portfolio
프로젝트
졸업작품·

살롱 | SSALON

한 번 모이고 끝나는 모임을 3D 증표로 남겨 두는 서비스

프론트엔드만 하던 사람이 백엔드를 맡아 JWT와 Redis Refresh Token으로 인증을 설계했습니다

ticket
overview

이렇게 만들었습니다

아주대학교 소프트웨어학과 졸업 작품입니다. 일회성 모임을 위한 어플리케이션으로, 자신이 참여한 모임을 기념하는 "증표"를 만들어 간직하거나 직접 꾸며 친구들과 공유합니다.

백엔드를 맡은 이유

저는 프론트엔드 개발자를 목표로 삼고 있었지만, 웹 개발자로서 시야를 넓히려고 이 프로젝트에서는 백엔드 개발을 맡았습니다.
백엔드는 Spring을 썼습니다. 다른 백엔드 팀원들에게 가장 익숙한 스택이었고, Spring을 처음 접하는 저로서는 공부할 자료가 가장 많은 스택 중 하나라고 생각했으며, 복잡한 초기 설정을 자동화해 주는 Spring Boot가 있었기 때문입니다.
사용자가 쉽게 들어오려면 카카오 같은 소셜 로그인이 필수라고 판단해 기능을 추가했는데, 권한 부여(Authorization)의 업계 표준 프로토콜이 OAuth 2.0으로 자리 잡고 있어 OAuth 2.0으로 구현하였습니다.
클라이언트가 백엔드 API를 부를 때의 인증에는, 서버에 세션 저장소를 따로 둘 필요가 없는 JWT 방식을 도입하였습니다. JWT의 보안 허점을 조금이라도 메우려고 AWS의 인메모리 캐싱 서비스인 ElastiCache(Redis)에 JWT 만료를 대비한 Refresh Token을 따로 저장했습니다.

클라우드 환경을 직접 운영하며

Spring에 익숙하지 않은 채로 프로젝트를 진행하는 건 도전이었지만, GitHub Actions로 CI/CD를 구축하고 AWS의 EC2 인스턴스, RDS, ElastiCache 같은 클라우드 환경을 직접 운영해 본 시간이었습니다.

테스트 코드를 포기했던 일

GitHub Actions를 구축하면서, Mock 라이브러리로 쓴 테스트 코드로 배포 전 안정성을 높이는 CI를 초반에 계속 시도했습니다. 그런데 테스트 코드 작성에 시간이 꽤 들어 진척이 더뎠고 교수님의 압박이 있었습니다. 결국 아쉽지만 테스트 코드는 쓰지 않는 쪽으로 진행했고, 그 부분이 지금도 아쉽습니다.

API 문서로 협업 문제를 풀다

프론트엔드 팀원과 협업하면서, 백엔드가 API를 만들어 놔도 프론트엔드 쪽에 정보가 왜곡된 채 전달돼 API를 제대로 쓰지 못하는 문제가 있었습니다. 이걸 풀고 소통을 매끄럽게 하려면 API 문서가 있어야겠다고 생각해, 백엔드 팀원들과 협의한 뒤 Swagger로 문서를 만들어 프론트엔드 팀원들이 더 수월하게 작업하도록 했습니다. 열심히 만든 API를 문서로서 보기 좋게 정리하고, 팀원들이 그걸 잘 쓰는 모습을 보니 뿌듯했습니다.

채팅과 AI 이미지 생성

실시간 채팅은 WebSocket 프로토콜로 개발했는데, 익숙한 HTTP 통신과 달리 오류 메시지가 구체적으로 나오지 않아 디버깅에 애를 먹었습니다.
그리고 기획 단계에서 언급만 됐던 Open AI API 이미지 생성 기능은 시간이 촉박해 생략하려 했지만, 최신 AI 기술을 꼭 써 보고 싶은 욕심에 프로젝트 마지막쯤 OpenAI Dall-E 3 API로 붙였습니다. 모임의 성격을 프롬프트로 넣으면 그에 어울리는 증표 이미지가 나옵니다.

프론트와 백엔드를 오가며

이전에 프론트엔드(Angular) 개발자로서 일한 경력이 있다 보니, 프론트엔드 팀원이 속도가 나지 않을 때 제가 프론트엔드와 백엔드를 동시에 진행하며 부족한 부분을 메우려 했고, 그만큼 프로젝트에 더 많이 기여했습니다.