당신의 모든 순간
"골라주마"
인생은 선택의 연속입니다.
수많은 선택의 순간 앞에서 당신의 모든 순간이 더 행복해지도록
언제 어디서든 누구나 쉽게 투표를 등록하고 응답하는 오픈 투표 플랫폼
골라주마는 온라인 투표 커뮤니티 서비스로, 작성자의 질문을 모두가 공유하고 고민할 수 있는 반응형 웹앱입니다.
남녀 노소, 때와 장소를 구분하지 않고 발생하는 선택장애라는 문제를 해결하기 위해 다수의 의견이 필요하다는 설문 조사 결과를 얻었습니다. 이에 따라 많은 사람들이 자신의 크고 작은 고민들을 공유하고 다른 사람들의 고민을 함께 고민할 수 있는 커뮤니티를 개발하였습니다.
- 사용자가 질문을 업로드 할 수 있는 기능
- 사용자가 다른 사용자들의 질문들에 투표할 수 있는 기능
- 게시글 검색 기능
- 게시글에 댓글을 달 수 있는 기능
- 해당 게시글을 공유할 수 있는 기능
- 자신이 작성한 글, 자신이 투표에 참여한 글을 확인할 수 있는 기능
투표라는 컨텐츠를 갖고 있고 실시간으로 투표를 하거나 취소, 변경 등이 빠른 시간에 이뤄져야 하기 때문에 과도한 제약이 단점이 될 수 있다고 생각했고, 개발 도중 편의성을 증진시키기 위해 외래키를 제외하는 구조로 설계했습니다. 또 deleted필드를 구성해 soft delete방식으로 삭제처리했습니다.
해당 구조로 리액트 서버를 통해서만 요청을 받을 수 있고, 서버의 주소를 은닉할 수 있다는 장점이 있습니다.
- Spring Boot
- Spring Data JPA
- Lombok
- MariaDB Java Client
- jbcrypt
- jsonwebtoken
- spotless
파트 | 기능 | 설명 |
---|---|---|
인가처리 | 토큰 생성 | secret key와 유저의 정보로 토큰을 생성 |
인가처리 | 토큰 재발급 | access token 만료 시, refresh token을 통해 access token 재발급 |
중복 검사 | 이메일 중복 확인 | 이메일 중복을 검사하는 기능 |
중복 검사 | 닉네임 중복 확인 | 닉네임 중복을 검사하는 기능 |
회원가입 | 회원가입 | 회원가입 시 유저의 정보를 검사하고 저장하는 기능 |
로그인 | 로그인 | 로그인을 통해 유저에게 access token, refresh token을 발급하는 기능 |
파트 | 기능 | 설명 |
---|---|---|
투표 | 투표생성 | 제목, 부연설명, 2~6개의 옵션, 이미지, 정해진 범주의 카테고리와 마감시간을 조합해 투표를 생성하는 기능 |
투표 | 투표마감 | 투표 생성 시에 마감시간을 정하지만 유저는 원할 때 투표를 마감하는 기능 |
투표 | 투표조회 | 정렬, 카테고리, 마감여부를 기준으로 투표의 리스트를 확인하는 기능 |
투표 | 인기투표조회 | 지난 1시간 사이에 인기가 많았던 투표의 리스트를 확인하는 기능 |
투표 | 투표상세조회 | 한 투표의 상세 정보를 확인하는 기능 |
파트 | 기능 | 설명 |
---|---|---|
투표 | 투표하기 | 투표에 참여하는 기능 |
투표 | 투표취소 | 참여한 투표를 취소하는 기능. 동시에 댓글도 삭제됨 |
투표 | 투표변경 | 투표를 변경하는 기능 |
파트 | 기능 | 설명 |
---|---|---|
댓글 | 댓글생성 | 댓글을 생성하는 기능 |
댓글 | 댓글삭제 | 댓글을 삭제하는 기능 |
댓글 | 댓글조회 | 한 투표의 댓글 리스트를 조회하는 기능 |
서로 다른 개발자 3명이 하나의 컨벤션을 지키기란 굉장히 어려웠습니다.. 그래서 저희는 spotless를 활용해 구글 컨벤션을 지켜야 커밋을 할 수 있게 했습니다.
추상화 클래스와 base 클래스들을 만들고 그 클래스들을 상속하는 방식으로 dto, exception, entity, response을 구현했습니다. 이를 통해 코드 재사용을 높일 수 있었고 좀 더 통일된 코드를 작성할 수 있었습니다.
exception의 이름을 모두 다르게 만들었는데 실수로 다른 패키지의 예외를 호출하는 실수를 줄일 수 있었고 명확한 이름을 갖기 때문에 구별하기 쉽다는 장점이 있습니다.
에러 코드로 400~404로 통일하여 사용했으며, 메시지를 다르게 구성했습니다.
최대한 많은 경우를 테스트하기 위해 다양한 테스트 케이스로 테스트를 했습니다.
투표 삭제 로직과 댓글 삭제 로직간의 결합도를 끊고 관심사를 분리하기 위해 이벤트를 활용하였습니다. 이를 통해 서비스 간의 강한 의존성을 줄일 수 있었습니다
FE | FE | FE |
---|---|---|
김가연(리마인더) | 문지혜(기획리더) | 강성준(리액셔너) |
BE | BE | BE |
---|---|---|
진우석(조장) | 김수민(테크리더) | 박현수(타임키퍼) |