스프링을 처음 배우면 Controller, Service, Repository, Bean, DI 같은 단어가 한꺼번에 등장합니다. 처음 보는 단어가 많다 보니 "이걸 다 외워야 하나?" 하는 생각이 들 수 있습니다.
하지만 처음부터 용어를 외우려고 하면 금방 길을 잃습니다. 먼저 잡아야 할 큰그림은 아주 단순합니다.
클라이언트가 서버에 요청을 보내고, 서버가 응답을 돌려준다.
웹 개발은 이 한 문장을 계속 구체화하는 과정입니다. 스프링은 이 흐름을 더 편하고, 안전하고, 구조적으로 만들기 위해 등장한 도구입니다.
앞으로 이 책에서는 간단한 게시판 API를 만들어 갑니다. 사용자가 글 목록을 조회하고, 글을 작성하고, 수정하고, 삭제하는 기능입니다. 아직 코드를 몰라도 괜찮습니다. 지금은 이런 흐름만 떠올리면 됩니다.
브라우저 또는 앱
→ 글 목록을 주세요
서버
→ 데이터베이스에서 글을 찾음
→ 글 목록을 JSON으로 응답이 흐름을 이해하면 스프링이 왜 필요한지도 자연스럽게 보입니다.
AI 생성 이미지
요청과 응답: 웹의 가장 기본 흐름
브라우저 주소창에 다음 주소를 입력한다고 해봅시다.
https://example.com/posts브라우저는 단순히 화면만 보여주는 프로그램이 아닙니다. 사용자를 대신해서 서버에 말을 거는 프로그램입니다.
브라우저나 모바일 앱처럼 요청을 보내는 쪽을 클라이언트(Client) 라고 합니다. 요청을 받아 처리하고 결과를 돌려주는 쪽을 서버(Server) 라고 합니다.
클라이언트가 서버에 보내는 말을 요청(Request) 이라고 합니다. 서버가 다시 돌려주는 말을 응답(Response) 이라고 합니다. 웹에서는 이 요청과 응답이 보통 HTTP라는 약속을 따라 오갑니다.
요청에는 보통 이런 정보가 들어갑니다.
GET /posts HTTP/1.1
Host: example.com여기서 GET은 "데이터를 조회하고 싶다"는 뜻입니다. /posts는 "글 목록과 관련된 주소"입니다. Host는 어느 서버에 요청하는지 알려주는 정보입니다.
서버는 요청을 처리한 뒤 응답을 보냅니다.
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>글 목록 화면</body>
</html>200 OK는 요청이 성공했다는 뜻입니다. Content-Type은 응답 본문이 어떤 형태인지 알려줍니다. 위 예시는 HTML을 응답합니다.
하지만 서버가 항상 HTML만 돌려주는 것은 아닙니다. 요즘 웹 서비스에서는 JSON도 많이 사용합니다.
[
{ "id": 1, "title": "첫 번째 글" },
{ "id": 2, "title": "두 번째 글" }
]HTML은 브라우저가 바로 화면으로 그릴 수 있는 문서입니다. 반면 JSON은 데이터를 주고받기 위한 가벼운 형식입니다. 화면은 브라우저나 모바일 앱이 따로 만들고, 서버는 필요한 데이터만 JSON으로 보내는 방식이 많이 쓰입니다.
정리하면 웹 개발의 기본 흐름은 다음과 같습니다.
1. 클라이언트가 요청을 보낸다.
2. 서버가 요청을 해석한다.
3. 필요하면 데이터베이스에서 데이터를 찾거나 저장한다.
4. 서버가 HTML 또는 JSON으로 응답한다.앞으로 스프링 코드를 볼 때도 이 흐름을 계속 떠올리면 됩니다. 어려운 어노테이션이나 클래스 이름이 나와도 결국은 "어떤 요청을 받아서, 어떤 처리를 하고, 어떤 응답을 돌려주는가"를 다루는 코드입니다.
정적 웹 사이트, 동적 웹 애플리케이션, REST API
웹이라고 해서 모두 같은 방식으로 동작하지는 않습니다. 먼저 세 가지 모습을 구분해보겠습니다.
정적 웹 사이트
정적 웹 사이트는 미리 만들어 둔 파일을 그대로 보여주는 방식입니다. 식당 입구에 붙어 있는 종이 메뉴판과 비슷합니다. 누가 보든 같은 내용이 보입니다.
예를 들어 서버에 about.html 파일이 있고, 사용자가 /about.html을 요청하면 서버는 그 파일을 그대로 돌려줍니다.
요청: GET /about.html
응답: about.html 파일 내용회사 소개 페이지, 간단한 문서 사이트, 이벤트 안내 페이지처럼 자주 바뀌지 않는 화면에 잘 맞습니다.
동적 웹 애플리케이션
동적 웹 애플리케이션은 요청한 사람이나 상황에 따라 다른 결과를 만들어 냅니다. 은행 창구를 떠올리면 쉽습니다. 같은 "잔액 조회"를 요청해도 사용자마다 결과가 다릅니다.
요청: GET /my-page
처리: 로그인한 사용자를 확인함
처리: 데이터베이스에서 해당 사용자의 정보를 찾음
응답: 사용자별 마이페이지 HTML쇼핑몰 장바구니, 로그인한 사용자의 마이페이지, 게시판 글 상세 화면이 여기에 속합니다.
서버는 단순히 파일을 꺼내는 것이 아니라, 요청을 해석하고 데이터를 조회한 뒤 그 결과로 화면을 만들어 응답합니다.
REST API
REST API는 화면보다 데이터에 집중하는 방식입니다. 여기서 API는 "서로 약속한 사용 방법"이라고 생각하면 됩니다. 식당에서 메뉴판을 보고 주문하듯, 클라이언트는 정해진 주소와 방법으로 서버에 요청합니다.
게시판 API라면 다음과 같은 약속을 만들 수 있습니다.
GET /posts 글 목록 조회
GET /posts/1 1번 글 조회
POST /posts 새 글 작성
PUT /posts/1 1번 글 수정
DELETE /posts/1 1번 글 삭제여기서 GET, POST, PUT, DELETE는 HTTP 요청 방식입니다. 주소가 같아 보여도 요청 방식이 다르면 의미가 달라질 수 있습니다. 예를 들어 GET /posts는 글 목록을 조회하라는 뜻이고, POST /posts는 새 글을 작성하라는 뜻입니다.
서버는 보통 JSON으로 응답합니다.
{
"id": 1,
"title": "스프링 첫걸음",
"content": "요청과 응답부터 이해해 봅니다."
}REST API 방식에서는 서버가 화면 전체를 만들지 않아도 됩니다. 서버는 데이터를 주고, 브라우저의 JavaScript나 모바일 앱이 그 데이터를 이용해 화면을 구성합니다.
이 책의 마지막에는 게시판 기능을 REST API 형태로 만들어 볼 것입니다.
데이터베이스는 왜 필요할까
서버가 모든 데이터를 메모리에만 들고 있으면 문제가 생깁니다. 서버를 껐다 켜면 데이터가 사라질 수 있습니다. 여러 사용자의 글, 회원 정보, 주문 내역처럼 오래 보관해야 하는 데이터는 따로 저장해야 합니다.
이때 사용하는 것이 데이터베이스(Database) 입니다. 데이터베이스는 데이터를 정리해서 저장하고, 필요할 때 다시 찾을 수 있게 해주는 저장소입니다. 엑셀 파일처럼 표 형태로 데이터를 관리한다고 생각하면 처음에는 충분합니다.
게시판 글을 저장하는 표는 대략 이렇게 생길 수 있습니다.
posts
--------------------------------
id | title | content
1 | 첫 번째 글 | 안녕하세요
2 | 두 번째 글 | 스프링을 배웁니다서버는 요청을 받을 때마다 필요에 따라 데이터베이스와 대화합니다.
GET /posts
→ 서버가 데이터베이스에 글 목록을 물어봄
→ 데이터베이스가 글 목록을 돌려줌
→ 서버가 JSON으로 응답스프링은 이 과정도 편하게 만들 수 있도록 여러 기능을 제공합니다. 뒤에서 배울 JPA는 자바 객체와 데이터베이스 테이블을 연결해주는 도구입니다.
Servlet: 자바로 웹 요청을 처리하는 기본 방법
자바로 웹 서버를 만들 때 가장 기본이 되는 기술 중 하나가 Servlet입니다. Servlet은 HTTP 요청을 받아서 응답을 만드는 자바 기술입니다.
아주 단순하게 표현하면 이런 역할입니다.
// 실제 Servlet 문법을 줄여서 표현한 예시입니다.
public class PostServlet {
public void doGet(Request request, Response response) {
response.write("글 목록입니다");
}
}위 코드는 Servlet의 역할을 이해하기 위한 단순한 예시입니다. 실제 Servlet 코드는 이보다 더 많은 설정과 규칙이 필요합니다. 중요한 것은 Servlet이 "요청이 들어왔을 때 어떤 자바 코드를 실행할지"를 정하는 방식이라는 점입니다.
Servlet을 실행하려면 Servlet Container가 필요합니다. Container는 그릇이라는 뜻입니다. Servlet Container는 Servlet 객체를 담고 있다가 요청이 오면 알맞은 Servlet을 실행해 줍니다. 대표적으로 Tomcat이 있습니다.
Servlet만으로도 웹 애플리케이션을 만들 수 있습니다. 하지만 기능이 커질수록 반복 작업이 많아집니다.
- 요청 주소를 구분해야 한다.
- 요청 값을 직접 꺼내야 한다.
- 응답 형식을 직접 맞춰야 한다.
- 데이터베이스 연결을 관리해야 한다.
- 여러 객체 사이의 관계를 직접 만들어야 한다.작은 예제에서는 괜찮지만, 실제 서비스에서는 코드가 금방 복잡해집니다.
Spring Framework: 반복되는 웹 개발 문제를 정리한 도구
Spring Framework는 자바 애플리케이션을 더 구조적으로 만들기 위한 프레임워크입니다. 프레임워크는 "자주 쓰는 구조와 규칙을 미리 준비해 둔 틀"이라고 생각하면 됩니다.
스프링은 Servlet 위에서 웹 요청을 더 편하게 처리할 수 있게 도와줍니다. 예를 들어 요청 주소와 실행할 메서드를 연결하는 코드를 간단히 쓸 수 있습니다.
@RestController
public class PostController {
@GetMapping("/posts")
public String posts() {
return "글 목록입니다";
}
}위 코드에서 @GetMapping("/posts")는 GET /posts 요청이 들어오면 posts() 메서드를 실행하겠다는 뜻입니다.
스프링이 해결하려는 문제는 단순히 주소 연결만이 아닙니다. 객체 생성과 연결, 데이터베이스 작업, 트랜잭션, 보안, 테스트처럼 웹 애플리케이션에서 반복되는 문제를 일관된 방식으로 다룰 수 있게 해줍니다.
초보자에게는 이렇게 이해하면 좋습니다.
Servlet
→ 자바로 웹 요청과 응답을 처리하는 기본 기술
Spring Framework
→ Servlet 기반 웹 개발에서 반복되는 일을 줄이고 구조를 잡아주는 도구지금은 "스프링이 내부에서 모든 것을 대신 알아서 해준다"라고 이해하기보다, "반복해서 작성해야 할 많은 코드를 일정한 규칙으로 정리해 준다"라고 이해하는 편이 좋습니다.
Spring Boot: 스프링을 바로 시작하게 해주는 도구
Spring Framework는 강력하지만 예전에는 시작 설정이 꽤 복잡했습니다. 어떤 라이브러리를 추가할지, 서버는 어떻게 연결할지, 설정 파일은 어떻게 작성할지 직접 챙겨야 했습니다.
Spring Boot는 이 시작 과정을 크게 줄여줍니다. Boot라는 이름처럼 스프링 애플리케이션을 빠르게 "부팅"하게 해주는 도구입니다.
Spring Boot 프로젝트에는 보통 이런 실행 코드가 있습니다.
@SpringBootApplication
public class BoardApplication {
public static void main(String[] args) {
SpringApplication.run(BoardApplication.class, args);
}
}이 코드를 실행하면 스프링 애플리케이션이 시작됩니다. 일반적인 Spring MVC 웹 프로젝트에서는 내장 Tomcat도 함께 실행되기 때문에 처음부터 별도의 서버 프로그램을 복잡하게 설치하지 않아도 됩니다.
중요한 점은 Spring Boot가 Spring Framework를 대체하는 완전히 다른 기술이 아니라는 것입니다.
Spring Framework
→ 핵심 기능을 제공하는 본체
Spring Boot
→ Spring Framework를 쉽게 설정하고 실행하게 해주는 도구즉, Spring Boot를 배운다는 것은 결국 Spring Framework를 더 편한 방식으로 배우는 것입니다.
초보자가 Spring Boot부터 시작해도 되는 이유
처음부터 Servlet 설정, XML 설정, 서버 배포 방식을 모두 배우고 나서 Spring Boot로 넘어가야 할까요? 꼭 그렇지는 않습니다.
초보자가 Spring Boot부터 시작해도 되는 이유는 세 가지입니다.
첫째, 실제 개발 현장에서 Spring Boot를 많이 사용합니다. 처음부터 자주 쓰는 방식으로 배우면 학습한 내용을 바로 프로젝트에 적용하기 좋습니다.
둘째, 복잡한 설정을 나중으로 미룰 수 있습니다. 처음에는 요청과 응답, 컨트롤러, 서비스, 데이터베이스 흐름에 집중하는 편이 좋습니다. 설정의 내부 원리는 필요한 순간에 하나씩 이해하면 됩니다.
셋째, Spring Boot가 숨기는 것은 마법이 아니라 기본 설정입니다. 예를 들어 내장 서버를 자동으로 실행하고, 자주 쓰는 라이브러리 조합을 쉽게 추가하게 도와줍니다. 나중에 필요하면 이 설정을 직접 바꿀 수도 있습니다.
다만 Spring Boot를 사용하더라도 큰 흐름은 잊지 말아야 합니다.
클라이언트가 요청한다.
서버가 요청을 받는다.
스프링이 알맞은 코드를 실행한다.
필요하면 데이터베이스를 사용한다.
서버가 응답한다.스프링 문법은 이 흐름 속에서 의미가 생깁니다.
이번 장에서 기억할 것
이번 장의 핵심은 스프링 코드가 아니라 웹 애플리케이션의 흐름입니다.
브라우저 또는 앱
→ HTTP 요청
스프링 서버
→ 요청 해석
→ 비즈니스 로직 실행
→ 데이터베이스 사용
스프링 서버
→ HTML 또는 JSON 응답정적 웹 사이트는 미리 만들어 둔 파일을 그대로 돌려줍니다. 동적 웹 애플리케이션은 요청에 따라 서버가 결과를 만들어 냅니다. REST API는 화면보다 데이터 전달에 집중하며, 보통 JSON으로 응답합니다.
Servlet은 자바 웹 개발의 기본 요청 처리 기술입니다. Spring Framework는 Servlet 기반 개발에서 반복되는 문제를 줄이고 구조를 잡아줍니다. Spring Boot는 Spring Framework를 더 쉽게 시작하고 실행하게 해줍니다.
다음 장에서는 실제 개발 환경을 준비하고 첫 Spring Boot 프로젝트를 만들어 보겠습니다. 그때부터는 오늘 본 큰그림을 코드로 하나씩 확인하게 됩니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.