Skip to content

Latest commit

 

History

History
135 lines (96 loc) · 4.53 KB

File metadata and controls

135 lines (96 loc) · 4.53 KB

나올만한 기술면접질문 그리고 그# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

프로젝트 개요

IF-U Server는 Spring Boot 3.5.6과 Java 21을 사용하는 투표/질문 기반 플랫폼의 REST API입니다. MySQL을 사용하며, JPA/Hibernate로 데이터를 관리합니다.

빌드 및 개발 명령어

빌드 및 실행

./gradlew build
./gradlew bootRun

테스트

./gradlew test
./gradlew test --tests ClassName.methodName

클린 빌드

./gradlew clean build

아키텍처 및 코드 구조

패키지 구조

com.ifu.ifu_server/
├── common/              # 공통 컴포넌트
│   ├── entity/         # BaseEntity (id, createdAt, updatedAt 자동 관리)
│   └── response/       # ApiResponse 표준 응답 래퍼
├── domain/             # 도메인별 레이어
│   ├── user/          # 사용자 관리 및 인증
│   ├── question/      # 질문 및 투표 선택지
│   ├── vote/          # 투표 시스템 및 통계
│   ├── comment/       # 질문에 대한 댓글
│   ├── nickname/      # 랜덤 닉네임 생성 (형용사 + 명사)
│   └── device/        # 푸시 알림용 디바이스 관리
└── global/            # 전역 설정
    ├── config/        # SwaggerConfig (에러 예제 자동 생성)
    └── exception/     # GlobalExceptionHandler, ErrorCode, BusinessException

엔티티 설계 패턴

  • BaseEntity: 모든 도메인 엔티티는 BaseEntity를 상속받아 id, createdAt, updatedAt를 자동 관리
  • 소프트 삭제: User 등은 deletedAt 타임스탬프로 소프트 삭제 처리
  • Enum 활용: 상태 및 역할 관리에 enum 사용 (QuestionStatus, Role, DeletedBy)
  • 빌더 패턴: 모든 엔티티는 Lombok @Builder 사용, protected 기본 생성자
  • 양방향 관계: Question과 VoteStats는 OneToOne 관계, 생성 시 양쪽 모두 설정 필요

API 응답 구조

모든 API 응답은 ApiResponse<T> 래퍼 사용:

{
    "timestamp":"2025-11-02T08:00:00",
    "status":200,
    "code":"SUCCESS",
    "message":"요청이 성공적으로 처리되었습니다.",
    "data":{...}
    }

에러 응답도 동일한 구조로 적절한 상태 코드와 ErrorCode enum 사용

코딩 컨벤션

JSON 필드명: camelCase 사용

API 응답의 JSON 필드명은 camelCase를 사용합니다.

Mapper 계층 사용

엔티티와 DTO 간 변환 책임을 분리하기 위해 Mapper 계층을 사용합니다.

  • 간단한 로직의 경우 필수는 아니지만, 가급적 Mapper를 통한 변환을 권장
  • 변환 로직이 복잡하거나 여러 곳에서 재사용되는 경우 필수
  • domain/{domain}/mapper/ 패키지에 위치

예외 처리

  • BusinessException: 비즈니스 로직 실패 시 사용하는 커스텀 예외, ErrorCode와 매핑
  • GlobalExceptionHandler: @RestControllerAdvice로 검증, 접근 권한, 시스템 에러 등을 중앙 처리
  • 일관된 에러 응답을 위해 ErrorCode enum 사용

Swagger/OpenAPI 통합

  • 실행 시 /swagger-ui.html에서 확인 가능
  • @ApiErrorExample, @ApiErrorExamples 어노테이션으로 에러 문서화
  • ErrorCode enum 값으로부터 에러 응답 예제 자동 생성

환경 설정

환경 변수

데이터베이스 연결에 필요 (application.yml 참고):

  • DB_URL: MySQL JDBC URL
  • DB_USERNAME: 데이터베이스 사용자명
  • DB_PASSWORD: 데이터베이스 비밀번호
  • SERVER_PORT: 애플리케이션 포트 (기본값: 8080)

Active Profile

기본 프로파일은 dev (application.yml에 설정)

도메인 모델 관계

  • UserDevice: 일대다 (사용자는 여러 디바이스 소유 가능)
  • QuestionVoteStats: 일대일 (각 질문은 투표 통계 보유)
  • QuestionVote: 일대다 (질문에 여러 투표)
  • QuestionComment: 일대다 (질문에 여러 댓글)
  • UserVote: 일대다 (사용자는 여러 질문에 투표 가능)
  • UserComment: 일대다 (사용자는 여러 댓글 작성 가능)

기술 스택

  • 프레임워크: Spring Boot 3.5.6 (Web, JPA, Validation, Thymeleaf, DevTools)
  • 데이터베이스: MySQL (운영), H2 (테스트)
  • ORM: Spring Data JPA with Hibernate
  • 문서화: SpringDoc OpenAPI 2.8.6
  • 빌드 도구: Gradle with Java 21
  • 유틸리티: Lombok