Skip to content

[IC2_BE] 김승빈 - 설문조사 서비스 과제#27

Open
seungbin-kim wants to merge 35 commits into
FC-InnerCircle-ICD2:mainfrom
seungbin-kim:main
Open

[IC2_BE] 김승빈 - 설문조사 서비스 과제#27
seungbin-kim wants to merge 35 commits into
FC-InnerCircle-ICD2:mainfrom
seungbin-kim:main

Conversation

@seungbin-kim

@seungbin-kim seungbin-kim commented Nov 29, 2024

Copy link
Copy Markdown

구현내용

  • 설문조사 생성 API
  • 설문조사 수정 API
  • 설문조사 응답 제출 API
  • 설문조사 응답 조회 API
    • (Advanced) 설문 응답 항목의 이름과 응답 값을 기반으로 검색

테이블 설계

image

API 문서

jar 다운로드

고민

  • (초기구현) 모든 정보를 RDB 컬럼으로 관리
    • 요구사항을 구현하기 위한 코드가 복잡해졌음
    • 기능이 추가된다면 데이터 관리가 매우 힘들어지고 많은 양의 코드를 작성해야 할 것 같았음
    • 결국 JSON 형태를 저장하지만 검색을 고려한 구현으로 바꾸어야 함을 느낌
  • (현재) 설문 정보와 질문 정보를 JSON 형태로 저장
    • 코드의 양을 많이 줄일 수 있었고, 단순해짐
    • 질문이름=답변내용 검색을 위해 조회용 "답변이력" 테이블을 이용
      • 설문조사 제출시 해당 시점의 질문정보와 답변내용을 쪼개어 저장
      • 컬럼 인덱스를 활용해 질문 조회를 고려하고, 응답은 JSON
        • (설문식별자 + 질문이름)[현재선택] or (설문식별자 + 질문이름 + 답변내용) 고민
        • 답변 내용은 내용이 길거나 부분 검색을 해야하면 인덱스 생성이 적절하지 않을 것 같았음

질문

  • 설계 관련
    1. 설문조사 정보와 제출 정보는 유연하게 JSON 으로 저장하면서 "이름=답변" 조회 요구사항을 위해 검색용 테이블에 각각의 응답을 분리하여 쌓아두는 방식으로 하였습니다.
      • 저는 우선 (설문 식별자, 질문 이름) 복합 인덱스를 사용했는데, 길이가 긴 "답변 내용" 컬럼까지 인덱스로 두어도 괜찮을까요?
        • "답변" 내용은 자바에서 필터링
    2. BizException 이라는 공통 예외 1개에 세부적인 메세지 구분은 ErrorCode를 정의하여 사용하였는데, 보통 서비스 기업에서는 어떤 방식으로 사용하나요?
      • 예외 원인에 대해 모두 개별 Exception을 정의한다면 테스트하기엔 좋아도 관리할 파일이 많이 늘어날 것 같습니다. 평소 선호하는 방식이 있으신가요?

- springdoc-openapi-starter-webmvc-ui 추가
- application.yml / local 설정 추가
- swagger 호환 문제로 부트 버전 변경
- validation 의존 추가
- 요청 객체의 enum 변환 메서드 사용
- 연관관계 메서드 추가
- 설문조사 생성 단위테스트 작성
- 설문 항목, 선택 항목 개수 제한
- Repository ID 타입 Long 타입으로 수정
- 설문조사 수정 구현
- Survey 엔티티 내부에서 처리하도록 수정
- 선택 리스트 타입인지 확인하는 조건 추가
- mediaType, responseCode 추가
- 설문조사 수정 테스트코드 작성
- DTO 코드 스타일 수정
- 파라미터 변수명 짧게 수정
- 경로변수 제대로 받아오도록 수정
- 설문좌 응답 제출 구현
- 유형 타입 제출시점 값으로 저장
- 설문조사 응답 조회 구현
- 항목 수정시에도 기존 응답 내용 반환
@seungbin-kim seungbin-kim added the WIP 작업을 진행중일 때 사용 label Nov 29, 2024
@seungbin-kim seungbin-kim self-assigned this Nov 29, 2024
- OAS Tag Nam 수정
- 실행 가능 jar 다운로드 링크 추가
@seungbin-kim seungbin-kim added Needs Review 작업이 완료되어 리뷰가 필요할 때 사용 and removed WIP 작업을 진행중일 때 사용 labels Nov 29, 2024
- 각 API 설명 추가
- API 스펙 바로보기 링크 수정
@seungbin-kim seungbin-kim added WIP 작업을 진행중일 때 사용 and removed Needs Review 작업이 완료되어 리뷰가 필요할 때 사용 labels Nov 30, 2024
- 기존 동일항목 중복제출 검사 단일선택에 대해서만 수행
- 다중선택 항목을 제외한 항목 모두 중복제출 검사
@seungbin-kim seungbin-kim added Needs Review 작업이 완료되어 리뷰가 필요할 때 사용 and removed WIP 작업을 진행중일 때 사용 labels Dec 5, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Needs Review 작업이 완료되어 리뷰가 필요할 때 사용

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant