면접준비

SQL 최적화: IN vs EXISTS

  • 이론
    • IN: 일반적으로 SET 자료구조를 이용 → 반복 비교 시 유리
    • EXISTS: 존재 여부만 확인 → Subquery 기반 실행
    • 데이터가 아예 적을 때는 성능 차이가 있을 수 있음
  • 실무 관점
    • 실제 동작은 옵티마이저 최적화 방식에 따라 달라짐
    • 따라서 무조건 “IN이 빠르다/EXISTS가 빠르다”가 아니라,
      👉 실제 상황에서는 AUTOTRACE / EXPLAIN PLAN으로 실행계획을 직접 확인하고 최적화한다.
  • 답변 예시
    • "이론적으로는 IN/EXISTS 차이가 있지만, 실무에선 옵티마이저 실행계획을 확인하면서 최적화를 합니다. 즉, 단순 이론이 아니라 실제로 어떻게 대응할 건지가 중요하다고 생각합니다."

2. 메시징 시스템 (Kafka 등)

  • 경험 (이력서 기반)
    • Redis Stream과 Batch/데몬 서비스로 충분히 안정적인 메시지 처리 경험
    • ex) 근태 모듈 집계 자동화 → 대량 알림 발송 실패 건을 Redis Stream PEL로 재처리
  • 답변 전략
    • "Kafka라는 별도의 인프라를 구축할 정도로 비중이 있지 않았습니다.
      실제로는 Redis Stream과 Batch만으로도 안정적인 처리가 가능했고, 회사 운영 환경과 리소스를 고려했을 때 가장 합리적인 선택이었습니다.
      어쨌든 회사에서 매출을 발생시키는 게 우선이라고 생각했고, 해당 규모에서는 Kafka 도입까지 필요하지 않았습니다."

3. 테스트 & TDD

  • 현재 경험
    • 단위 테스트 코드 도입으로 회귀 테스트 자동화
    • 정책 변경 시 수작업 테스트 대신 자동화 → 커버리지 85% 달성
    • 테스트 시간 단축 + 안정성 확보
  • TDD 관련
    • "TDD 용어는 많이 들었고 부트캠프 같은 곳에서 써보기도 했지만, 오래 쓰진 않았고 정확히 어떠한 건지는 아직 부족합니다.
      다만 테스트 코드 자체의 중요성은 크게 느꼈고, 사람이 하는 일이 반복되다 보면 실수가 발생하므로 자동화된 테스트는 반드시 필요하다고 생각합니다.
      TDD까지는 잘 모르지만, 테스트 코드 자체는 꾸준히 작성해야 한다고 생각합니다."

4. JVM 내부 / GC / 알고리즘

  • 면접 예상 질문
    • "JVM 내부에서 알고리즘 뭐 쓰는지 알고 있냐?"
    • "GC에 대해 알고 있냐?"
  • 답변 예시
    • JVM GC 알고리즘: Generational GC (Young → Copying GC / Old → Mark-Sweep-Compact)
    • 최신: G1GC, ZGC 등 → STW 시간 최소화 목적
    • 실무 경험: HeapDump 분석으로 특정 VO 객체 무한 생성 문제 발견 & 객체 풀로 해결
  • 추가 포인트
    • "Java에서 쓰는 참조 값은 주소 그 자체가 아니라, 힙 객체를 가리키는 참조(Reference) 값입니다. C/C++ 포인터와는 다릅니다."

5. JWT 인증/인가 흐름

👉 한 줄 정리

: 로그인 시 DB로 사용자 검증 → JWT 발급 → 이후 요청마다 JWT 검증 → SecurityContext에 인증정보 저장 → 컨트롤러 단에서 권한 체크


6. Spring & 관련 기술

  • 클래스 로더 / JVM / Spring
    • Reflection을 이용해 Annotation 동작
    • AOP: 횡단 관심사 분리 (로깅, 트랜잭션 등)
    • Interceptor: 컨트롤러 전/후 처리 (주로 인증, 로깅)
  • Swagger
    • 써봤지만, 개발 시간이 오래 걸려서 실제 프로젝트에서는 중단

7. SSO (Single Sign-On)

  • 개념: 한 번 로그인 → 여러 서비스 접근 가능
  • 흐름: Service → IdP 인증 → 토큰 발급 → 다른 서비스 접근 시 재인증 불필요
  • 프로토콜: SAML, OAuth2.0, OpenID Connect
  • 장점: 편리성, 중앙 집중 관리
  • 단점: IdP 장애 시 전체 서비스 장애, 토큰 탈취 위험

8. 기초 CS 지식

  • 운영체제: 프로세스 vs 스레드 / 동시성 vs 병렬성 / 메모리 구조 (Heap, Stack)
  • 네트워크: TCP vs UDP / HTTP vs HTTPS / 3-way handshake
  • DB: 트랜잭션 ACID / 인덱스 장단점 / 조인 (INNER, LEFT, RIGHT)
  • 자료구조: 배열 vs 연결리스트 / 스택 vs 큐 / 해시테이블 충돌 해결법

9. 면접 태도 팁

  • 말의 흐름: 장황하게 말하지 말고 → 핵심 먼저, 보완 설명 나중에
  • 예시:
    • "IN과 EXISTS는 상황에 따라 다릅니다. 실무에서는 옵티마이저 실행계획을 보고 결정했습니다."
  • 시선 처리: 답변 부족해도 기세, 자신감
  • 솔직함:
    • TDD: "정확히는 부족하지만, 테스트 코드의 중요성은 알고 있고 꾸준히 작성해왔습니다."
  • 중요 포인트: 말의 흐름이 길어지면 어.. 어.. 하다가 늘어질 수 있으니, 기세로 밀어붙여야 한다ㅎㅎ;