Don't Panic
in CS ☕ 15분 읽기

[CS] 기술 면접 Q&A — Java·OS·DB·네트워크·Spring 종합 정리

#CS
목차

언어


가비지 컬렉션(Garbage Collection)이란?

정리되지 않은 메모리, 유효하지 않은 메모리 주소인 가비지를 정리해주는 프로그램.

Heap 메모리를 재활용하기 위해 참조되지 않는 객체들을 해제시켜 가용한 공간을 만드는 작업.

  • 장점: 프로그래머가 직접 메모리를 정리하지 않아도 되어 개발 속도가 대폭 향상됨
  • 단점: 메모리를 언제 되찾을지 결정하기 위한 오버헤드 발생

Vector와 ArrayList의 차이

구분VectorArrayList
동기화동기식비동기식
스레드한 스레드 작업 시 다른 스레드 접근 불가여러 스레드가 동시 작업 가능

String, StringBuffer, StringBuilder 차이

구분특징적합 환경
String불변(immutable). 수정 시 삭제 후 재생성(new) → 문자열 연산 많으면 성능 저하단순 문자열
StringBuffer가변. append() 등으로 크기 변경 가능멀티스레드
StringBuilderStringBuffer와 동일하나 동기화 미지원 → 멀티스레드 부적합, 싱글스레드에서 StringBuffer보다 빠름싱글스레드

Serialization(직렬화)이란?

직렬화: 객체의 상태 혹은 데이터 구조를 기록할 수 있는 포맷으로 변환해주는 것.

나중에 재구성할 수 있게 자바 객체를 JSON으로 변환하거나 JSON을 자바 객체로 변환해주는 라이브러리.


Java 메모리 영역

영역저장 내용특징
메소드바이트 코드, 전역 변수, static 변수
스택매개변수, 지역변수사용 끝나면 바로 소멸. 컴파일 시 메모리 할당
new로 생성된 객체 (C에서는 malloc())호출이 끝나도 유지. 프로그램 실행 시 동적 할당

오버로딩 vs 오버라이딩

구분설명
오버로딩(Overloading)메소드 이름은 같고, 매개변수를 다르게 함으로써 여러 메소드를 정의하는 것
오버라이딩(Overriding)부모클래스로부터 상속받은 메소드를 재정의하는 것. 동일한 리턴타입·메소드명·매개변수 유지 필요

추상클래스 vs 인터페이스

구분설명키워드
추상클래스추상 메소드가 하나 이상 포함 or abstract로 정의. 기능을 이용하고 확장extends
인터페이스모든 메소드가 추상 메소드. 다중 상속 구현 가능. 구현 클래스에 메소드 강제 구현implements

제네릭(Generics)이란?

클래스에서 사용할 타입을 클래스 외부에서 설정하도록 만드는 것.

  • <> 안에는 참조자료형(클래스, 인터페이스, 배열)만 가능
  • 기본자료형을 쓰려면 wrapper 클래스 활용 필요

접근 지정자 4가지

지정자접근 범위
public모든 접근 허용
protected상속받은 클래스 또는 같은 패키지만 허용
default자신 클래스 내부 또는 같은 패키지만 허용
private외부 접근 불가. 같은 클래스 내에서만 가능

Call by Value vs Call by Reference

구분설명원본 변경
Call by Value값을 복사해서 새로운 함수로 전달X
Call by Reference주소 값을 인자로 전달O

배열 vs 연결리스트(LinkedList)

구분배열(Array)연결리스트(LinkedList)
접근 방법인덱스로 O(1) 직접 접근링크 따라가며 O(n) 순차 접근
크기고정가변
삽입/삭제뒤 요소 전체 이동 필요 (느림)논리적 주소만 변경 (빠름)
  • 데이터 양이 많고 삽입/삭제가 없으며 검색이 많을 때 → Array
  • 데이터 양이 적고 삽입/삭제가 빈번할 때 → LinkedList

Hash란?

데이터 삽입·삭제 시 기존 데이터를 밀어내거나 채우지 않고, 데이터와 연관된 고유한 숫자를 생성해 인덱스로 사용하는 방법. 검색 속도가 매우 빠르다.


Java 컴파일 과정

  1. 컴파일러가 소스코드를 자바 바이트 코드(.class) 로 변환
  2. JVM 이 바이트코드를 기계어로 변환하고 인터프리터 방식으로 애플리케이션 실행

C++ 실행 과정

단계설명
전처리#define, #include 지시자 해석
컴파일고급 언어 소스를 입력받아 어셈블리 파일 생성
어셈블어셈블리 파일을 오브젝트 파일로 변환
링크오브젝트 파일을 엮어 실행파일 생성, 라이브러리 함수 연결
실행

메모리·성능 개선 방법

static 을 사용해 선언한다. 인스턴스 변수에 접근할 일이 없으면 static 메소드 로 선언하여 호출하자.

모든 객체가 서로 공유할 수 있기 때문에 메모리가 절약되고, 연속적으로 그 값의 흐름을 이어갈 수 있는 장점이 존재한다.


클래스 vs 구조체

구분설명
구조체하나의 구조로 묶일 수 있는 변수들의 집합
클래스변수뿐만 아니라 메소드도 포함 가능 (함수 포인터를 이용하면 구조체도 클래스처럼 만들 수 있음)

스레드 생성 방법과 장단점

생성 방법: Runnable 인터페이스를 구현한 클래스 or Thread 클래스를 상속받아 run() 메소드 구현

구분내용
장점빠른 프로세스 생성, 메모리 적게 사용, 정보 공유 용이
단점데드락(DeadLock)에 빠질 위험 존재

포인터란?

포인터 는 메모리 주소를 저장하는 변수. 해당 위치를 가리키고 있는 변수.

엘리베이터 버튼에 비유: 10층 버튼을 누르면 10층으로 이동하듯, 포인터는 해당 주소를 가리킨다.

주의: 어떤 주소를 가리키고 있어야만 사용이 가능하다.


운영체제 (OS)


프로세스 vs 스레드

프로세스: 메모리 상에서 실행 중인 프로그램. 각각 별도의 주소공간을 독립적으로 할당받음 (code, data, heap, stack)

스레드: 프로세스 안에서 실행되는 흐름 단위. stack만 따로 할당받고 나머지 영역(code, data, heap)은 스레드끼리 공유.

구분자원
프로세스자신만의 고유 공간과 자원을 할당받아 사용
스레드다른 스레드와 공간과 자원을 공유하면서 사용

멀티 프로세스 대신 멀티 스레드를 쓰는 이유

  • 프로세스 생성 시 자원 할당 시스템 콜이 줄어 자원을 효율적으로 관리 가능
  • 프로세스 간 통신(IPC)보다 스레드 간 통신 비용이 적어 부담 감소

단, 멀티 스레드 사용 시 공유 자원 문제를 위해 동기화 에 신경써야 한다.


교착상태(DeadLock)

프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태. 시스템적으로 한정된 자원을 여러 곳에서 사용하려 할 때 발생.

교착상태 발생 4가지 조건

조건설명
상호배제프로세스들이 필요 자원에 대해 배타적 통제권을 요구
점유대기자원을 가진 채로 다른 자원을 기다림
비선점사용 중인 자원을 강제로 빼앗을 수 없음
순환대기각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 보유

4가지 조건 중 하나라도 만족하지 않으면 교착상태가 발생하지 않는다.

교착상태 해결 방법 4가지

  • 예방 / 회피 / 무시 / 발견

메모리 계층 (상→하층)

레지스터
캐시
메모리
하드디스크

메모리 할당 알고리즘

알고리즘설명
First fit처음부터 검사해서 크기가 충분한 첫 번째 메모리에 할당
Next fit마지막으로 참조한 메모리 공간에서부터 탐색 시작
Best fit모든 공간 검사 후 내부 단편화를 최소화하는 공간에 할당

페이지 교체 알고리즘

알고리즘설명
OPT최적 교체. 앞으로 가장 오랫동안 사용하지 않을 페이지 교체 (실현 가능성 희박)
FIFO메모리에 할당된 순서대로 교체
LRU최근에 가장 오랫동안 사용하지 않은 페이지 교체
LFU사용 빈도가 가장 적은 페이지 교체
NUR최근에 사용하지 않은 페이지 교체

외부 단편화 vs 내부 단편화

구분설명
외부 단편화작업보다 많은 공간이 있더라도 메모리 배치 때문에 실제로 작업을 받아들일 수 없는 경우
내부 단편화작업에 필요한 공간보다 더 많이 할당받아 발생하는 내부의 사용 불가능한 공간

가상 메모리(Virtual Memory)

메모리에 로드된 실행 중인 프로세스가 메모리가 아닌 가상의 공간을 참조하여, 마치 커다란 물리 메모리를 갖는 것처럼 사용할 수 있게 해주는 기법.

실제 메모리에 공간이 부족하면 현재 사용하지 않는 데이터를 빼내어 가상 메모리에 저장하고, 실제 메모리에서는 처리만 하게 하는 것이 가상 메모리의 역할. 실제 메모리에 놀고 있는 공간이 없게 계속 일을 시키는 것.


페이징 vs 세그먼테이션

구분설명
페이징페이지 단위의 논리-물리 주소 관리 기법. 논리 주소와 물리 주소를 분리. 외부 단편화 해소 가능. 페이지가 클수록 내부 단편화 증가
세그먼테이션사용자/프로그래머 관점의 관리 기법. 논리적 단위(세그먼트)로 나눔. 메모리 사용 시점에 할당

뮤텍스(Mutex) vs 세마포어(Semaphore)

구분세마포어뮤텍스
개념공유 자원 접근 제어 신호. 최대 허용치만큼 동시 접근 가능. 카운트가 0이 되면 대기상호배제. 하나의 스레드만 허용. 첫 번째 스레드가 빠져나올 때까지 다른 스레드 대기 (큐 구조)
소유소유 불가능소유 가능
관계세마포어는 뮤텍스가 될 수 있음뮤텍스는 세마포어가 될 수 없음

Context Switching(문맥 교환)

하나의 프로세스가 CPU를 사용 중인 상태에서 다른 프로세스가 CPU를 사용하도록 하기 위해, 이전 프로세스 상태를 보관하고 새로운 프로세스 상태를 적재하는 작업.

한 프로세스의 문맥은 그 프로세스의 PCB(Process Control Block) 에 기록된다.


사용자 수준 스레드 vs 커널 수준 스레드

구분사용자 수준 스레드커널 수준 스레드
장점Context switching 없어 오버헤드 적음멀티프로세서 활용 가능. 각 CPU에 스레드 효율적 배당
단점하나의 스레드가 커널 진입 시 나머지 스레드도 정지됨 (커널이 스레드 존재를 모름)Context switching 발생. 사용자↔커널 모드 전환으로 성능 저하 가능

fork() vs vfork()

구분fork()vfork()
메모리부모 프로세스의 메모리를 복사해서 사용부모 프로세스와 메모리를 공유
속도상대적으로 느림복사하지 않으므로 빠름
특이점자원 공유로 race condition 방지를 위해 자식이 exit/execute 호출 전까지 부모 block됨

Race Condition(경쟁 조건)

두 개 이상의 프로세스가 공통 자원을 병행적으로 읽거나 쓸 때, 공용 데이터에 대한 접근 순서에 따라 실행 결과가 달라지는 상황.

해결 방법: 상호배제 또는 임계구역(Critical Section) 으로 해결.


시스템 콜 vs 서브루틴

커널: 하드웨어를 둘러싸고 있음. 하드웨어를 제어하기 위한 일종의 API.

서브루틴(Subroutine): 프로그래밍 시 사용하는 대부분의 API.

stdio.h에 있는 printf나 scanf
string.h에 있는 strcmp나 strcpy

서브루틴과 시스템 콜의 차이:

서브루틴이 시스템 콜 호출 → 시스템 콜은 커널 호출
→ 커널은 자신의 역할을 수행하고 나온 결과 데이터를 시스템 콜에게 보냄
→ 시스템 콜이 다시 서브루틴에게 보냄

실무로 사용할 때 둘의 큰 차이는 없음 (API를 호출해서 사용하는 것은 동일).


데이터베이스 (DB)


오라클 시퀀스(Oracle Sequence)

UNIQUE 한 값을 생성해주는 오라클 객체. 시퀀스를 생성하면 PK와 같이 순차적으로 증가하는 컬럼을 자동 생성할 수 있다.

CREATE SEQUENCE 시퀀스이름
    START WITH n
    INCREMENT BY n ...

DBMS(Database Management System)란?

데이터베이스 관리 시스템. 다수의 사용자가 데이터베이스 내의 데이터를 접근할 수 있도록 설계된 시스템.

DBMS 기능

기능명령어
정의(DDL)CREATE, ALTER, DROP, RENAME
조작(DML)SELECT, INSERT, UPDATE, DELETE
제어(DCL)GRANT, REVOKE

UML(Unified Modeling Language)이란?

프로그램 설계를 표현하기 위해 사용하는 그림으로 된 표기법. 이해하기 힘든 복잡한 시스템을 의사소통하기 위해 만들었다.


View(뷰)란?

허용된 데이터를 제한적으로 보여주기 위한 가상 테이블. 하나 이상의 테이블에서 유도됨.

  • 사용자가 view에 접근했을 때 해당하는 데이터를 원본에서 가져온다.
  • view에 나타나지 않은 데이터를 간편히 보호할 수 있는 장점 존재.

정규화(Normalization)란?

중복을 최대한 줄여 데이터를 구조화하고, 불필요한 데이터를 제거해 데이터를 논리적으로 저장하는 것. 이상현상 이 일어나지 않도록 정규화한다.

이상현상(Anomaly): 릴레이션에서 일부 속성들의 종속으로 인해 데이터 중복이 발생하는 것 (insert, update, delete 시 발생).


데이터베이스 무결성(Integrity)

  • 테이블의 모든 행이 유일한 식별자를 가져야 함 (중복값 X)
  • 외래키 값은 NULL이거나 참조 테이블의 PK값이어야 함
  • 컬럼에 대해 NULL 허용 여부와 자료형, 규칙으로 타당한 데이터 값 지정

무결성 보장 방법:

  1. 데이터 생성·수정·삭제 시 프로그램 내에서 무결성 조건 검증
  2. 트리거 이벤트 시 저장 SQL 실행
  3. DB 제약조건 기능 선언

트리거(Trigger)란?

자동으로 실행되도록 정의된 저장 프로시저. INSERT, UPDATE, DELETE 문에 대한 응답을 자동으로 호출한다.

사용하는 이유: 업무 규칙 보장, 업무 처리 자동화, 데이터 무결성 강화.


Oracle vs MySQL

구분OracleMySQL
적합 규모대규모 트랜잭션. 여러 서버에 대용량 DB 분산단일 DB, 소규모 프로젝트에 적합
특징성능 최적화 기능 풍부단순, commit/rollback으로 이전 상태 복원

Commit vs Rollback

구분설명
Commit트랜잭션이 성공적으로 끝났을 때 갱신 연산이 완료됨을 트랜잭션 관리자에게 알리는 연산
Rollback트랜잭션 처리가 비정상적으로 종료되어 DB 일관성이 깨졌을 때 모든 연산을 취소하는 연산

JDBC vs ODBC

구분JDBCODBC
언어Java표준 개방형 API (MS사 개발)
기능Java에서 DB 접근, 조회/삽입/수정/삭제 가능. DBMS 종류에 맞는 드라이버 설치 필요Excel/Text 등 여러 종류의 데이터 접근 가능

인덱스(Index)란?

책의 목차에 비유할 수 있다. DBMS에서 저장 성능을 희생하여 데이터 읽기 속도를 높이는 기능. 데이터가 정렬되어 들어간다.

인덱스 종류:

종류설명
B+-Tree 인덱스원래의 값을 이용하여 인덱싱
Hash 인덱스칼럼 값으로 해시 값 계산하여 인덱싱. 메모리 기반 DB에서 많이 사용. B+-Tree보다 빠름

인덱스 생성 시 고려 사항:

  • 테이블 전체 로우 수의 15% 이하 데이터를 조회할 때 생성
  • 테이블 건수가 적으면 생성 안 함 (풀 스캔이 빠름)
  • 자주 쓰는 컬럼을 앞으로 지정
  • DML이 많은 테이블은 생성 안 함 (인덱스에도 수정 작업이 동시 발생)

네트워크


OSI 7계층

OSI 7계층: 통신 접속에서 완료까지의 과정을 7단계로 정의한 국제 통신 표준 규약

계층이름주요 역할장비
1물리전송에 필요한 기능 제공통신 케이블, 허브
2데이터링크송/수신 확인. MAC 주소로 통신브릿지, 스위치
3네트워크패킷을 IP 통해 전달 (라우팅)라우터
4전송두 host 시스템 간 데이터 흐름 제공
5세션통신 시스템 사용자 간 연결 유지 및 설정
6표현세션 계층 간 인터페이스를 일관성 있게 제공
7응용사용자가 네트워크에 접근할 수 있도록 서비스 제공

TCP/IP 4계층

계층설명
LINK 계층물리적 영역의 표준화. LAN, WAN 등 네트워크 표준 프로토콜 정의
IP 계층경로 검색. 비연결지향적·신뢰할 수 없는 프로토콜. 경로가 일정하지 않고 데이터 손실 가능
TCP/UDP 계층실제 송수신 담당. UDP는 간단, TCP는 신뢰성 있는 전송. IP의 문제를 TCP가 보완
애플리케이션 계층프로그램 성격에 따라 데이터 송수신 약속이 정해지는 계층

TCP란?

서버 흐름: socket()bind()listen()accept()read/write()close()

클라이언트 흐름: socket()connect()read/write()close()

특징:

  • 연결지향적 으로 신뢰성 있는 데이터 전송 (3-way handshaking)
  • 흐름제어: 송신 측과 수신 측의 데이터 처리 속도 차이 조절
  • 혼잡제어: 네트워크 내 패킷 수가 넘치지 않도록 방지
  • 정확성이 높은 대신 속도가 느림. 주로 웹 HTTP 통신, 이메일, 파일 전송에 사용

3-way Handshaking

TCP 소켓 연결 설정에서 총 3번의 대화를 주고 받는다. (SYN: 연결 요청 플래그 / ACK: 응답)

  1. 클라이언트 → 서버: SYN(M) 패킷 전송 (접속 요청)
  2. 서버 → 클라이언트: ACK(M+1) + SYN(N) 패킷 발송 (요청 수락)
  3. 클라이언트 → 서버: ACK(N+1) 전송 → 연결 성립
  4. 클라이언트 → 서버: FIN 플래그 전송 (연결 종료 요청)
  5. 서버 → 클라이언트: ACK 전송 후 TIME_OUT (데이터 전송 완료 대기)
  6. 서버 → 클라이언트: 통신 완료 후 FIN 플래그 전송
  7. 클라이언트 → 서버: ACK 전송
  8. 서버: 소켓 close
  9. 클라이언트: TIME_WAIT — 일정 시간 세션 유지하며 잉여 패킷 대기

