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로? 분리해야 하나요?"

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

Java

Java 면접에서 출제 빈도가 높은 핵심 질문들을 정리해드리겠습니다.

Java 기본 개념

  1. Java의 주요 특징과 장단점에 대해 설명해주세요.
  2. JVM(Java Virtual Machine)의 구조와 동작 원리에 대해 설명해주세요.
  3. Java 프로그램의 컴파일 및 실행 과정에 대해 설명해주세요.
  4. JDK, JRE, JVM의 차이점은 무엇인가요?

객체지향 프로그래밍(OOP)

  1. 객체지향 프로그래밍의 4대 특징(캡슐화, 상속, 추상화, 다형성)에 대해 설명해주세요.
  2. Overloading과 Overriding의 차이점은 무엇인가요?
  3. 추상 클래스(Abstract Class)와 인터페이스(Interface)의 차이점은 무엇이며, 각각 언제 사용하나요?
  4. static 메서드는 오버라이딩이 가능한가요?

메모리 관리

  1. JVM의 Runtime Data Area 구조에 대해 설명해주세요.
  2. Heap 영역과 Stack 영역의 차이점은 무엇인가요?
  3. 지역변수, 인스턴스 변수, 클래스 변수는 각각 메모리의 어느 영역에 저장되나요?
  4. Garbage Collection(GC)이란 무엇이며, 어떻게 동작하나요?
  5. Minor GC와 Major GC(Full GC)의 차이점은 무엇인가요?
  6. Stop-The-World 현상이란 무엇인가요?
  7. 대표적인 GC 알고리즘들의 종류와 특징을 설명해주세요.
  8. Mark and Sweep 알고리즘에 대해 설명해주세요.
  9. Java에서 메모리 누수(Memory Leak)가 발생할 수 있는 상황은 어떤 것들이 있나요?

자료형과 변수

  1. 기본 자료형(Primitive Type)과 참조 자료형(Reference Type)의 차이점은 무엇인가요?
  2. Wrapper Class란 무엇이며, Boxing과 Unboxing은 언제 발생하나요?
  3. String, StringBuffer, StringBuilder의 차이점은 무엇인가요?
  4. String 객체가 불변(Immutable)으로 설계된 이유는 무엇인가요?
  5. String Pool에 대해 설명해주세요.
  6. == 연산자와 equals() 메서드의 차이점은 무엇인가요?
  7. equals()를 재정의할 때 hashCode()도 함께 재정의해야 하는 이유는 무엇인가요?
  8. final 키워드가 변수, 메서드, 클래스에 사용될 때 각각 어떤 의미를 가지나요?

예외 처리

  1. Error와 Exception의 차이점은 무엇인가요?
  2. Checked Exception과 Unchecked Exception의 차이점은 무엇인가요?
  3. try-catch-finally 구문의 동작 순서를 설명해주세요.
  4. try-with-resources 구문이란 무엇이며, 어떤 장점이 있나요?

제네릭(Generic)

  1. 제네릭(Generic)이란 무엇이며, 사용하는 이유는 무엇인가요?
  2. 제네릭의 타입 소거(Type Erasure)란 무엇인가요?
  3. 와일드카드(Wildcard)의 종류와 각각의 차이점에 대해 설명해주세요.

컬렉션 프레임워크

  1. List, Set, Map 인터페이스의 주요 특징과 차이점은 무엇인가요?
  2. ArrayList와 LinkedList의 차이점과 각각의 시간 복잡도에 대해 설명해주세요.
  3. ArrayList는 내부적으로 크기를 어떻게 조절하나요?
  4. HashMap의 동작 원리와 해시 충돌 해결 방법에 대해 설명해주세요.
  5. HashMap, HashTable, ConcurrentHashMap의 차이점은 무엇인가요?
  6. HashSet이 중복을 제거하는 원리에 대해 설명해주세요.
  7. fail-fast Iterator와 fail-safe Iterator의 차이점은 무엇인가요?

람다와 스트림

  1. 람다 표현식(Lambda Expression)이란 무엇인가요?
  2. 함수형 인터페이스(Functional Interface)란 무엇인가요?
  3. Stream API의 특징과 장점에 대해 설명해주세요.
  4. Stream의 중간 연산과 최종 연산의 차이점은 무엇인가요?
  5. map()과 flatMap()의 차이점은 무엇인가요?

멀티스레딩

  1. 프로세스와 스레드의 차이점은 무엇인가요?
  2. 멀티스레딩 환경의 장단점에 대해 설명해주세요.
  3. Java에서 스레드를 생성하는 방법들에 대해 설명해주세요.
  4. Java의 동기화(Synchronized) 키워드에 대해 설명해주세요.
  5. volatile 키워드의 역할과 언제 사용해야 하는지 설명해주세요.
  6. 데드락(Deadlock)이란 무엇이며, 발생 조건 4가지는 무엇인가요?
  7. Thread-Safe한 프로그램을 작성하기 위한 방법에는 어떤 것들이 있나요?
  8. Callable과 Runnable 인터페이스의 차이점은 무엇인가요?
  9. ExecutorService 프레임워크에 대해 설명해주세요.

Java 8+ 주요 기능

  1. Java 8에서 추가된 주요 기능들에 대해 설명해주세요.
  2. Optional이란 무엇이며, 사용하는 이유는 무엇인가요?
  3. 인터페이스의 Default Method란 무엇인가요?
  4. Java 8의 Date/Time API가 기존 방식(Date, Calendar)과 다른 점은 무엇인가요?

클래스 로딩

  1. 클래스 로더(ClassLoader)의 역할은 무엇인가요?
  2. JVM의 클래스 로딩 과정(Loading, Linking, Initialization)에 대해 설명해주세요.
  3. ClassNotFoundException과 NoClassDefFoundError의 차이점은 무엇인가요?

성능과 최적화

  1. 리플렉션(Reflection)이란 무엇이며, 사용 시 주의할 점은 무엇인가요?
  2. 자바 직렬화(Serialization)란 무엇이며, 언제 사용하나요?
  3. transient 키워드의 역할은 무엇인가요?
  4. 얕은 복사와 깊은 복사의 차이점은 무엇인가요?
  5. 불변(Immutable) 객체의 장점은 무엇인가요?

기타 중요 개념

  1. JIT 컴파일러의 역할과 동작 방식에 대해 설명해주세요.
  2. 정적 바인딩과 동적 바인딩의 차이점은 무엇인가요?
  3. Marker Interface란 무엇이며, 대표적인 예시는 무엇인가요?
  4. 컴파일 타임(Compile Time)과 런타임(Runtime)의 차이점은 무엇인가요?

출처

이 질문들은 신입부터 경력까지 공통적으로 많이 나오는 질문들입니다. 각 질문에 대해 명확하게 답변할 수 있도록 준비하시면 좋을 것 같습니다.