Blog
Anki
다음 단계

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을 고려해보셨나요?"