제품에 대한 리뷰를 작성하고, 중고 물품 거래시 해당 물품의 리뷰도 확인할 수 있으며 사용자나 관리자끼리 실시간으로 메시지를 주고받으며 대화할 수 있는 서비스 API 개발 프로젝트입니다.
2024.09 ~ (진행중)
Java, SpringBoot, JPA, Redis, MySQL, Docker, Jenkins, AWS
https://www.erdcloud.com/d/WdiQSSJiKy4n6YFQr
EC2 서버 2대를 사용하여 Jenkins를 사용한 빌드용 서버와 API 애플리케이션&Redis 가동용 서버로 나누어 설계하였습니다. 또한 별도의 서버 세팅 시간을 줄이고, 로컬에서 실제 환경으로 테스트를 해봐야 하는 경우나 서버 이전 등을 용이하게 하기 위하여 Docker를 사용해서 환경을 분리해주었습니다.
일반적인 회원가입 외에도 Spring Security, OAith2를 이용하여 구글, 네이버 계정을 연동하여 회원가입/로그인을 할 수 있도록 구현하였습니다. 사용자의 권한 정보는 UserDetails와 OAuth2User를 한 클래스에 구현하여 한 곳에서 관리되도록 하였고, 해당 기능을 작업하며 OAuth 2.0의 동작 방식에 대해서 배울 수 있었습니다.
게시글의 '좋아요'수 등은 DB에 잦은 insert/delete문을 유발하여 성능에 영향을 줄 수 있다고 생각했습니다. 이를 해결하기 위하여 사용자가 '좋아요'를 하거나 취소한 내역을 Redis에 임시저장한 후 주기적으로 DB에 적용하도록 구현하였습니다. Redis를 사용한 이유는 인메모리 방식으로 데이터 접근 및 제어 처리 속도가 빠르기 때문에 다른 데이터에 비해 조회, 추가, 삭제가 잦은 좋아요기능에 사용하면 좋을 것이라 생각되어 사용하였습니다.
위의 기능을 작업하며 Redis의 Publish, Subscribe를 이용하여 메시지 큐처럼 사용할 수 있다는 것을 알게되었고, 이를 이용하여 채팅 기능을 구현하였습니다. 작업하며 Redis를 DB로만 사용하는 것이 아닌 메시지 서버로도 사용할 수 있어 편리하지만, Redis의 특성상 데이터가 유실될 수 있기에 유실되어도 괜찮은 알림 등에만 사용하거나 실서비스에는 다른 방식으로 구현해야겠다는 생각이 들었습니다.
- Optional을 이용한 NullPointerException 예방하기
- 클래스별 역할을 확실하게 구분할 것
- Stream으로 코드 가독성을 높이는 방법
- Jenkins, GitAction 등을 이용한 CI/CD 구축
- 기타 등등...