Spring
Java로 백엔드 서버를 만들 때 가장 널리 쓰는 표준 프레임워크입니다. 서버 구동·DB 연결·보안 같은 번거로운 설정을 자동으로 잡아주고, 개발자는 비즈니스 로직에 집중하게 해줍니다.
한 줄로
Spring Boot? 는 복잡한 설정을 자동(auto-configuration)으로 처리하고,
DI(의존성 주입)? 로 객체들을 알아서 연결해주는 Java? 프레임워크입니다.
@SpringBootApplication 하나로 내장 서버가 떠서 바로 API를 받을 수 있어요.
- REST API 서버 — 프론트엔드가 호출할 HTTP/JSON API를 만든다
- 객체 연결 자동화 — DI? 로 서비스·리포지토리를 직접
new하지 않고 주입받는다 - 설정 자동화 — 톰캣(내장 서버)·DB 풀·보안 필터를 알아서 구성
- 표준 생태계 — Security·Data·Validation 등 검증된 모듈을 조립해 쓴다
핵심 개념 4가지
| 개념 | 설명 |
|---|---|
| @SpringBootApplication | 앱의 진입점. 이 한 줄이 자동 설정과 컴포넌트 스캔을 켜고 내장 서버를 띄운다. |
| 빈 & DI? | 객체를 직접 만들지 않고 스프링이 만들어 주입. 보통 생성자 주입(@RequiredArgsConstructor)을 쓴다. |
| @RestController? | HTTP 요청을 받아 처리하고 반환값을 JSON으로 응답하는 웹 진입점. |
| 레이어드 구조 | 컨트롤러(요청) → 서비스(로직) → 리포지토리?(DB) 로 책임을 층층이 나눈다. |
앱 진입점
@SpringBootApplication
public class StudyApplication {
public static void main(String[] args) {
SpringApplication.run(StudyApplication.class, args);
}
}이 프로젝트의 백엔드는 Spring Boot 3.3 / Java 17 이며, 포트 8084 에서 동작합니다.
DI와 컨트롤러
생성자 주입을 쓰면 필요한 객체를 직접 만들지 않고 스프링이 넣어줍니다. final 필드만 선언하면 Lombok @RequiredArgsConstructor 가 생성자를 만들어 줘요.
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor // final 필드를 생성자 주입
public class UserEndpoint {
private final UserRepo userRepo; // 스프링이 알아서 주입
@GetMapping("")
public PageDTO<UserDTO> list(UserFilter f, Pageable p) {
// ... userRepo 로 조회 후 DTO 로 변환해 응답
}
}레이어드 아키텍처
HTTP 요청 │ ▼ @RestController ← 요청/응답 (DTO ↔ JSON) │ ▼ Service ← 비즈니스 로직, @Transactional │ ▼ Repository ← DB 접근 (JPA / QueryDSL) │ ▼ PostgreSQL
각 층이 자기 책임만 맡으면 코드가 읽기 쉽고 테스트도 편해집니다. 다만 이 학습 프로젝트는 서비스 층이 얇아서 컨트롤러가 리포지토리를 바로 부르는 곳도 있습니다.
이 프로젝트의 백엔드 전체가 Spring Boot 위에서 돌아갑니다. 여기서는 개념만 잡고, 실제 코드와 깊은 내용은 백엔드 트랙에서 다룹니다: be-01 Spring 기초 부터 be-06 보안 · JWT 까지 이어집니다. 데이터 접근(JPA?)이 궁금하면 다음 토픽으로 넘어가세요.
다음 단계
- 스프링의 심장, 객체 자동 연결부터 → Spring 1 · IoC · DI · 빈
- 객체로 DB 테이블을 다루는 방법 → JPA
- Spring이 쓰는 언어 → Java
- 실제 코드로 배우는 백엔드 → be-01 Spring 기초