Github
https://github.com/sproutt/eussya-eussya-api
https://github.com/sproutt/eussya-eussay-chat
시연 영상
https://drive.google.com/file/d/1HSiHAW1jyl3EXfAqg-fcsmmqg0hD8A7-/view?usp=sharing
개요
이른 새벽 시간을 활용하여 학습 및 자기 계발을 하려는 개발자들을 위한 동기부여 웹 서비스
- 매일 새벽 4~9시 사이에 달성하고자 하는 오늘의 목표를 TODO 형태로 작성하는 기능 및 스톱워치 제공
- Github의 커밋 잔디와 같이 달성한 목표들을 시각적으로 보여주는 기능 제공
- 작성한 목표들을 공유하는 SNS 기능 제공
- 접속 중인 사용자와 대화기능 제공
기술 스택
- Server : Spring boot, Spring OAuth2.0, Spring boot websocket, JUnit4
- Database : Spring data JPA, H2, Redis Pub/Sub
기여 사항
- JWT 기반 사용자 인증 기능 구현 및 CORS 이슈 해결
- 미션 도메인 RESTful API 구현
- Spring AOP를 이용하여 API를 요청한 사용자를 식별하는 로직 중복 제거
- Redis Pub/Sub을 이용하여 scale-out에 유리한 Stomp 기반 Websocket 채팅 서버 구현
기술 중점 사항
1. JWT 기반 사용자 인증 기능 구현
서버의 부하 이슈 및 용이한 Scale-out 설계를 위해 세션 기반이 아닌 토큰 기반의 인증/인가 처리 로직을 구현하였습니다. 토큰으로 JWT를 이용하였으며 탈취 시 무효화를 시킬 수 없다는 토큰 방식의 한계점을 보완하기 위해 AccessToken과 RefreshToken을 발급시키는 방법으로 문제를 해결하고자 했습니다.
JWT(JSON Web Token) - 김종근
2. Redis Pub/Sub 기반 WebSocket 채팅 서버 개발
spring boot를 이용하여 websocket 서버 개발을 진행하였으며 HTTP와 유사하게 일관성있는 형식의 프로토콜을 사용하기 위해 stomp를 기반으로 구현하였습니다. 또한 여러 대의 websocket 서버 간의 통신이 원활하게 가능하도록 하기 위해서 redis에서 제공하는 pub/sub 메시지 브로커를 적용하였습니다. 서버와 서버 사이에서 redis가 메시지를 관리하도록 함으로써 원활한 Scale out이 가능한 설계를 가져갈 수 있었습니다.
프로젝트를 통해 성장한 부분
- HTTP 와 RESTful 에 대한 깊이 있는 탐구
- 세션 기반 인증 방식과 토큰 기반 인증의 차이점에 대해 학습 + JWT 를 통한 인증 처리 경험
- 웹 보안 정책 SOP 이해 및 CORS 이슈 해결 경험
- WebSocket 통신 및 Stomp 프로토콜 개발 경험
- Redis Pub/Sub 을 통한 채팅 서버 간 통신 방식 적용 및 Scale-out을 고려한 설계 경험