프레임워크 · Spring

Spring

Java로 백엔드 서버를 만들 때 가장 널리 쓰는 표준 프레임워크입니다. 서버 구동·DB 연결·보안 같은 번거로운 설정을 자동으로 잡아주고, 개발자는 비즈니스 로직에 집중하게 해줍니다.

한 줄로

Spring Boot? 는 복잡한 설정을 자동(auto-configuration)으로 처리하고, DI(의존성 주입)? 로 객체들을 알아서 연결해주는 Java? 프레임워크입니다. @SpringBootApplication 하나로 내장 서버가 떠서 바로 API를 받을 수 있어요.

직접 부품을 사서 PC를 조립하는 대신, 전원만 켜면 바로 쓰는 완제품 PC를 받는 것과 비슷합니다. 필요하면 부품(설정)을 바꿀 수도 있지만, 기본값만으로도 잘 돌아가요.
왜 / 어디에 쓰나
  • 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?)이 궁금하면 다음 토픽으로 넘어가세요.

다음 단계