UDP란?

TCP의 대안. 비연결성·비신뢰성 프로토콜.

  • 메시지를 패킷으로 나누고 재조립하는 서비스를 제공하지 않음
  • 여러 컴퓨터를 거치지 않고 직접 연결할 때 사용
  • TCP보다 속도가 매우 빠름 → 데이터 유실이 있어도 무관한 스트리밍, 화면 전송 등에 사용

HTTP vs HTTPS

구분HTTPHTTPS
동작 순서TCP → HTTPTCP → SSL → HTTP
암호화없음SSL(Secure Socket Layer)로 암호화

모든 사이트가 HTTPS를 쓰지 않는 이유: 암호화 과정으로 인한 속도 저하 발생.


GET vs POST

구분GETPOST
전달 방식URL 파라미터로 전달 (주소창에 노출)HTTP BODY에 포함하여 전달 (노출 안됨)
길이 제한URL 길이 제한 있음제한 없음
용도서버에서 데이터를 가져올 때 (SELECT 성향)서버의 값/상태를 변경할 때

IOCP(Input/Output Completion Port)

어떤 I/O 핸들에 대해 블록 되지 않게 비동기 작업을 하면서 프로그램 대기시간을 줄이는 목적으로 사용된다.

동기화 Object 세마포어의 특성과 큐를 가진 커널 Object. 대부분 멀티 스레드 상에서 사용되고, 큐는 자체적으로 운영하여 스레드 풀링 에 적합하다.

POOLING: 여러 스레드를 생성하여 대기시키고, 필요할 때 가져다 사용한 뒤 다시 반납하는 과정 (스레드 생성·파괴의 오버헤드를 줄이기 위해 사용).


라우터 vs 스위치

구분라우터스위치
OSI 계층3계층 장비2계층 장비
역할수신 패킷의 정보를 보고 경로를 설정해 패킷 전송MAC 주소 테이블을 이용해 프레임 전송
위치네트워크 간 경계주로 내부 네트워크

웹 / Spring


Spring이란?

자바 플랫폼을 위한 오픈소스 애플리케이션 프레임워크. 자바 SE로 된 자바 객체(POJO)를 자바 EE에 의존적이지 않게 연결해주는 역할.

특징: 경량(크기와 부하 최소화), IOC 기술로 애플리케이션의 느슨한 결합 도모.


Spring vs Spring Boot

Spring Boot: Spring에서 사용하는 프로젝트를 간편하게 셋업할 수 있는 서브 프로젝트.

  • 독립 컨테이너에서 동작 → 임베디드 톰캣 자동 실행
  • 임베디드 컨테이너에서는 다소 불안정하여 큰 프로젝트에는 부적합

MVC 패턴이란?

코드의 재사용에 유용하며, UI와 애플리케이션 개발에 소요되는 시간을 줄여주는 설계 방식.

구성요소역할
Model핵심 비즈니스 로직 담당, DB 관리
View사용자에게 보여주는 화면
ControllerModel과 View 사이에서 정보 교환 연결

MVC1 vs MVC2

구분MVC1MVC2
구조JSP 안에서 자바 코드로 로직 처리서블릿이 컨트롤러 역할, JSP는 뷰만 담당
장점단순한 구조역할 분리로 유지보수 용이
단점HTML+자바 코드 혼재 → 복잡, 유지보수 어려움습득 어렵고 구조 복잡

Spring MVC 구조 흐름

  1. Dispatcher Servlet 이 클라이언트 요청 수신
  2. HandlerMapping 에 핸들러 이름 문의 → URL 기반으로 핸들러 반환 (인터셉터 적용)
  3. Dispatcher Servlet이 해당 핸들러 에게 제어권 이전
  4. 핸들러가 서비스 호출 후 뷰 이름 을 Dispatcher Servlet에 전달
  5. Dispatcher Servlet이 ViewResolver 에게 뷰 생성 요청
  6. 해당 뷰가 모델과 컨트롤러 를 활용해 응답 생성 후 반환
  7. Dispatcher Servlet이 클라이언트에 최종 응답

