# 면접 CS 정리 Day 3 (풀스택 / Java·Spring·React)

면접 CS 정리 Day 3 (풀스택 / Java·Spring·React)

Q1. 401 vs 403

문제
HTTP 상태코드 401이랑 403 차이?

  • 401: 인증이 안 됨 (로그인/토큰 없음·만료)
  • 403: 인증은 됐지만 권한이 없음

한 줄: 401 = 누구인지 모름 / 403 = 누군진 알지만 못 함.

Q2. 복합 인덱스 좌측 접두어

문제
복합 인덱스 (user_id, created_at)이 있을 때
아래 중 인덱스를 잘 타는 것 / 못 타는 것은?

  • A. WHERE user_id = ?
  • B. WHERE created_at = ?
  • C. WHERE user_id = ? AND created_at = ?

  • A: (왼쪽 컬럼)
  • B: 못 탐 (앞 컬럼 스킵)
  • C: 가장 잘 탐 (인덱스 전부 활용)

복합 인덱스는 왼쪽 컬럼부터 써야 한다.

Q3. Dirty Read

문제
Dirty Read가 뭔지 한 줄, 막는 격리수준 이름은?


Dirty Read = 다른 트랜잭션이 커밋하기 전 데이터를 읽는 것.
막는 수준: READ COMMITTED

Q4. HashMap vs ConcurrentHashMap

문제
HashMap이랑 ConcurrentHashMap 차이? 멀티스레드에서 뭘 써야 하는지.


HashMap은 스레드 안전하지 않아서, 여러 스레드가 동시에 쓰면
데이터가 깨지거나 예외가 날 수 있다.
공유 Map이면 ConcurrentHashMap을 쓴다.

Q5. @Controller vs @RestController

문제
Spring @Controller@RestController 차이?

  • @Controller: 보통 화면(뷰) 반환
  • @RestController: @Controller + @ResponseBody
    → 반환값이 뷰 이름이 아니라 JSON 등 응답 본문

REST API는 @RestController를 주로 쓴다.

Q6. XSS vs CSRF

문제
XSS랑 CSRF 차이 한 줄씩.

  • XSS: 페이지에 악의적 스크립트를 삽입해 실행시키는 공격
  • CSRF: 로그인된 사용자 브라우저로 원치 않는 요청을 보내게 하는 공격

XSS 완화 예: 출력 이스케이프, 쿠키 HttpOnly
CSRF 완화 예: CSRF 토큰, 쿠키 SameSite

Q7. N+1 문제

문제
N+1 문제가 뭔지, 목록 조회할 때 어떻게 발생하고 어떻게 줄이는지?


목록 조회 1번 후, 각 행마다 연관 데이터를 N번 추가 조회하는 문제.
(총 1+N번 쿼리)

줄이는 방법:

  • JPA: fetch join, @EntityGraph, 배치 조회(IN)
  • MyBatis: JOIN 한 방, id 목록 IN 조회 후 조립

오늘 한 줄 암기

  1. 401 = 인증 X / 403 = 권한 X
  2. 복합 인덱스 (A,B)A OK, B만 NO
  3. Dirty Read → READ COMMITTED
  4. 멀티스레드 Map → ConcurrentHashMap
  5. N+1 = 목록 1 + 건별 N → fetch join / JOIN / IN

다음 목표

  • 복합 인덱스 A도 탄다는 점까지 항상 말하기
  • XSS/CSRF 방어 수단 한 가지씩 더 정리