Skip to content

[IC2_BE] 한해용 - 설문조사 서비스 과제#9

Open
haeyonghahn wants to merge 22 commits into
FC-InnerCircle-ICD2:mainfrom
haeyonghahn:main
Open

[IC2_BE] 한해용 - 설문조사 서비스 과제#9
haeyonghahn wants to merge 22 commits into
FC-InnerCircle-ICD2:mainfrom
haeyonghahn:main

Conversation

@haeyonghahn
Copy link
Copy Markdown

@haeyonghahn haeyonghahn commented Nov 25, 2024

온보딩 프로젝트 기능 요구사항

1. 설문조사 생성 API

  • 요청 값에는 [설문조사 이름], [설문조사 설명], [설문 받을 항목]이 포함됩니다.
  • [설문 받을 항목]은 [항목 이름], [항목 설명], [항목 입력 형태], [항목 필수 여부]의 구성으로 이루어져있습니다.
  • [항목 입력 형태]는 [단답형], [장문형], [단일 선택 리스트], [다중 선택 리스트]의 구성으로 이루어져있습니다.
    • [단일 선택 리스트], [다중 선택 리스트]의 경우 선택 할 수 있는 후보를 요청 값에 포함하여야 합니다.
  • [설문 받을 항목]은 1개 ~ 10개까지 포함 할 수 있습니다.

2. 설문조사 수정 API

  • 요청 값에는 [설문조사 이름], [설문조사 설명], [설문 받을 항목]이 포함됩니다.
  • [설문 받을 항목]은 [항목 이름], [항목 설명], [항목 입력 형태], [항목 필수 여부]의 구성으로 이루어져있습니다.
  • [항목 입력 형태]는 [단답형], [장문형], [단일 선택 리스트], [다중 선택 리스트]의 구성으로 이루어져있습니다.
  • [단일 선택 리스트], [다중 선택 리스트]의 경우 선택 할 수 있는 후보를 요청 값에 포함하여야 합니다.
  • [설문 받을 항목]이 추가/변경/삭제 되더라도 기존 응답은 유지되어야 합니다.

3. 설문조사 응답 제출 API

  • 요청 값에는 [설문 받을 항목]에 대응되는 응답 값이 포함됩니다.
  • 응답 값은 설문조사의 [설문 받을 항목]과 일치해야만 응답 할 수 있습니다.

4. 설문조사 응답 조회 API

  • 요청 값에는 [설문조사 식별자]가 포함됩니다.
  • 해당 설문조사의 전체 응답을 조회합니다.
  • (Advanced) 설문 응답 항목의 이름과 응답 값을 기반으로 검색 할 수 있습니다.

우대사항

프로젝트 구성 추가 요건: 멀티 모듈 구성 및 모듈간 의존성 제약

📦 onboarding
 ┣ 📂 core (공통 API)
 ┗ 📂 servey (설문조사 서비스)

설문조사 서비스 최초에 멀티 모듈로 onboarding 프로젝트를 구성한다고 한다면
크게 두 가지로 core 모듈과 servey 모듈로 구성할 거 같습니다.

하지만 설문조사 서비스의 시스템이 커지게 된다면 core 모듈에 공통 코드가 쌓이게 되면서
모듈의 형태가 비대칭적으로 커지게 될 거 같습니다. 이 경우는 core 모듈에 장애 발생 시 다른
도메인 서비스에 장애 전파가 일어날 소지가 있을 거 같습니다.

📦 onboarding
 ┣ 📂 core (공통)
 ┣ 📂 chat (설문조사 채팅 서비스)
 ┣ 📂 fts (설문조사 파일 전송 서비스)
 ┗ 📂 servey (설문조사 서비스)

그래서, core 모듈에 공통 코드를 몰아두지 말고 분명하게 모듈을 분리하는 작업이 필요할 거 같습니다.

📦 onboarding
 ┣ 📂 core (공통)
 ┣ 📂 chat-core (설문조사 채팅 공통)
 ┣ 📂 fts-core (설문조사 파일 전송 공통)
 ┣ 📂 servey-core (설문조사 채팅 공통)
 ┣ 📂 chat (설문조사 채팅 서비스)
 ┣ 📂 fts (설문조사 파일 전송 서비스)
 ┗ 📂 servey (설문조사 서비스)

Back-end 추가 요건

  • 트래픽이 많고, 저장되어 있는 데이터가 많음을 염두에 둔 구현
  • 다수의 서버, 인스턴스에서 동작할 수 있음을 염두에 둔 구현
  • 동시성 이슈가 발생할 수 있는 부분을 염두에 둔 구현

트래픽이 많고 저장되어 있는 데이터가 많다면, 설문조사 데이터를 가져올 때
조회 속도 이슈가 발생할 수도 있을 거 같습니다. 이 경우엔 Redis와 같은 기술을 이용하여
캐시를 활용해 캐시되어 있는 데이터를 조회함으로써 속도 이슈를 개선할 여지가 있을 거 같습니다.

다수의 서버, 인스턴스에서 동작한다고 하더라도
싱글 쓰레드인 Redis를 활용하여 동시성 이슈를 개선하는 용도로 활용될 수 있을 거 같습니다.

기능 점검을 위한 빌드 결과물

Executable jar 형태의 파일 다운르도

설문조사 서비스의 API 명세

Executable jar 형태의 파일 실행 후 http://localhost:8080/swagger-ui.html 에 접속해주세요.

- api 명세서 작성을 위한 swagger2 라이브러리와 lombok 추가
- error 및 exception 처리를 위해 error 관련 소스 추가
- application.yml 설정 정보 추가
@haeyonghahn haeyonghahn added the WIP 작업을 진행중일 때 사용 label Nov 25, 2024
@haeyonghahn haeyonghahn self-assigned this Nov 25, 2024
- Servey : 설문조사 양식
- Question : 설문 받을 항목
- Option : 설문 받을 항목이 단일 선택 리스트 또는 다중 선택 리스트인 경우 포함되어야 하는 후보
- Fix: Option 엔티티 number 필드 타입 수정
- Feat: SQL 로깅 추가
@haeyonghahn haeyonghahn changed the title 설문조사 서비스 과제 한해용 - 설문조사 서비스 과제 Nov 27, 2024
@haeyonghahn haeyonghahn changed the title 한해용 - 설문조사 서비스 과제 [IC2_BE] 한해용 - 설문조사 서비스 과제 Nov 27, 2024
- ServeyRequest, QuestionRequest, OptionRequest 추가 및 검증
- ErrorResponse message 타입 수정
- ApiController 예외 처리 추가
- xxxEditor 클래스를 활용하여 데이터 수정
- Fix: QuestionRequest type 예시 수정
- Fix: QuestionType 메소드명 수정
- Fix: ServeyController 메소드명, 응답 상태값 변경
- Remove: Questions 및 QuestionsValidator 파일 삭제
- Question 어노테이션 역할을 ServeyValidator 로 변경
- ConstraintViolationException 예외 처리 추가
- 설문조사 응답 제출 API 예외 처리 추가
- Question 엔티티 응답 컬럼 추가
- Chore: build.gradle version 명시 제거
@haeyonghahn haeyonghahn added Needs Review 작업이 완료되어 리뷰가 필요할 때 사용 and removed WIP 작업을 진행중일 때 사용 labels Nov 30, 2024
@haeyonghahn haeyonghahn added WIP 작업을 진행중일 때 사용 and removed Needs Review 작업이 완료되어 리뷰가 필요할 때 사용 labels Nov 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

WIP 작업을 진행중일 때 사용

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant