참고 영상: 웹 서비스 이해 02
지난 강의에서는 웹 서비스가 다음과 같은 구조로 동작한다는 것을 배웠다.
사용자 → 프론트엔드 → 백엔드 → 데이터베이스
이번 강의에서는 백엔드 영역을 조금 더 자세히 살펴보고, Web Server와 WAS의 차이 및 데이터베이스 연결 방법을 알아보았다.
Web Server는 클라이언트의 요청을 받아 HTML, CSS, JavaScript, 이미지와 같은 정적 리소스를 제공하는 서버다.
대표적인 Web Server는 다음과 같다.
정적 리소스는 사용자나 요청에 따라 내용이 바뀌지 않는 파일을 의미한다.
브라우저
↓ 정적 파일 요청
Web Server
↓
HTML, CSS, JavaScript, 이미지 반환
Web Server는 정적 파일을 빠르게 제공하는 데 적합하다.
WAS는 Web Application Server의 약자로, 프로그램을 실행하여 동적인 결과를 만들어내는 서버다.
예를 들어 로그인한 사용자마다 다른 정보를 보여주거나, 데이터베이스에서 게시글을 조회하려면 단순히 저장된 파일을 반환하는 것만으로는 부족하다.
이때 WAS가 요청에 맞는 코드를 실행한다.
클라이언트 요청
↓
WAS에서 프로그램 실행
↓
데이터베이스 조회
↓
동적으로 결과 생성
↓
클라이언트에 응답
Java 기반 웹 애플리케이션에서는 JSP와 Servlet 등이 WAS에서 실행될 수 있으며, 대표적으로 Tomcat이 있다.
| 구분 | Web Server | WAS |
|---|---|---|
| 주요 역할 | 정적 리소스 제공 | 동적 요청 처리 |
| 처리 대상 | HTML, CSS, JS, 이미지 | 로그인, 게시글 작성, 데이터 조회 |
| 대표적인 예 | Apache, Nginx | Tomcat |
| 데이터베이스 연동 | 일반적으로 직접 처리하지 않음 | 애플리케이션 로직을 통해 처리 |
실제 서비스에서는 두 서버를 함께 사용하기도 한다.
사용자
↓
Web Server
├── 정적 요청 → 바로 응답
└── 동적 요청 → WAS로 전달
↓
데이터베이스
Web Server가 정적 파일을 처리하고, 프로그램 실행이 필요한 요청은 WAS에 전달하는 방식이다.
백엔드 애플리케이션은 모든 코드를 한곳에 작성하지 않고 역할에 따라 여러 계층으로 나눈다.
Controller
↓
Service
↓
Repository
↓
Database
클라이언트의 요청을 받고 응답을 반환한다.
서비스의 핵심 비즈니스 로직을 처리한다.
데이터베이스에 접근하여 데이터를 조회하거나 저장한다.
이렇게 역할을 분리하면 코드 관리와 테스트가 쉬워지고, 특정 부분을 수정했을 때 다른 코드에 미치는 영향을 줄일 수 있다.
Java 애플리케이션에서 데이터베이스에 접근하려면 데이터베이스와 통신할 방법이 필요하다.
JDBC는 Java Database Connectivity의 약자로, Java에서 데이터베이스에 접근할 수 있도록 제공되는 표준 API다.
Java 애플리케이션
↓
JDBC
↓
데이터베이스
JDBC를 사용하면 SQL을 실행하고 결과를 받아올 수 있다.
다만 JDBC만 직접 사용하면 연결 관리, SQL 실행, 결과 변환 등의 코드를 반복해서 작성해야 한다.
이러한 불편함을 줄이기 위해 JPA나 MyBatis 같은 기술을 사용한다.
JPA는 Java Persistence API의 약자로, Java 진영의 표준 ORM 인터페이스다.
ORM은 객체와 관계형 데이터베이스 테이블을 연결하는 기술이다.
데이터베이스 테이블 → Java 클래스
테이블의 컬럼 → 객체의 필드
테이블의 행 → 하나의 객체
JPA를 사용하면 SQL을 직접 작성하는 작업을 줄이고 객체 중심으로 데이터를 다룰 수 있다.
userRepository.findById(1L);
JPA 자체는 인터페이스이며, 대표적인 구현체로 Hibernate가 있다.
MyBatis는 SQL Mapper 성격이 강한 데이터 접근 기술이다.
개발자가 SQL을 직접 작성하고, 조회 결과를 Java 객체와 연결한다.
SELECT *
FROM member
WHERE member_id = 1;
| 구분 | JPA | MyBatis |
|---|---|---|
| 중심 | 객체 중심 | SQL 중심 |
| SQL 작성 | 대부분 자동 생성 | 개발자가 직접 작성 |
| 추상화 수준 | 높음 | 상대적으로 낮음 |
| 장점 | 반복 코드 감소, 생산성 | SQL 제어가 자유로움 |
| 적합한 상황 | 일반적인 CRUD | 복잡한 조회와 SQL 최적화 |
두 기술 중 하나가 무조건 더 좋은 것은 아니다.
프로젝트의 구조와 요구사항에 따라 적절한 기술을 선택해야 한다.
데이터베이스는 크게 관계형 데이터베이스와 NoSQL로 구분할 수 있다.
데이터를 테이블 형태로 저장하고 SQL을 사용한다.
대표적인 제품은 다음과 같다.
고정된 테이블 구조보다 유연한 형태로 데이터를 저장한다.
대표적인 제품은 다음과 같다.
서비스에서 다루는 데이터의 형태와 처리 방식에 따라 적절한 데이터베이스를 선택한다.
이번에 배운 내용을 연결하면 다음과 같다.
사용자
↓
Web Server
├── 정적 파일 반환
└── 동적 요청 전달
↓
WAS
↓
Controller → Service → Repository
↓
JPA 또는 MyBatis
↓
JDBC
↓
Database
Web Server는 정적 리소스를 제공하고, WAS는 프로그램을 실행해 동적인 요청을 처리한다.
백엔드 애플리케이션 내부에서는 계층별로 역할을 분리하며, JPA나 MyBatis를 통해 데이터베이스에 접근한다.
이번 강의를 통해 사용자의 요청이 서버 내부에서 어떤 단계를 거쳐 데이터베이스까지 전달되는지 조금 더 구체적으로 이해할 수 있었다.