Database
데이터베이스 실무 질문들을 난이도별로 정리했습니다.
1. 성능 최적화 & 튜닝
기본:
- 인덱스를 추가했는데 오히려 성능이 떨어졌습니다. 왜 그럴까요?
- EXPLAIN 결과에서 type이 ALL로 나오는데 어떻게 개선할 수 있나요?
- 쿼리 속도가 느린데 인덱스 문제인지 어떻게 판단하나요?
중급:
- Covering Index와 일반 Index의 실제 성능 차이는 얼마나 될까요?
- JOIN 순서가 성능에 어떤 영향을 미치나요? 옵티마이저가 항상 최적의 순서를 선택하나요?
- 복합 인덱스에서 컬럼 순서를 어떻게 결정해야 하나요?
- WHERE 절에 함수를 사용하면 왜 인덱스를 못 타나요? 해결 방법은?
- 페이징 쿼리에서 OFFSET이 크면 느려지는데, 어떻게 개선할 수 있나요?
고급:
- 10억 건의 데이터에서 GROUP BY 집계 쿼리가 너무 느립니다. 어떻게 최적화하시겠습니까?
- Index Skip Scan은 언제 발생하고, 어떻게 활용할 수 있나요?
- Cardinality가 낮은 컬럼에 인덱스를 걸어야 할 때가 있나요?
- Buffer Pool 크기는 어떻게 설정해야 최적일까요?
- 통계 정보가 오래되어 실행 계획이 잘못 수립되는 경우 어떻게 대응하나요?
2. 트랜잭션 & 동시성 제어
기본:
- READ COMMITTED와 REPEATABLE READ의 실제 차이를 경험한 적이 있나요?
- 트랜잭션이 길어지면 어떤 문제가 발생하나요?
- Deadlock이 발생했을 때 어떻게 해결하셨나요?
중급:
- 재고 차감 로직에서 동시성 문제를 어떻게 해결하셨나요?
- SELECT FOR UPDATE와 비관적 락, 낙관적 락 중 어떤 것을 선택하셨고 왜 그랬나요?
- Lost Update 문제를 실제로 경험하신 적 있나요? 어떻게 해결하셨나요?
- 분산 환경에서 DB 락만으로 동시성을 제어하기 어려운 이유는?
- SERIALIZABLE로 설정하면 성능이 얼마나 떨어지나요?
고급:
- Phantom Read를 방지하기 위해 Gap Lock을 사용했는데, Deadlock이 자주 발생합니다. 어떻게 해결하나요?
- MVCC 환경에서 Long Transaction이 Undo Log를 계속 쌓이게 만드는 문제를 어떻게 해결하나요?
- Write Skew 문제를 경험하신 적 있나요? 어떻게 감지하고 해결하나요?
- 2PL과 MVCC의 실제 성능 차이를 측정해보신 적 있나요?
3. 복제 & 고가용성
기본:
- Master-Slave 구조에서 Replication Lag이 발생하는 이유는?
- Read Replica에 쿼리를 보냈는데 방금 INSERT한 데이터가 안 보입니다. 왜 그럴까요?
중급:
- Replication Lag을 모니터링하는 방법은? 얼마나 지연되면 문제인가요?
- Master가 죽었을 때 Failover 과정에서 데이터 유실을 방지하려면?
- 비동기 복제와 동기 복제의 장단점을 실제 경험에 비추어 설명해주세요
- Active-Active 구조의 문제점은 무엇인가요?
고급:
- Multi-Master Replication에서 충돌을 어떻게 해결하나요?
- Statement-based vs Row-based vs Mixed Replication의 차이와 선택 기준은?
- Split Brain 상황을 어떻게 감지하고 복구하나요?
- Binlog를 이용한 CDC(Change Data Capture)를 구현해보신 적 있나요?
4. 샤딩 & 파티셔닝
기본:
- 수평 파티셔닝과 샤딩의 차이는?
- 파티셔닝했을 때 인덱스는 어떻게 되나요?
중급:
- Range vs Hash vs List 파티셔닝 중 어떤 것을 선택하셨고, 그 이유는?
- 샤딩 키를 잘못 선택하면 어떤 문제가 생기나요?
- 여러 샤드에 걸친 JOIN이나 GROUP BY는 어떻게 처리하나요?
- 샤드 리밸런싱은 어떻게 하나요? 서비스 중단 없이 가능한가요?
고급:
- Consistent Hashing을 실제로 구현해보신 적 있나요?
- 샤드가 불균형하게 커졌을 때(Hot Shard) 어떻게 해결하나요?
- 글로벌 유니크 ID를 어떻게 생성하나요? (Snowflake, UUID, etc.)
- 샤딩된 DB에서 트랜잭션 일관성을 어떻게 보장하나요?
5. 스키마 설계 & 모델링
기본:
- 1:N 관계와 N:M 관계를 어떻게 테이블로 표현하나요?
- NULL을 허용해야 할 때와 안 할 때의 기준은?
중급:
- JSON 컬럼을 사용한 경험이 있나요? 언제 사용하고 언제 사용하지 말아야 하나요?
- 소프트 삭제(deleted_at)와 하드 삭제 중 어떤 것을 선택하나요?
- 이력 관리(History) 테이블은 어떻게 설계하나요?
- Polymorphic Association을 DB에서 어떻게 구현하나요?
- ENUM vs VARCHAR vs 별도 테이블, 어떤 것을 선택하나요?
고급:
- Time Series 데이터는 어떻게 설계하고 최적화하나요?
- 계층 구조(Tree) 데이터를 표현하는 여러 방법(Adjacency List, Nested Set, Path Enumeration)의 장단점은?
- 정규화와 비정규화의 선택 기준은? 실제로 비정규화를 선택한 사례가 있나요?
- Event Sourcing 패턴을 DB에 적용해보신 적 있나요?
6. 백업 & 복구
기본:
- 논리 백업과 물리 백업의 차이는?
- mysqldump로 백업 중에도 서비스가 가능한가요?
중급:
- Point-in-Time Recovery(PITR)를 어떻게 구현하나요?
- 백업 시간을 단축하는 방법은?
- 백업 검증은 어떻게 하나요?
- 증분 백업의 장단점은?
고급:
- 100TB 데이터베이스의 백업 전략은?
- Binlog를 이용한 복구 시 주의사항은?
- 크로스 리전 백업 전략은?
7. 캐싱 전략
기본:
- 어떤 데이터를 캐싱하고 어떤 데이터를 캐싱하지 않나요?
- Cache Invalidation은 어떻게 처리하나요?
중급:
- Cache Aside vs Write Through vs Write Behind 중 어떤 것을 사용하나요?
- Cache Stampede 문제를 경험하신 적 있나요?
- DB와 Redis의 데이터 불일치를 어떻게 방지하나요?
- TTL을 어떻게 설정하나요?
고급:
- Look-aside Cache에서 발생할 수 있는 Race Condition은?
- 분산 캐시 환경에서 일관성을 어떻게 보장하나요?
- Cache Warming 전략은?
8. 모니터링 & 장애 대응
기본:
- 어떤 메트릭을 모니터링하나요?
- Slow Query를 어떻게 찾고 개선하나요?
중급:
- Connection Pool 크기는 어떻게 설정하나요?
- DB CPU가 100%일 때 원인을 찾는 방법은?
- Table Lock이 걸려서 서비스 장애가 발생했습니다. 어떻게 대응하나요?
- DB 디스크가 꽉 찼을 때 긴급 대응 방법은?
고급:
- InnoDB Buffer Pool의 Hit Rate가 낮을 때 원인과 해결책은?
- 갑자기 Connection이 고갈되었을 때 원인을 찾는 방법은?
- Replication Lag이 계속 늘어나는 상황에서 어떻게 대응하나요?
- Query of Death가 발생했을 때 어떻게 빠르게 Kill하나요?
9. 마이그레이션 & 스키마 변경
기본:
- ALTER TABLE 실행 중에 서비스 중단이 발생하나요?
- 테이블명을 변경하려면 어떻게 해야 하나요?
중급:
- Online DDL의 동작 원리는?
- NOT NULL 제약조건을 추가할 때 주의사항은?
- 대용량 테이블에 컬럼을 추가하는 방법은?
- pt-online-schema-change를 사용해보신 적 있나요?
고급:
- Zero Downtime Migration을 어떻게 달성하나요?
- 샤딩된 DB를 리샤딩하는 전략은?
- DB를 PostgreSQL에서 MySQL로(또는 반대로) 마이그레이션한 경험이 있나요?
10. 보안
기본:
- SQL Injection을 방지하는 방법은?
- DB 계정 권한은 어떻게 관리하나요?
중급:
- 개인정보를 암호화해서 저장해야 할 때 어떻게 구현하나요?
- 민감한 데이터의 접근 로그는 어떻게 남기나요?
- DB Audit은 어떻게 설정하나요?
고급:
- Column-level Encryption vs Transparent Data Encryption의 차이는?
- 데이터 마스킹 전략은?
- Credential Rotation은 어떻게 구현하나요?
11. 실제 장애 사례 기반 질문
- "트랜잭션에서 외부 API를 호출했더니 DB Connection이 고갈되었습니다. 원인과 해결책은?"
- "배치 작업이 실행되는 새벽에만 Deadlock이 발생합니다. 어떻게 디버깅하나요?"
- "갑자기 INSERT 성능이 10배 느려졌습니다. 가능한 원인들은?"
- "AUTO_INCREMENT가 고갈될 것 같습니다. 어떻게 대응하나요?"
- "FK 제약조건 때문에 DELETE가 너무 느립니다. 어떻게 해결하나요?"
Redis
Redis 관련 실무 면접 질문들을 난이도별로 정리했습니다.
1. 기본 개념 & 아키텍처
기본:
- Redis가 빠른 이유는 무엇인가요?
- Redis는 Single Thread인데 어떻게 동시에 여러 요청을 처리하나요?
- Redis와 Memcached의 차이는?
- Redis의 메모리가 부족하면 어떻게 되나요?
중급:
- Redis 6.0부터 Multi-threaded I/O가 도입되었는데, 이게 정확히 무엇인가요?
- Event Loop 방식으로 동작한다는데, 구체적으로 어떻게 동작하나요?
- Redis의 메모리 할당 전략(jemalloc)에 대해 설명해주세요
- Copy-on-Write는 어떻게 동작하나요?
고급:
- Redis 7.0의 Functions와 Lua Script의 차이는?
- Redis의 Lazy Free는 언제 사용되고 어떻게 동작하나요?
- Reactor Pattern이 Redis에서 어떻게 구현되어 있나요?
- Redis의 Object Encoding 전략에 대해 설명해주세요 (int, embstr, raw, ziplist 등)
2. 데이터 타입 & 활용
기본:
- String, List, Set, Sorted Set, Hash의 사용 사례를 각각 설명해주세요
- Sorted Set은 어떻게 구현되어 있나요?
- List를 Queue로 사용할 때 LPUSH/RPOP vs RPUSH/LPOP 중 어떤 것을 선택하나요?
중급:
- HyperLogLog는 언제 사용하고, 정확도는 어느 정도인가요?
- Bitmap으로 DAU를 계산하는 방법을 구현해보세요
- Geo 자료구조로 반경 검색을 구현한 경험이 있나요?
- Stream을 사용한 경험이 있나요? Kafka와의 차이는?
- Bloom Filter를 Redis에서 사용해보신 적 있나요?
고급:
- Sorted Set의 내부 구조(Skiplist + Hash Table)를 설명하고, 왜 이런 구조를 선택했을까요?
- Ziplist의 장단점과 언제 다른 인코딩으로 전환되나요?
- Listpack이 Ziplist를 대체하는 이유는?
- Redis Stack의 JSON, Search, Time Series 모듈을 사용해보신 적 있나요?
3. 캐싱 전략
기본:
- Cache Aside 패턴을 설명하고, 장단점을 말해주세요
- TTL은 어떻게 설정하나요?
- Cache Miss가 발생하면 어떻게 처리하나요?
중급:
- Cache Stampede 문제를 어떻게 해결하나요?
- Write Behind vs Write Through 중 어떤 것을 선택하고 왜 그랬나요?
- Hot Key 문제를 경험하신 적 있나요? 어떻게 해결하나요?
- Cache Warming은 어떻게 구현하나요?
- Stale Cache 문제를 어떻게 방지하나요?
고급:
- Look-aside Cache에서 발생하는 Race Condition을 설명하고 해결책을 제시해주세요
- Cache와 DB의 정합성을 보장하는 여러 패턴을 설명해주세요
- Probabilistic Early Expiration을 구현해보신 적 있나요?
- Refresh-ahead 전략은 언제 사용하나요?
- 2-tier Cache 구조(Local Cache + Redis)를 사용해보신 적 있나요?
4. 분산 락 (Distributed Lock)
기본:
- Redis로 분산 락을 구현하는 방법을 설명해주세요
- SETNX의 문제점은 무엇인가요?
- SET NX EX를 사용하는 이유는?
중급:
- Redlock 알고리즘을 설명해주세요
- Redisson을 사용한 경험이 있나요? 내부적으로 어떻게 동작하나요?
- Lock의 timeout은 어떻게 설정하나요?
- Spin Lock vs Sleep 방식의 차이는?
- 락 갱신(Lock Renewal)은 어떻게 구현하나요?
고급:
- Redlock의 문제점과 Martin Kleppmann의 비판에 대해 아시나요?
- Fencing Token을 사용한 경험이 있나요?
- Redis Cluster 환경에서 분산 락의 안정성 문제는?
- Watch를 이용한 Optimistic Lock을 구현해보신 적 있나요?
- Lua Script로 원자성을 보장하는 락을 구현한 경험이 있나요?
5. 영속성 (Persistence)
기본:
- RDB와 AOF의 차이는?
- Redis를 캐시가 아닌 데이터베이스로 사용할 수 있나요?
중급:
- RDB snapshot 생성 시 서비스에 미치는 영향은?
- AOF Rewrite는 언제 발생하고 어떻게 동작하나요?
- fsync 정책(always, everysec, no)의 차이는?
- RDB와 AOF를 동시에 사용하면 어떻게 되나요?
고급:
- Fork() 시 메모리 사용량이 2배로 증가하나요?
- AOF와 RDB의 복구 우선순위와 이유는?
- Redis 7.0의 Multi-part AOF의 장점은?
- Copy-on-Write 과정에서 메모리 단편화 문제를 어떻게 해결하나요?
- Diskless Replication은 언제 사용하나요?
6. 복제 (Replication)
기본:
- Master-Slave 복제 구조를 설명해주세요
- Replication Lag이 발생하는 이유는?
중급:
- Partial Resync vs Full Resync의 차이는?
- Replication Buffer와 Backlog의 역할은?
- Slave가 Master로 승격되는 과정을 설명해주세요
- Read Replica의 개수를 늘리면 어떤 문제가 생길 수 있나요?
고급:
- PSYNC2의 개선사항은 무엇인가요?
- Replication Offset을 이용한 데이터 일관성 검증 방법은?
- Master가 죽었을 때 데이터 유실을 최소화하는 방법은?
- Diskless Replication의 동작 원리와 장단점은?
7. 고가용성 (Sentinel)
기본:
- Sentinel의 역할은 무엇인가요?
- Sentinel은 몇 개를 띄워야 하나요?
중급:
- Quorum과 Majority의 차이를 설명해주세요
- Sentinel이 Master 장애를 감지하는 과정을 상세히 설명해주세요
- SDOWN vs ODOWN의 차이는?
- Failover 과정에서 데이터 유실이 발생할 수 있나요?
고급:
- Sentinel의 Gossip Protocol에 대해 설명해주세요
- Split Brain 상황을 어떻게 방지하나요?
- Sentinel 자체의 단일 장애점 문제는?
- min-slaves-to-write 설정의 의미와 사용 시나리오는?
8. 클러스터 (Redis Cluster)
기본:
- Redis Cluster가 필요한 이유는?
- Hash Slot은 무엇이고 왜 16384개인가요?
중급:
- Redis Cluster는 어떻게 샤딩하나요?
- Resharding은 어떻게 진행되나요?
- MOVED vs ASK 리다이렉션의 차이는?
- Multi-key 연산이 왜 제한되나요? 해결 방법은?
고급:
- Gossip Protocol로 클러스터 상태를 동기화하는 과정을 설명해주세요
- Hash Tag를 사용한 경험이 있나요?
- 클러스터 파티션(Split Brain) 상황에서 어떻게 동작하나요?
- Replica Migration은 언제 발생하나요?
- 클러스터 환경에서 Lua Script 사용 시 제약사항은?
9. 성능 최적화
기본:
- Pipeline을 사용하는 이유는?
- KEYS 명령어를 프로덕션에서 사용하면 안 되는 이유는?
중급:
- Pipeline vs Transaction의 차이는?
- Big Key 문제를 어떻게 발견하고 해결하나요?
- SCAN의 동작 원리와 사용법을 설명해주세요
- Batch 작업 시 성능 최적화 방법은?
- Slowlog는 어떻게 활용하나요?
고급:
- O(N) 명령어들(KEYS, SMEMBERS, HGETALL 등)의 대안은?
- 메모리 단편화 문제를 어떻게 해결하나요?
- Active Defragmentation은 언제 사용하나요?
- Client-side Caching을 구현해보신 적 있나요?
- Redis의 Eviction Policy 선택 기준은? (LRU, LFU, Random 등)
10. 트랜잭션 & 원자성
기본:
- MULTI/EXEC의 동작 원리를 설명해주세요
- Redis의 트랜잭션은 ACID를 보장하나요?
중급:
- WATCH를 사용한 Optimistic Lock을 구현해보세요
- MULTI/EXEC 내에서 에러가 발생하면 어떻게 되나요?
- Lua Script vs MULTI/EXEC의 차이는?
고급:
- Lua Script로 복잡한 원자적 연산을 구현한 경험이 있나요?
- EVAL vs EVALSHA의 차이와 성능 최적화 방법은?
- Lua Script의 실행 시간 제한과 대응 방법은?
- Redis Transaction이 Rollback을 지원하지 않는 이유는?
11. 모니터링 & 장애 대응
기본:
- Redis의 주요 모니터링 메트릭은?
- INFO 명령어로 어떤 정보를 확인할 수 있나요?
중급:
- 메모리 사용률이 급증할 때 원인을 찾는 방법은?
- Connection이 계속 증가할 때 어떻게 대응하나요?
- Latency가 갑자기 증가했을 때 디버깅 방법은?
- Redis의 메모리 사용량을 분석하는 도구는?
고급:
- Intrinsic Latency vs Network Latency를 어떻게 구분하나요?
- Fork 시 발생하는 Latency Spike를 어떻게 최소화하나요?
- CLIENT LIST로 문제 있는 클라이언트를 찾는 방법은?
- Redis의 Blocked Clients 문제는 어떻게 해결하나요?
12. Rate Limiting
기본:
- Redis로 Rate Limiter를 구현하는 방법은?
중급:
- Fixed Window vs Sliding Window의 차이는?
- Token Bucket 알고리즘을 Redis로 구현해보세요
- Leaky Bucket vs Token Bucket의 차이는?
고급:
- Sliding Window Log vs Sliding Window Counter의 성능 차이는?
- 분산 환경에서 정확한 Rate Limiting을 구현하는 방법은?
- Redis Cell 모듈을 사용해보신 적 있나요?
- Rate Limiter의 메모리 최적화 방법은?
13. 세션 관리
기본:
- Redis를 세션 스토어로 사용하는 이유는?
중급:
- Session Clustering 시 고려사항은?
- Session TTL을 어떻게 설정하나요?
- Sticky Session vs Session Replication의 차이는?
고급:
- Multi-region 환경에서 세션 동기화 전략은?
- Session Fixation 공격을 어떻게 방지하나요?
- Redis와 JWT 중 어떤 것을 선택하고 왜 그랬나요?
14. 실시간 기능 구현
기본:
- Pub/Sub의 동작 원리를 설명해주세요
- Pub/Sub의 한계는 무엇인가요?
중급:
- Redis Stream vs Pub/Sub의 차이는?
- Consumer Group은 어떻게 동작하나요?
- Leaderboard를 Sorted Set으로 구현한 경험이 있나요?
고급:
- Pub/Sub에서 메시지 유실 문제를 어떻게 해결하나요?
- Stream의 XREAD vs XREADGROUP의 차이는?
- Real-time Analytics를 Redis로 구현한 사례가 있나요?
15. 보안
기본:
- Redis의 기본 보안 설정은?
- requirepass는 충분히 안전한가요?
중급:
- ACL을 설정해보신 적 있나요?
- RENAME-COMMAND를 사용하는 이유는?
- Protected Mode는 무엇인가요?
고급:
- Redis에 Encryption at Rest를 적용하는 방법은?
- TLS/SSL을 설정해보신 적 있나요?
- Command Filtering 전략은?
16. 실제 장애 사례 기반
- "Lua Script가 무한 루프에 빠져서 Redis가 멈췄습니다. 어떻게 대응하나요?"
- "Fork 실패로 RDB snapshot을 만들 수 없습니다. 원인과 해결책은?"
- "갑자기 모든 Redis 요청이 timeout 됩니다. 어떻게 디버깅하나요?"
- "메모리는 충분한데 OOM이 발생합니다. 가능한 원인들은?"
- "Replication Lag이 계속 증가합니다. 어떻게 해결하나요?"
- "특정 시간에만 Redis 성능이 급격히 떨어집니다. 원인을 찾아보세요"
- "Master와 Slave의 데이터가 불일치합니다. 어떻게 감지하고 복구하나요?"
17. 아키텍처 설계
- "월 1억 명이 사용하는 서비스의 Redis 아키텍처를 설계해주세요"
- "Multi-region 환경에서 Redis 구성 전략은?"
- "Redis를 Primary DB로 사용할 수 있나요? 고려사항은?"
- "Cache + Message Queue + Session Store를 모두 Redis로? 분리해야 하나요?"
Java & Spring
Java Spring 관련 실무 면접 질문들을 체계적으로 정리했습니다.
1. Spring Core (IoC, DI, AOP)
기본:
- @Component, @Service, @Repository의 차이는 단순히 의미적인 차이인가요?
- 순환 참조가 발생했을 때 어떻게 해결하나요?
- @Autowired vs 생성자 주입, 실무에서 어떤 것을 선택하나요?
- ApplicationContext와 BeanFactory의 차이는?
중급:
- Bean의 생명주기를 설명하고, 각 단계에서 할 수 있는 작업은?
- @PostConstruct vs InitializingBean vs @Bean(initMethod), 언제 무엇을 사용하나요?
- 같은 타입의 Bean이 여러 개일 때 어떻게 주입받나요?
- @Primary vs @Qualifier의 선택 기준은?
- Prototype Bean을 Singleton Bean에 주입하면 어떻게 되나요?
- AOP의 Proxy 방식(JDK Dynamic Proxy vs CGLIB)의 차이와 성능 영향은?
- @Transactional이 private 메서드에서 동작하지 않는 이유는?
고급:
- BeanPostProcessor를 직접 구현해본 적 있나요? 어떤 경우에 사용하나요?
- @Async의 내부 동작 원리와 Thread Pool 설정 전략은?
- ApplicationContext를 여러 개 계층적으로 구성한 경험이 있나요?
- Lazy Initialization의 장단점과 실무 적용 사례는?
- AOP에서 this vs target의 차이와 self-invocation 문제는?
- Around Advice에서 ProceedingJoinPoint를 proceed() 하지 않으면?
- AspectJ Weaving (Compile-time, Load-time) vs Spring AOP의 선택 기준은?
2. Spring Boot
기본:
- Spring과 Spring Boot의 차이는?
- Auto Configuration은 어떻게 동작하나요?
- application.yml vs application.properties, 어떤 것을 선택하나요?
중급:
- @SpringBootApplication이 하는 일을 상세히 설명해주세요
- Profile을 어떻게 관리하나요? (dev, staging, prod)
- 외부 설정을 주입받는 여러 방법(@Value, @ConfigurationProperties)의 차이는?
- Spring Boot Actuator로 어떤 메트릭을 모니터링하나요?
- Custom Auto Configuration을 만들어본 적 있나요?
- Conditional Annotation들(@ConditionalOnProperty 등)을 활용한 사례는?
고급:
- Spring Boot의 Graceful Shutdown은 어떻게 동작하나요?
- Embedded Tomcat vs External Tomcat, 언제 무엇을 선택하나요?
- Spring Boot 애플리케이션의 시작 시간을 최적화하는 방법은?
- Layered JAR는 무엇이고 왜 사용하나요?
- Spring Native(GraalVM)를 고려해본 적 있나요? 장단점은?
- FailureAnalyzer를 커스터마이징해본 경험이 있나요?
3. Spring MVC / WebFlux
기본:
- DispatcherServlet의 동작 흐름을 설명해주세요
- @RestController vs @Controller의 차이는?
- @RequestBody vs @ModelAttribute의 차이는?
- ResponseEntity를 사용하는 이유는?
중급:
- Interceptor vs Filter vs AOP의 차이와 사용 시나리오는?
- HandlerMethodArgumentResolver를 직접 구현해본 적 있나요?
- MessageConverter는 어떻게 동작하나요? (Jackson, Gson 등)
- Content Negotiation은 어떻게 처리되나요?
- Validation을 어디서 수행하나요? (@Valid, @Validated 차이)
- CORS는 어떻게 설정하고, Preflight는 언제 발생하나요?
고급:
- WebFlux와 MVC를 선택하는 기준은? 실제로 WebFlux를 프로덕션에 적용해보셨나요?
- Reactive Stream의 Backpressure를 어떻게 처리하나요?
- Thread-per-request vs Event Loop, 각각의 장단점은?
- WebClient vs RestTemplate, 성능 차이는 얼마나 되나요?
- Servlet 3.0의 Async Processing을 사용해본 적 있나요?
- SSE(Server-Sent Events)를 구현한 경험이 있나요?
- WebSocket + STOMP를 사용한 실시간 통신 구현 경험은?
4. Spring Data JPA
기본:
- JPA의 영속성 컨텍스트란?
- 1차 캐시와 2차 캐시의 차이는?
- Eager Loading vs Lazy Loading, 언제 무엇을 사용하나요?
중급:
- N+1 문제를 경험하신 적 있나요? 어떻게 해결하셨나요?
- @Query vs QueryDSL vs Criteria API, 각각의 장단점은?
- @EntityGraph를 사용한 경험이 있나요?
- Dirty Checking은 어떻게 동작하나요?
- save() 메서드는 내부적으로 어떻게 동작하나요? (isNew() 판단)
- @ManyToOne에서 FetchType.EAGER를 사용하면 안 되는 이유는?
- Pagination 성능 최적화 방법은? (Offset vs Cursor)
고급:
- JPA에서 Batch Insert는 어떻게 최적화하나요?
- OSIV(Open Session In View)의 문제점과 해결 방법은?
- QueryDSL의 동적 쿼리 최적화 경험이 있나요?
- @Transactional(readOnly=true)가 성능에 미치는 영향은?
- 엔티티를 DTO로 변환하는 시점과 전략은? (Mapper, MapStruct 등)
- Hibernate의 2차 캐시(EhCache, Redis) 설정 경험이 있나요?
- Pessimistic Lock vs Optimistic Lock, 실무에서의 선택 기준은?
- JPA에서 Native Query를 사용할 때 주의사항은?
5. Transaction Management
기본:
- @Transactional은 어떻게 동작하나요?
- Checked Exception vs Unchecked Exception, 어떤 것이 롤백되나요?
- Propagation의 REQUIRED vs REQUIRES_NEW의 차이는?
중급:
- 트랜잭션이 너무 길면 어떤 문제가 발생하나요?
- @Transactional이 동작하지 않는 경우들을 설명해주세요
- Isolation Level을 변경해본 경험이 있나요? 언제 변경하나요?
- 분산 트랜잭션(2PC, Saga)을 구현해본 적 있나요?
- TransactionSynchronization을 사용해본 적 있나요?
고급:
- Spring의 트랜잭션 동기화는 어떻게 구현되어 있나요? (ThreadLocal)
- 트랜잭션 내에서 외부 API를 호출하면 어떤 문제가 생기나요?
- TransactionTemplate vs @Transactional, 언제 무엇을 사용하나요?
- Programmatic Transaction Management가 필요한 경우는?
- 트랜잭션 커밋 후에 특정 작업을 수행하려면? (@TransactionalEventListener)
- JTA를 사용한 경험이 있나요?
- Seata, Atomikos 같은 분산 트랜잭션 라이브러리를 사용해보셨나요?
6. Spring Security
기본:
- Spring Security의 인증/인가 흐름을 설명해주세요
- Filter Chain은 어떻게 동작하나요?
- JWT 인증을 구현한 경험이 있나요?
중급:
- SecurityContext는 어떻게 관리되나요? (ThreadLocal)
- Session vs Token 기반 인증의 장단점은?
- CSRF 방어는 어떻게 동작하나요?
- OAuth2 로그인을 구현한 경험이 있나요?
- Method Security (@PreAuthorize, @Secured)는 언제 사용하나요?
- Password Encoder 선택 기준은? (BCrypt, SCrypt, Argon2)
고급:
- JWT Refresh Token 전략을 어떻게 설계하셨나요?
- Stateless 인증 환경에서 사용자 권한 변경 시 어떻게 처리하나요?
- Spring Security에서 Custom AuthenticationProvider를 만든 이유는?
- Multi-tenancy 환경에서 Security를 어떻게 구성하나요?
- WebFlux Security와 MVC Security의 차이는?
- Rate Limiting을 Spring Security에 통합한 경험이 있나요?
7. 성능 최적화
기본:
- Spring 애플리케이션의 성능 병목을 어떻게 찾나요?
- Connection Pool 크기는 어떻게 설정하나요?
중급:
- Thread Pool 크기 설정 전략은? (Tomcat, @Async)
- Lazy Initialization이 시작 시간에 미치는 영향은?
- @Cacheable을 어떻게 활용하나요? (Redis, EhCache)
- HTTP Client의 Keep-Alive 설정 경험이 있나요?
- RestTemplate vs WebClient, 성능 테스트 결과는?
고급:
- JVM 튜닝 경험이 있나요? (Heap, GC 설정)
- Spring Boot 애플리케이션의 메모리 누수를 어떻게 찾나요?
- Reactive Programming으로 전환했을 때 성능 개선 효과는?
- Database Connection Pool 고갈 문제를 어떻게 해결하나요?
- API 응답 시간을 10배 개선한 경험을 구체적으로 설명해주세요
- Virtual Thread(Project Loom)를 고려해보셨나요?
- Netty의 EventLoop 튜닝 경험이 있나요?
8. 테스팅
기본:
- @SpringBootTest vs @WebMvcTest의 차이는?
- Mocking은 언제 사용하나요? (Mockito)
중급:
- TestContainers를 사용한 경험이 있나요?
- @DataJpaTest에서는 어떤 Bean들이 로드되나요?
- 테스트 격리(Test Isolation)는 어떻게 보장하나요?
- @Transactional이 테스트에서 어떻게 동작하나요?
- Integration Test vs Unit Test의 비율은?
고급:
- 테스트 성능을 개선하는 방법은? (Context Caching)
- Fixture를 어떻게 관리하나요?
- Contract Testing(Pact)을 도입한 경험이 있나요?
- Chaos Engineering을 Spring 환경에 적용해보셨나요?
- Embedded Redis/Kafka를 테스트에 사용한 경험은?
9. 비동기 처리 & 스케줄링
기본:
- @Async의 동작 원리는?
- @Scheduled는 어떻게 동작하나요?
중급:
- CompletableFuture를 Spring에서 어떻게 활용하나요?
- @Async 메서드에서 Exception이 발생하면?
- ShedLock을 사용한 분산 스케줄링 경험이 있나요?
- Quartz Scheduler vs Spring @Scheduled, 언제 무엇을 선택하나요?
고급:
- 대용량 배치 처리를 어떻게 최적화하나요?
- Spring Batch vs Spring Cloud Data Flow의 차이는?
- Event-Driven Architecture를 Spring으로 구현한 경험은?
- Kafka/RabbitMQ와 Spring의 통합 경험이 있나요?
- TaskExecutor의 종류와 선택 기준은?
10. API 설계 & 버전관리
기본:
- REST API 설계 원칙은?
- HTTP Status Code는 어떻게 선택하나요?
중급:
- API 버전 관리 전략은? (URI vs Header vs Query Parameter)
- API Rate Limiting은 어떻게 구현하나요?
- HATEOAS를 적용해본 적 있나요?
- OpenAPI(Swagger) 문서 자동화 경험이 있나요?
- API Gateway 패턴을 적용한 경험은?
고급:
- GraphQL vs REST, 실무에서의 선택 기준은?
- API Deprecation 전략은?
- Backward Compatibility를 어떻게 유지하나요?
- gRPC를 Spring과 통합한 경험이 있나요?
11. 에러 핸들링 & 로깅
기본:
- @ExceptionHandler vs @ControllerAdvice의 차이는?
- 표준 에러 응답 형식을 어떻게 설계하나요?
중급:
- 전역 예외 처리 전략은?
- 로깅 레벨(DEBUG, INFO, WARN, ERROR)을 어떻게 설정하나요?
- MDC(Mapped Diagnostic Context)를 활용한 경험이 있나요?
- Request ID를 추적하는 방법은?
고급:
- Circuit Breaker(Resilience4j)를 적용한 경험이 있나요?
- Structured Logging을 구현한 방법은?
- ELK Stack과 Spring Boot의 통합 경험은?
- Sentry, Datadog 같은 APM 도구 연동 경험은?
12. 클라우드 & 컨테이너
기본:
- Docker에서 Spring Boot를 실행할 때 주의사항은?
- Health Check Endpoint는 어떻게 구현하나요?
중급:
- Kubernetes에서 Spring Boot 배포 시 설정은?
- 12 Factor App 원칙을 어떻게 적용하나요?
- Config Server를 사용한 경험이 있나요?
- Service Discovery(Eureka, Consul)를 사용해보셨나요?
고급:
- Blue-Green vs Canary 배포를 어떻게 구현하나요?
- Spring Cloud Gateway vs Netflix Zuul의 차이는?
- Distributed Tracing(Zipkin, Jaeger)을 적용한 경험은?
- Multi-region 배포 시 고려사항은?
13. 멀티모듈 & 아키텍처
기본:
- 멀티모듈 프로젝트의 장점은?
- 계층형 아키텍처 vs 헥사고날 아키텍처의 차이는?
중급:
- 공통 모듈은 어떻게 설계하나요?
- Domain 모듈과 Infrastructure 모듈의 의존성 방향은?
- CQRS 패턴을 적용해본 적 있나요?
고급:
- DDD(Domain-Driven Design)를 Spring에 어떻게 적용하나요?
- Event Sourcing을 구현한 경험이 있나요?
- Modular Monolith를 고려한 적 있나요?
- Microservices로 전환한 경험과 어려움은?
14. 실제 장애 사례 기반
- "OutOfMemoryError가 발생했습니다. 어떻게 원인을 찾고 해결하나요?"
- "Connection Pool이 고갈되어 서비스가 멈췄습니다. 원인과 대응 방법은?"
- "배포 후 트랜잭션이 커밋되지 않는 현상이 발생했습니다. 어떻게 디버깅하나요?"
- "@Transactional이 동작하지 않아 데이터 정합성 문제가 발생했습니다. 가능한 원인들은?"
- "특정 API만 응답 시간이 10초 이상 걸립니다. 어떻게 원인을 찾나요?"
- "Lazy Loading으로 인한 LazyInitializationException이 발생했습니다. 해결 방법은?"
- "동시에 같은 데이터를 수정하면서 Lost Update가 발생했습니다. 어떻게 방지하나요?"
- "Batch Job이 실행 중 메모리가 부족해집니다. 어떻게 최적화하나요?"
- "Circuit이 Open 상태로 계속 유지됩니다. 어떻게 복구하나요?"
15. 코드 품질 & 설계
기본:
- SOLID 원칙을 Spring에서 어떻게 적용하나요?
- DTO vs Entity, 어떻게 변환하나요?
중급:
- Strategy Pattern을 Spring Bean으로 구현한 경험은?
- Mapper 구현 방법은? (수동 vs ModelMapper vs MapStruct)
- Validation을 어디에서 수행하나요? (Controller, Service, Domain)
- Lombok의 장단점은? 프로덕션에서 사용하나요?
고급:
- Anemic Domain Model vs Rich Domain Model의 선택 기준은?
- Value Object를 어떻게 활용하나요?
- 불변 객체를 선호하는 이유는?
- Functional Programming 스타일을 Java/Spring에 어떻게 적용하나요?
16. 성능 측정 & 프로파일링
- "Profiler(JProfiler, VisualVM, Async-profiler)를 사용한 경험이 있나요?"
- "Thread Dump를 분석해본 적 있나요? 어떤 정보를 얻을 수 있나요?"
- "Heap Dump를 분석하는 방법은?"
- "JMeter, Gatling으로 부하 테스트를 진행한 경험은?"
- "성능 테스트 결과를 어떻게 해석하고 개선하나요?"
17. 최신 기술 & 트렌드
- "Java 17/21의 새로운 기능을 프로젝트에 적용해보셨나요?"
- "Spring Boot 3.x로 마이그레이션한 경험이 있나요?"
- "Virtual Threads를 적용할 계획이 있나요?"
- "Spring AOT와 Native Image를 고려한 적 있나요?"
- "Kotlin + Spring을 고려해보셨나요?"