'스프링 프레임워크 첫걸음' 책을 읽고 배운 개념을 정리한 글입니다 💭
스프링 프레임워크는 어플리케이션을 만들기 위한 기본 틀을 의미합니다. 스프링은 다양한 기능을 제공하는 여러 모듈로 구성되어 있으며 자바 기반의 개발 환경을 더 편리하게 만듭니다.
어플리케이션 설정생성데이터 접근배치 처리인증/허가의존성 주입관점 지향 프로그래밍인터페이스는 스프링이 유연하고 확장 가능한 구조를 제공하는데 필수적으로 사용됩니다.
자바에서 인터페이스는 하위 클래스가 구현해야 하는 기능들의 집합이라고 할 수 있습니다. 인터페이스에서 선언되는 모든 메소드는 비어 있으며 (추상 메소드) 상속을 받는 클래스에서 이 메소드를 반드시 오버라이딩해야 한다는 제약을 둡니다. 한편, 하위 클래스는 인터페이스에 의존하면서도 인터페이스가 가진 메소드를 다양한 방식으로 구현할 수 있기 때문에 유연성과 다형성을 제공받게 됩니다.
자바로 정의한 인터페이스는 메소드 시그니처(이름, 매개변수 목록, 반환 타입)와 상수를 선언합니다. 선언된 메소드와 상수는 모두 암묵적으로 public 접근 제어자를 가집니다. 또한 메소드는 abstract를, 변수는static과 final을 한정자로 갖습니다.
스프링 프레임워크는 이러한 인터페이스의 개념을 도입하여 의존성 주입, 빈 관리, AOP 등의 고급 기능을 제공합니다. 이를 통해 개발자는 공통적인 계약을 정의하는 코드를 작성하고, 이 코드를 구현하는 다양한 구현체를 쉽게 생성할 수 있습니다.
어플리케이션은 데이터를 리스트 형태로 주고받거나, 처리하거나, 저장하는 경우가 많기 때문에 스프링 프레임워크를 사용하기 전에 익혀야 할 주요 개념입니다.
여러 데이터를 처리할 때 배열을 사용하면 크기가 고정되지만, 컬렉션을 사용하면 크기를 동적으로 조절할 수 있습니다. 컬렉션은 자바에서 제공하는 프레임워크이며, 리스트, 세트, 맵이라는 인터페이스를 제공합니다. 이 중에서 리스트는 순서를 보장하며 값 중복을 허용한다는 특징이 있는 인터페이스입니다.
이러한 리스트의 특징은 스프링 프레임워크 동작 원리에 적용되어 아래와 같은 작업을 원활하게 수행할 수 있도록 합니다.
HTTP는 웹 어플리케이션과 RESTful 서비스에 사용되는 기본적인 약속(프로토콜)입니다. 스프링 프레임워크로 웹 개발을 하기 위해서는 해당 개념을 이해하는 것이 중요합니다.
사용자가 웹 브라우저에 URL을 입력하면 HTTP 요청이 웹 서버로 전달되고, 웹 서버는 요청을 처리한 후 HTTP 응답을 브라우저로 반환하여 클라이언트가 볼 수 있게 합니다. 이 과정에서 Spring MVC를 사용하면 HTTP 요청 처리를 간단히 구현할 수 있습니다.
✅ GET 요청 처리: URL 뒤에 쿼리 스트링으로 데이터를 담아 전송
@RestController
public class ExampleController {
@GetMapping("/search")
public ResponseEntity<String> searchUser(@RequestParam String name, @RequestParam String tel){
return ResponseEntity.ok("info searched");
}
}
해당 코드를 실행하면 '/search?name=value&tel=value'와 같은 URL이 생성됩니다. URL을 웹 브라우저에 입력하면 info searched라는 텍스트가 표시됩니다.
✅ POST 요청 처리: request body에 데이터를 담아 전송
@RestController
public class ExampleController {
@PostMapping("/submit")
public ResponseEntity<String> submitInfo(@RequestBody UserInfo userInfo){
return ResponseEntity.ok("info received");
}
}
class UserInfo {
private String name;
private String tel;
// getter와 setter
POST 요청은 웹 브라우저를 통해 직접 실행할 수 없고, Postman과 같은 도구로 실행해서 JSON 형태의 응답을 반환받을 수 있습니다.
스프링 프레임워크는 의존성 주입(DI)과 관점 지향 프로그래밍(AOP)을 주요 기능으로 제공합니다.
먼저, DI 컨테이너는 애플리케이션 구성 요소 간의 의존성을 자동으로 주입하여 코드 작성 및 관리를 쉽게 만듭니다.
DI 컨테이너로 의존성 주입하는 과정은 다음과 같습니다.
또한, 보안, 트랜잭션 관리, 로깅, 예외 처리 등 애플리케이션에서 공통으로 자주 사용되는 기능Advice을 모아 구현할 수 있는 기본 틀을 제공하므로, 개발자는 핵심 로직중심적 관심사 구현에 집중할 수 있습니다.