

목 차
1. Java 기본기 : 문법과 객체지향 사고 정립.
2. Java 중급 : 함수형 사고와 코드 구조화.
3. Spring Core 이해 : Ioc, DI, AOP.
4. Spring Boot 입문부터 REST API 실전 구축까지 .
5. 데이터 계층 : Spring Data JPA + 계층 설계 ( 세분화 확장 ).
6. 인증/보안/캐싱 : Spring Security + JWT + Redis.
7. 고급 API 아키텍처 및 운영 전략.

Java 개발 환경 구성 (JDK, IntelliJ, Gradle vs Maven 이해)
기본 자료형, 참조형
연산자, 조건문, 반복문
메서드 정의와 호출, 매개변수 전달 방식 (값 vs 참조)
배열과 컬렉션 기초

클래스 정의와 객체 생성 흐름
this 키워드, static, final
패키지 구조와 접근 제어자
생성자 오버로딩과 초기화

캡슐화 예제: DTO, VO로 정보 은닉
상속과 추상 클래스, super()
다형성: 인터페이스, instanceof, 업캐스팅/다운캐스팅
추상화와 설계 원칙

Java Collection Framework (List, Map, Set, Iterator)
java.util, java.time 패키지 활용법
Optional 패턴 (null-safe 설계 습관)

람다식 기초 문법
함수형 인터페이스 (Consumer, Supplier, Predicate, Function)
Stream API: map/filter/reduce
스트림의 동작 방식 (중간 연산 vs 최종 연산)

Checked vs Unchecked 예외
try-catch-finally 구조
커스텀 예외 설계 (extends RuntimeException)
예외 전달과 wrapping

Java coding convention
단위 테스트 기초 (JUnit5)
Mockito를 활용한 Mocking
디버깅과 로깅 (SLF4J + Logback)

IoC / DI 개념 및 @Component 기반 의존성 주입
Bean 생명주기 및 Scope
의존성 주입 방식 비교 (생성자 vs 필드 vs Setter)
ApplicationContext와 BeanFactory

AOP 개념과 용도
핵심 어노테이션: @Aspect, @Around, @Before, @After
로깅, 트랜잭션 처리, 인증 처리에서의 AOP 활용

MVC 구조의 역할 분리 (Controller, Service, Repository)
Layered Architecture 기반 설계
DTO, Entity, Mapper 역할 분리

Spring Boot Starter 의존성 구조 이해 (spring-boot-starter-*)
Gradle vs Maven 실무 사용법 및 멀티모듈 설계 힌트
application.yml vs application.properties 설정 방식 비교
환경 프로파일 (@Profile, application-dev.yml)
커스텀 설정 객체 바인딩: @ConfigurationProperties 실습

HTTP 메서드 (GET, POST, PUT, DELETE)의 의도적 사용
REST 리소스 네이밍 규칙 (/posts/{id}/comments)
상태 코드 (201, 204, 400, 401, 403, 404, 409, 500) 정확한 사용
@RestController vs @Controller, @ResponseBody 자동 처리

Domain 객체 vs DTO 완전 분리 이유와 실무 적용
@RequestBody, @RequestParam, @PathVariable 정리
DTO 계층화 전략 (입력용, 출력용, 내부 전용 분리)
@Valid, @Validated, @NotBlank, @Size, @Pattern 등 제약 조건
커스텀 Validator 생성 및 글로벌 적용

@ControllerAdvice와 @ExceptionHandler 분리
커스텀 Exception 구조화 (BusinessException 기반)
에러 응답 통일 포맷 (에러 코드 enum, 메시지 국제화)
BindingResult, MethodArgumentNotValidException 활용

ResponseEntity vs 커스텀 Wrapper DTO (ex: ApiResponse)
상태 코드 + 메시지 + 데이터 포맷 구성 전략
Swagger / Spring REST Docs를 통한 자동 문서화
테스트 문서 기반 API 스펙 계약 주도 개발

식별자 전략 (Auto Increment vs UUID)
Enum 타입 매핑: @Enumerated(EnumType.STRING)
불변 객체 설계: @Embeddable 사용
Soft Delete vs Hard Delete 처리 전략
시간/작성자 자동 처리 (BaseEntity + @CreatedDate 등)

단방향, 양방향 연관관계 설계 및 순환참조 이슈
연관관계 설정 기본 규칙: FK 관리 주체는 반드시 주인
JoinColumn의 정확한 위치 결정
FetchType.LAZY vs EAGER (실무 기준 LAZY 기본)
복잡한 관계 예시: 다대다 중간 테이블, @JoinTable 사용법

JpaRepository, CrudRepository 커스텀 쿼리 작성법
@Query와 JPQL로 동적 조건 처리
Projection (interface/class 기반)
Specification 패턴 vs QueryDSL

