스파르타 코딩

[2주차] 키즈카페 조회 & 예약 사이트 만들기 (가격 정책, 회원 관리 & 조회)

스타르타 2024. 12. 20. 13:28
반응형

1. 의사결정

[내가 구현한 기능]

  1. 가격 정책 추가 및 관리 기능
    • 카페에 대해 특정 요일이나 대상(사람, 룸 등)에 대해 요금 정책을 추가, 수정, 삭제할 수 있는 기능
    • 정책 등록 시 요일별 추가 요금이나 할인 정책을 유연하게 설정 가능
  2. 회원 관리 기능
    • 사용자 프로필 조회, 수정, 삭제 기능 구현
    • 본인만 접근 가능한 데이터와 권한을 설정하고, 보안 강화를 위해 JWT 기반의 인증을 적용
  3. 회원 조회(사장님 및 관리자)
    • 사장님이 본인의 카페를 즐겨찾기 한 회원 목록 조회
    • 관리자가 전체 회원의 데이터를 확인할 수 있는 기능

[배경]

전국 키즈카페 정보 및 예약 시스템은 사용자 편의성과 정보의 정확성이 핵심입니다. 특히 사장님과 관리자가 각자의 권한으로 필요한 정보를 효율적으로 관리할 수 있어야 하고, 일반 사용자는 본인의 프로필 데이터를 안전하게 조회하고 수정할 수 있어야 했습니다. 가격 정책 기능은 다양한 요일 및 조건에 맞춰 요금을 설정할 수 있도록 유연하게 설계되어야 했습니다.


[요구사항]

  1. 가격 정책 관리
    • 특정 카페에 대해 요일별 추가 요금 또는 할인 요금을 설정
    • 정책을 수정하거나 삭제할 때 데이터 무결성을 보장
  2. 회원 관리
    • 사용자는 자신의 프로필 데이터를 확인하고 수정할 수 있어야 함
    • 회원 삭제 요청 시, 인증된 사용자만 요청 가능하며, 삭제 이후 데이터 복구 불가능
  3. 회원 조회(사장님 및 관리자)
    • 사장님은 본인의 카페를 즐겨찾기 한 회원 데이터를 확인
    • 관리자는 모든 회원 데이터를 확인하며, 페이지네이션 제공

[선택지]

  1. 가격 정책 관리 방법
    • 정책 데이터를 JSON으로 묶어서 한 테이블에 저장
    • 정책 데이터를 개별적으로 저장하고, 요일별로 관리
  2. 프로필 데이터 보호
    • 모든 회원의 데이터를 반환(비효율적)
    • 본인의 데이터는 모든 정보를 제공하고, 다른 회원의 데이터는 최소한의 정보만 반환
  3. 조회 속도 최적화
    • 캐싱 도입
    • SQL 쿼리 최적화와 Index 추가

[의사결정/사유]

  1. 가격 정책 관리
    • 데이터의 유연성과 관리 용이성을 위해 요일별 정책 데이터를 개별적으로 저장하는 방식 선택
    • JSON 방식은 초기에는 간단하지만 검색과 수정 시 불편함 발생 가능
  2. 프로필 데이터 보호
    • 본인의 데이터와 타인의 데이터를 구분하여 반환하도록 설계
    • API 요청자에 따라 반환 데이터가 달라지도록 조건 설정
  3. 조회 속도 최적화
    • Redis 캐싱은 유지보수 비용이 높아 우선적으로 SQL Index 추가를 통해 조회 속도 개선
    • Index 추가 후 조회 속도가 30% 이상 개선됨을 확인

[대안 분석 및 회고]

  1. 가격 정책 관리
    • JSON 방식은 단순했지만, 유연성이 부족하여 선택하지 않음
    • 정책 데이터를 개별 테이블로 분리하여 관리한 결과, 검색 및 수정의 용이성을 확보
  2. JWT 기반 권한 관리
    • 초기에는 Role 기반 접근 제한을 명확히 설정하지 않아 불필요한 권한 체크 로직이 포함되었음
    • 이후 Custom Annotation을 활용하여 권한 관리 로직을 최적화
  3. 조회 속도
    • 캐싱 도입을 보류한 상태에서도 SQL Index 최적화만으로 속도 향상 가능
    • 향후 데이터 양이 많아질 경우 캐싱 도입 재검토 예정

2. 문제해결

[문제 인식]

  1. 가격 정책 관리에서 중복 등록 문제
    • 동일한 요일과 대상을 가진 중복 정책이 허용되어 데이터 무결성이 훼손될 가능성이 있었음
  2. 회원 관리에서 인증 문제
    • 인증되지 않은 사용자가 프로필 수정 및 삭제 API에 접근하려는 시도가 발생
  3. 사장님 즐겨찾기 회원 조회에서 속도 문제
    • 대량의 즐겨찾기 데이터를 조회할 때 속도가 느려지는 문제가 발견됨

[해결 방안]

  1. 가격 정책 중복 등록 방지
    • 정책 테이블에 unique 제약 조건을 추가하여 중복 등록 방지
    • 중복 발생 시 Custom Exception을 통해 사용자에게 명확한 피드백 제공
  2. 회원 관리에서 인증 강화
    • JWT 토큰 기반 인증을 강화하여 접근 가능한 사용자만 요청을 처리하도록 설정
    • Role 기반 권한 체크 로직 추가로 사용자와 관리자의 API 사용 범위 구분
  3. 조회 속도 문제 개선
    • 데이터베이스의 Index 추가로 쿼리 실행 속도 최적화
    • Redis 캐싱 도입 가능성을 검토하였으나, Index 추가만으로도 성능 개선 가능함을 확인

[해결 완료]

  1. 가격 정책 관리
    • 중복 등록 방지로 데이터 무결성 보장
    • 정책 수정 및 삭제 기능이 안정적으로 작동
  2. 회원 관리
    • 프로필 조회/수정/삭제 시 인증되지 않은 요청을 차단
    • 데이터 보호를 위해 불필요한 정보 노출 제거
  3. 조회 속도 개선
    • Index 추가로 조회 속도 약 30% 향상
    • 필요 시 캐싱 도입을 통해 추가적인 성능 최적화 가능

3. 결론

이번 작업을 통해 가격 정책 관리, 회원 관리, 데이터 조회 성능 개선 등의 주요 문제를 해결하면서 기능 안정성과 확장성을 동시에 확보할 수 있었습니다. 데이터 무결성과 보안을 강화하여 사용자 경험을 개선하는 데 성공했으며, 추후 확장 가능한 구조로 설계하여 향후 추가 요구사항에도 대응할 수 있는 기반을 마련했습니다.

반응형