티스토리 뷰
개요
동아리 홈페이지 백엔드 개발을 진행해오고 있었고 홈페이지라면 기본적으로 갖춰야 할 기본적인 기능들이 거의 구현이 된 상태에서 기존 홈페이지에는 존재하지 않았던 새로운 기능을 추가해 보고자 하였습니다. 여러 가지 아이디어들이 나오게 되었고 저가 맡게 된 부분은 투표 기능 개발이었습니다.
기존에는 동아리 임원진(회장, 부회장, 총무)을 동아리 카카오 채널을 통해 투표하는 방식이었으나 홈페이지에 투표 기능을 추가하여 홈페이지를 조금 더 활성화하고 투표 현황, 투표 결과도 시각적으로 보여주고자 하는 것이 개발 목표였습니다.
설계
하나의 기능이 추가될 때 크게 3파트의 개발이 진행됩니다.
- 해당 기능에 필요한 데이터를 위한 DB 설계
- 클라이언트에게 보여주기 위한 프런트 개발
- 기능의 비즈니스 로직을 처리하기 위한 백엔드 개발
DB 설계는 위와 같이 진행되었습니다. 투표와 투표자, 후보자는 1:N
관계를 맺게 되고 후보자는 득표 테이블과 1:N
관계를 맺게 됩니다. 투표자는 회원 ID와 투표 ID의 복합키 구성을 통해 PK를 생성했습니다. 단일 PK를 얻어서 조작하기보다는 회원 ID와 투표 ID를 통한 조회가 많이 사용될 것으로 생각했기 때문입니다. 후보자는 보통 전체 조회를 통해 해당 PK를 얻어 사용할 수 있기에 단일 PK를 사용하였습니다. 비밀 투표를 유지하기 위해 득표 테이블에는 투표한 회원 정보를 드러내지 않도록 설계하였습니다.
프런트 개발자분들과 같이 진행하는 프로젝트이기에 UI/UX를 바탕으로 API를 설계하는 것이 중요했고 본격적인 개발에 들어가기에 앞서 대략적인 UI/UX를 프런트 개발자분들로부터 받을 수 있었습니다. 전체적인 기능으로는 투표 목록 확인, 진행 중인 투표 참여, 투표하기, 실시간 투표 현황 확인, 투표 결과 확인 등이 존재하였습니다.
투표 개설, 후보자 등록과 같은 기능은 일반 회원은 수행할 수 없고 Admin만 수행할 수 있도록 API를 분리하는 것도 필요했습니다. 전체적인 흐름을 확인 후 클라이언트의 입장으로 기능을 하나씩 상상해보며 필요할 것으로 생각한 API는 아래와 같습니다.
User
- 투표 목록 조회
- 투표 참여
- 후보자 리스트 조회
- 투표
- 투표 여부 조회
- 투표 결과 리스트 조회
- 실시간 투표 현황 조회
Admin
- 투표 개설
- 투표 삭제
- 투표 시작
- 투표 종료
- 후보자 등록
- 후보자 삭제
- 투표자 등록
- 투표자 삭제
대부분의 API는 요청이 들어왔을 때 해당 요청에 알맞은 응답을 전송하면 되기에 쉽게 개발할 수 있다는 생각이 들었지만, 요청이 들어오지 않더라도 실시간으로 현황에 변화가 생겼을 때 결과를 클라이언트에게 전송하는 것은 해본 적이 없었기에 난이도가 높을 것으로 생각했습니다. 따라서 기능 개발을 위한 사전 조사를 먼저 수행하기로 하였습니다.
다음 글에서 해당 기능을 개발하기 위해 사전 조사한 내용에 대해 설명해 드리도록 하겠습니다!
'Spring > Spring Boot' 카테고리의 다른 글
동아리 홈페이지 투표 개발 3 - 개발 및 적용 (0) | 2022.10.14 |
---|---|
동아리 홈페이지 투표 개발 2 - WebSocket과 STOMP (0) | 2022.10.05 |
복합키를 가지는 JPA 엔티티 생성하기 (1) | 2022.09.14 |
[Spring Boot] 메시지, 국제화란 (0) | 2022.07.30 |
[Error] 406 Not Acceptable HttpMediaTypeNotAcceptableException (0) | 2022.07.29 |