N+1 문제 및 Fetch Join 전략
DTO Projection + 쿼리 최소화
쿼리 튜닝: log level, Hibernate SQL 로그 확인
영속성 컨텍스트 주의사항 (변경 감지, flush 타이밍)
Dirty Checking vs Merge

@Transactional의 전파 방식 (REQUIRED, REQUIRES_NEW)
격리 수준 (READ_COMMITTED, REPEATABLE_READ)
낙관적 락 vs 비관적 락
실제 동시성 테스트 (멀티스레드 상황 재현)

5.6.1 Repository Layer의 개념 및 책임
5.6.2 Spring Data JPA의 기본 구조 (JpaRepository, CrudRepository)
5.6.3 메서드 이름 기반 쿼리 생성 전략
5.6.4 @Query와 JPQL 사용법
5.6.5 복잡한 검색 조건 처리 (QueryDSL, Specification 소개)
5.6.6 커스텀 Repository 분리 설계 (Custom, Impl 패턴)
5.6.7 Repository 단위 테스트와 모킹 전략
5.6.8 실무 Repository 설계 Best Practice

5.7.1 Service Layer의 개념 및 책임
5.7.2 비즈니스 로직 구성 원칙 (도메인 중심 설계 관점 포함)
5.7.3 @Transactional 사용 원칙 (readOnly vs read-write)
5.7.4 도메인 모델 조합 및 외부 API 호출 위치 설계
5.7.5 서비스 메서드 설계 전략 (단일 책임, 적절한 메서드 분할)
5.7.6 서비스 간 의존 관계 및 헥사고날 아키텍처 관점
5.7.7 서비스 계층의 단위 테스트 전략
5.7.8 실무 Service 설계 Best Practice

5.8.1 DTO의 개념 및 목적 (Entity 직접 노출 금지)
5.8.2 요청 DTO / 응답 DTO의 분리 설계
5.8.3 @Valid, @NotNull 등 유효성 검증 적용
5.8.4 Entity ↔ DTO 변환 전략 (수동/자동 변환, ModelMapper, MapStruct)
5.8.5 계층 간 데이터 이동에서 DTO의 역할
5.8.6 DTO 네이밍 전략 및 API 명세 중심 설계
5.8.7 DTO 중심 API 설계 Best Practice
5.8.8 DTO 테스트 및 검증 전략

5.9.1 Controller의 책임과 역할
5.9.2 @RestController vs @Controller 차이점
5.9.3 요청/응답 처리 흐름 (@RequestBody, @PathVariable, @ResponseEntity 등)
5.9.4 RESTful API 설계 원칙 및 URI 설계 전략
5.9.5 예외 처리 전략 (@ExceptionHandler, @RestControllerAdvice)
5.9.6 응답 표준화 (ApiResponse 패턴 설계)
5.9.7 Swagger, Spring REST Docs 등 문서화 전략
5.9.8 Controller 단위 테스트 (MockMvc 등)

Security Filter Chain 흐름
인증(Authentication) vs 인가(Authorization)
사용자 인증: UserDetailsService + AuthenticationProvider
기본 로그인 폼 인증 흐름 분석
CSRF, CORS 정책 설정

JWT 구조: Header, Payload, Signature
Access Token / Refresh Token 설계 패턴
로그인 → 토큰 발급 → 헤더 인증 흐름 전반 구현
Spring Security Filter 기반 JWT 인증 처리
사용자 인증 정보 (AuthenticationPrincipal 커스터마이징)

OAuth2 개념 및 흐름
Google, Naver, Kakao OAuth 연동
OAuth 인증 후 JWT 발급 연계 처리
Security OAuth2 Client 설정

Redis 기본 개념, 자료구조
@Cacheable, @CacheEvict, @CachePut 적용 실습
TTL 설정, 캐시 무효화 전략
세션 클러스터링: Redis-backed HttpSession
캐시 Key 전략 (도메인 기반 Prefix 설계)

페이징 처리: Page, Slice, Cursor 기반 페이징
DTO Projection vs Entity 직접 노출 성능 차이
대용량 응답 시 압축(GZIP), Range 요청 처리.
@Async, ThreadPool 설정
Domain Event → Listener 구조 설계 (Spring Events)
Kafka 연동: Producer/Consumer 설정
RabbitMQ, Kafka 선택 기준 및 메시지 신뢰성 이슈

단위 테스트: Mockito, WebMvcTest
통합 테스트: @SpringBootTest, TestRestTemplate
컨테이너 기반 테스트: Testcontainers 활용
로깅: MDC, 로그 추적 ID, 로그 레벨 전략
SonarQube로 정적 분석 적용

Dockerfile 작성법, 멀티 스테이지 빌드
docker-compose.yml로 DB, Redis 등 통합 구성
Spring Boot → NGINX + Reverse Proxy 구성
Jenkins / GitHub Actions로 CI/CD 구성
무중단 배포 전략: Blue-Green, Rolling Update
모니터링 도구: Actuator, Prometheus, Grafana 연동