필터(Filter) vs 인터셉터(Interceptor)

구분필터인터셉터
등록 위치웹 애플리케이션에 등록스프링 Context에 등록
공통점컨트롤러에 들어가기 전 작업 처리

IOC(Inversion of Control, 제어의 역전)

인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너가 관리 해주는 것. 인스턴스 생성의 제어를 서블릿과 같은 Bean을 관리해주는 컨테이너가 담당.


Dispatcher Servlet이란?

서블릿 컨테이너에서 HTTP 프로토콜을 통해 들어오는 모든 요청을 제일 앞에서 처리 해주는 프론트 컨트롤러.

  • 공통처리 작업 후 적절한 세부 컨트롤러로 위임
  • web.xml의 역할을 크게 축소. 기존엔 모든 서블릿을 web.xml에 등록했으나 Dispatcher Servlet이 모든 요청을 핸들링

DI(Dependency Injection, 의존성 주입)

설정 파일을 통해 객체 간의 의존관계를 설정 하는 것. 스프링 컨테이너가 Bean 설정 정보를 바탕으로 자동으로 연결.

객체가 직접 의존하는 객체를 생성하거나 검색할 필요가 없으므로 코드 관리가 쉬워지는 장점.


AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)

공통 관심 사항 을 적용해서 발생하는 의존 관계의 복잡성과 코드 중복을 해소.

용어설명
Advice언제 공통 관심기능을 핵심 로직에 적용할지 정의
JoinpointAdvice를 적용 가능한 지점 (before, after 등)
PointcutJoinpoint의 부분집합. 실제로 Advice가 적용되는 지점
WeavingAdvice를 핵심 로직 코드에 적용하는 것
Aspect여러 객체에 공통으로 적용되는 관심 사항 (트랜잭션, 보안 등)

DAO(Data Access Object)란?

DB에 데이터를 조회하거나 조작하는 기능들을 전담. MyBatis 사용 시 mapper.xml에 쿼리문을 작성하고 mapper 클래스에서 받아와 DAO에 전달하는 방식으로 구현.


Annotation(어노테이션)이란?

소스코드에 @어노테이션 형태로 표현하며 클래스·필드·메소드 선언부에 적용할 수 있는 특정 기능이 부여된 표현법.

XML 환경설정의 복잡성을 줄이고 개발자 오류를 최소화. 메타데이터 보관, 컴파일 타임 체크, 코드 가독성 향상.

어노테이션역할
@Controllerdispatcher-servlet.xml의 bean 태그 정의와 동일
@RequestMapping특정 메소드에 요청 URL 매핑
@Autowired자동 의존성 주입
@Service비즈니스 로직 처리 서비스 클래스 등록
@RepositoryDAO 등록

Spring JDBC란?

DB 테이블과 자바 객체 사이의 단순한 매핑을 간단한 설정으로 처리하는 것.

기존 JDBC: Connection, PrepareStatement, ResultSet 생성 및 Exception 처리를 모두 직접 해야 함.

Spring JDBC: JDBC와 ORM 프레임워크를 직접 지원하므로 따로 작성하지 않아도 처리.


MyBatis란?

객체·데이터베이스·Mapper를 독립적으로 작성하고, SQL 실행 결과를 DTO와 매핑 하여 사용할 수 있도록 지원.

  • 기존: DAO에 SQL문이 자바 소스 내에 위치
  • MyBatis: SQL을 XML 설정 파일로 분리 → 유지보수 용이
  • 매개변수·리턴 타입·DTO 관련 부분도 모두 설정파일에서 관리 가능