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

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

Q1. interface vs abstract class

문제
interface랑 abstract class 차이? 다중 상속, 필드, 생성자 기준.

  • interface: 여러 개 구현 가능, 생성자 없음, 상수 위주
  • abstract class: 클래스는 하나만 상속, 생성자 있음, 인스턴스 필드 가능
  • 둘 다 직접 new 불가. abstract 생성자는 자식이 super()로 호출

역할(계약)만이면 interface, 공통 구현·상태를 물려줄 때면 abstract class.

Q2. @Component / @Service / @Repository

문제
셋 다 Bean 등록인데 왜 나누나?


@Service / @Repository@Component특화(스테레오타입). 셋 다 스캔되어 Bean이 된다.

  • 계층 의미: Repository=DB, Service=비즈니스, Component=기타
  • @Repository는 DB 예외를 DataAccessException으로 변환

인터페이스라서 붙이는 게 아니라 역할 따라 붙인다.

Q3. Virtual DOM

문제
Virtual DOM이 뭔지, 실제 DOM을 매번 안 건드리는 이유.


실제 DOM을 흉내 낸 가벼운 JS 객체 트리.
이전/이후를 diff해서 바뀐 부분만 실제 DOM에 반영한다.
실제 DOM 조작이 비싸서 전체를 다시 그리지 않는다.

Q4. HTTPS

문제
HTTPS가 HTTP보다 안전한 이유? HTTP + ? = HTTPS인지.


HTTPS = HTTP + TLS. (SSL은 옛 이름)
클라이언트↔서버 구간을 암호화하고, 인증서로 서버를 검증하며 위변조도 막는다.

Q5. OFFSET 페이징

문제
LIMIT 10 OFFSET 100000이 느릴 수 있는 이유 + 대안.


OFFSET은 앞 행을 건너뛰려고 읽고 버린다. 페이지가 깊을수록 느리다.
대안: 커서(keyset) 페이징WHERE id < 마지막id ORDER BY id DESC LIMIT 10

Q6. REQUIRED vs REQUIRES_NEW

문제
트랜잭션이 이미 있을 때 각각?

  • REQUIRED: 기존에 참여
  • REQUIRES_NEW: 새 트랜잭션 (기존은 잠시 보류)

없을 때는 둘 다 새로 시작.
있으면 쓰고 없으면 안 씀 = SUPPORTS. 이름 철자: REQUIRES_NEW.

Q7. Dirty / Non-repeatable / Phantom

문제
세 현상 + 막는 최소 격리수준.

  • Dirty Read: 커밋 전 읽기 → READ COMMITTED
  • Non-repeatable Read: 같은 행 값 변경 → REPEATABLE READ
  • Phantom Read: 행이 늘거나 줄어듦 → SERIALIZABLE

SUPPORTS는 트랜잭션 전파이지 격리수준이 아니다.

오늘 한 줄 암기

  1. interface = 다중 구현, 생성자 없음 / abstract = 단일 상속, 생성자 있음
  2. @Repository = Component 특화 + 예외 변환
  3. HTTPS = HTTP + TLS
  4. OFFSET 깊을수록 느림 → 커서 페이징
  5. Phantom 막는 수준 = SERIALIZABLE (SUPPORTS 아님)

다음 목표

  • 격리수준 3종을 현상 한 줄 + 이름까지 세트로 말하기
  • SUPPORTS(전파) vs SERIALIZABLE(격리) 섞지 않기