객체 지향 SOLID 원칙 (객체 지향 5원칙)
- SRP (단일 책임 원칙)
- OCP (개방-폐쇄 원칙)
- 확장에는 열려 있고, 수정에는 닫혀 있어야 한다.
- LSP (리스코프 치환 원칙)
- 상위 타입 객체를 하위 타입 객체로 대체해도 정상 동작해야 한다.
- ISP (인터페이스 분리 원칙)
- DIP (의존 역전 원칙)
객체 지향 특징
- 추상화 : 공통적인 특성을 묶어 표현
- 상속 : 부모의 기능을 자식 클래스가 활용
- 다형성 : 동일한 메서드를 다양한 방식으로 구현
- 캡슐화 : 상태와 행동을 묶고, 외부에서 직접 접근 제한
Spring Framework 특징
- DI (Dependency Injection, 의존성 주입)
- 객체를 직접 생성하지 않고 스프링 컨테이너가 주입
- IoC (Inversion of Control, 제어 역전)
- 객체의 생성/소멸 관리 주체를 스프링 컨테이너에 위임
- AOP (Aspect Oriented Programming, 관점 지향 프로그래밍)
- 핵심 기능과 부가 기능을 분리해 모듈화
HTTP Method 종류
- GET : 리소스 조회 (멱등성 O, Query String 사용)
- POST : 리소스 생성 (Body 사용, 보안적 이점 O)
- PUT : 리소스 완전 대체 (멱등성 O, 전체 데이터 필요)
- PATCH : 리소스 부분 변경
- DELETE : 리소스 삭제 (멱등성 O)
- HEAD : GET과 동일, body 제외
- OPTIONS : 서버 지원 메서드 확인
- CONNECT : 서버 연결 요청
RESTful 특징
- 인터페이스 일관성 (HTTP Method 기반)
- 무상태성 (서버는 클라이언트 상태 기억 X)
- 캐시 가능성
- 자체 표현 구조 (메시지만으로 기능 이해 가능)
- Client-Server 구조 (독립적 개발/배포)
- 계층형 구조 (중간 서버 존재 모름)
트랜잭션 특징 (ACID)
- Atomicity (원자성) : 모두 성공 / 모두 실패
- Consistency (일관성) : 데이터 일관성 유지
- Isolation (독립성) : 다른 트랜잭션과 독립 실행
- Durability (영속성) : 성공 결과는 영구 반영
트랜잭션 격리 수준
- SERIALIZABLE : 순차 처리 (동시 접근 불가)
- REPEATABLE READ : 동일 데이터 반복 조회 보장, 유령 읽기 발생 가능 (MySQL은 갭락으로 방지)
- READ COMMITTED : 커밋된 데이터만 조회 (Postgres 기본 설정)
- READ UNCOMMITTED : 커밋 전 데이터도 조회
JPA N+1 문제
- 원인 : 연관 관계 객체 조회 시 추가 쿼리 다수 발생
- 해결 방법
- Eager Loading (즉시 로딩)
- Fetch Join (영속성 컨텍스트에 캐시 가능)
- Batch Size (추가 쿼리를 하나로 묶음)
HTTP 버전 차이
- HTTP/1.1 : Persistent Connection (연속 요청 가능)
- HTTP/2.0 : Multiplexing (한 커넥션에서 여러 요청 처리)
- HTTP/3.0 : UDP 기반 (지연 시간 감소)
캐시 전략
— 읽기 전략
- Cache Aside (Look Aside)
- 캐시 → DB 순으로 조회
- Read Through
- 캐시에서만 읽음 (DB → 캐시 자동 갱신)
— 쓰기 전략
- Write Back (Behind) : 캐시에 저장 후 주기적으로 DB 반영
- Write Through : DB와 캐시에 동시에 기록
- Write Around : DB만 갱신, Cache Miss 시 캐시에 저장
TCP vs UDP
- TCP (Transmission Control Protocol)
- 연결 지향, 신뢰성 보장
- 3-way Handshake (연결) / 4-way Handshake (해제)
- UDP (User Datagram Protocol)