나올만한 기술면접질문 그리고 그# 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 buildcom.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 응답은 ApiResponse<T> 래퍼 사용:
{
"timestamp":"2025-11-02T08:00:00",
"status":200,
"code":"SUCCESS",
"message":"요청이 성공적으로 처리되었습니다.",
"data":{...}
}에러 응답도 동일한 구조로 적절한 상태 코드와 ErrorCode enum 사용
API 응답의 JSON 필드명은 camelCase를 사용합니다.
엔티티와 DTO 간 변환 책임을 분리하기 위해 Mapper 계층을 사용합니다.
- 간단한 로직의 경우 필수는 아니지만, 가급적 Mapper를 통한 변환을 권장
- 변환 로직이 복잡하거나 여러 곳에서 재사용되는 경우 필수
domain/{domain}/mapper/패키지에 위치
- BusinessException: 비즈니스 로직 실패 시 사용하는 커스텀 예외,
ErrorCode와 매핑 - GlobalExceptionHandler:
@RestControllerAdvice로 검증, 접근 권한, 시스템 에러 등을 중앙 처리 - 일관된 에러 응답을 위해
ErrorCodeenum 사용
- 실행 시
/swagger-ui.html에서 확인 가능 @ApiErrorExample,@ApiErrorExamples어노테이션으로 에러 문서화ErrorCodeenum 값으로부터 에러 응답 예제 자동 생성
데이터베이스 연결에 필요 (application.yml 참고):
DB_URL: MySQL JDBC URLDB_USERNAME: 데이터베이스 사용자명DB_PASSWORD: 데이터베이스 비밀번호SERVER_PORT: 애플리케이션 포트 (기본값: 8080)
기본 프로파일은 dev (application.yml에 설정)
- User ↔ Device: 일대다 (사용자는 여러 디바이스 소유 가능)
- Question ↔ VoteStats: 일대일 (각 질문은 투표 통계 보유)
- Question ↔ Vote: 일대다 (질문에 여러 투표)
- Question ↔ Comment: 일대다 (질문에 여러 댓글)
- User ↔ Vote: 일대다 (사용자는 여러 질문에 투표 가능)
- User ↔ Comment: 일대다 (사용자는 여러 댓글 작성 가능)
- 프레임워크: 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