{ Spring } Spring

Spring 이란?

  • Java 기반 웹 애플리케이션 개발에 유용한 오픈소스 툴 모음.
  • 개발 시간과 코드 작성 시간을 단축하고 유지보수성을 높임.
  • 의존성 주입(Dependency Injection)으로 객체 간의 결합도를 낮추고 확장성을 높임.
  • 의존성이란 어떤 객체가 혼자 일을 처리할 수 없다는 것을 의미

종류

생성자를 통한 의존성 주입
// Pillowcase라는 상품 객체를 생성
Product product = new Pillowcase();

// Store 객체를 생성하면서 의존성(Dependency)으로 Product 객체를 주입
Store store = new Store(product);
setter() method 를 통한 의존성 주입

MVC 패턴 (모델2)

  • Model: 데이터와 비즈니스 로직을 처리
  • View: 사용자 인터페이스를 담당
  • Controller: 사용자의 요청(Request)을 받고 Model과 View 사이의 상호작용을 관리

추가적으로:

  • MyBatis: 데이터베이스 쿼리 처리 라이브러리
  • Kubernetes: 스케일링 및 배포를 위한 컨테이너 오케스트레이션 도구

Maven vs Gradle

  • Maven: XML 기반의 설정 파일(pom.xml)을 사용, 정형화된 구조
  • Gradle: Groovy 또는 Kotlin DSL 기반의 스크립트(build.gradle)를 사용, 가독성 및 유연성에서 우수

HandlerMapping

  • 요청 URL과 이를 처리할 컨트롤러 메서드를 매핑.
  • Spring에서는 @RequestMapping, @GetMapping 등의 어노테이션을 사용하여 매핑을 자동화.

Spring 프로젝트 구조

  • src/main/
  • src/main/webapp: 리소스 자원
  • 뷰페이지 파일 경로로 webapp/WEB-INF/views
  • pom.xml: 메이븐 설정 파일, gradle 에서는 build.gradle
project-root/
├── src/
│   ├── main/                      # 애플리케이션의 주요 소스 코드 및 리소스 디렉터리
│   │   ├── java/                  # Java 소스 파일 (클래스, 서비스, 컨트롤러 등)
│   │   │   └── com/
│   │   │       └── example/
│   │   │           └── App.java  # Java 소스 코드 예시
│   │   ├── resources/             # 설정 파일 및 애플리케이션 리소스 (예: properties, XML)
│   │   │   ├── application.properties
│   │   │   └── logback.xml
│   │   └── webapp/                # 웹 애플리케이션 리소스
│   │       ├── WEB-INF/           # JSP 파일 및 Spring 설정 파일 (보호된 경로)
│   │       │   └── views/         # JSP 뷰 파일 디렉터리
│   │       └── static/            # 정적 리소스 (HTML, CSS, JS 등)
│   └── test/                      # 테스트 관련 소스 코드 디렉터리
│       ├── java/                  # 테스트용 Java 코드
│       └── resources/             # 테스트 리소스 파일
├── pom.xml                        # Maven 설정 파일 (의존성, 플러그인, 빌드 설정 등)
└── target/                        # Maven 빌드 산출물 (JAR, WAR 파일 등)

REST

  • REST(Representational State Transfer): 하나의 URI 는 하나의 고유한 리소스를 대표하도록 설계된다는 의미.
  • 서버에 접근하는 다양한 기기에서 공통으로 데이터를 처리할 수 있는 규칙
  • REST API 는 외부에서 특정 URI 를 통해서 사용자가 원하는 정보를 제공하는 방식이다
  • @RestController - REST 방식의 데이터 처리를 위해서 사용하는 Annotation
  • @RestController 는 JSP 와 같은 뷰페이지를 만들지 않고, 보통 JSON, 문자열, xml 같은 데이터 자체를 웹 브라우저에 반환한다.
  • 예시) 리턴