[북스터디] 스프링 프레임워크 첫걸음 01

jina·2024년 6월 21일

Spring

목록 보기
3/8

'스프링 프레임워크 첫걸음' 책을 읽고 배운 개념을 정리한 글입니다 💭

Spring Framework 의미

스프링 프레임워크는 어플리케이션을 만들기 위한 기본 틀을 의미합니다. 스프링은 다양한 기능을 제공하는 여러 모듈로 구성되어 있으며 자바 기반의 개발 환경을 더 편리하게 만듭니다.

Spring Framework 구성

  • Spring Boot 어플리케이션 설정
  • 스프링 프로젝트
    • Spring MVC 생성
    • Spring Data 데이터 접근
    • Spring Batch 배치 처리
    • Spring Security 인증/허가
  • 스프링 코어
    • Spring DI 의존성 주입
    • Spring AOP 관점 지향 프로그래밍

Spring Framework 이해에 필요한 개념

📌 인터페이스

인터페이스는 스프링이 유연하고 확장 가능한 구조를 제공하는데 필수적으로 사용됩니다.

자바에서 인터페이스는 하위 클래스가 구현해야 하는 기능들의 집합이라고 할 수 있습니다. 인터페이스에서 선언되는 모든 메소드는 비어 있으며 (추상 메소드) 상속을 받는 클래스에서 이 메소드를 반드시 오버라이딩해야 한다는 제약을 둡니다. 한편, 하위 클래스는 인터페이스에 의존하면서도 인터페이스가 가진 메소드를 다양한 방식으로 구현할 수 있기 때문에 유연성다형성을 제공받게 됩니다.

자바로 정의한 인터페이스는 메소드 시그니처(이름, 매개변수 목록, 반환 타입)와 상수를 선언합니다. 선언된 메소드와 상수는 모두 암묵적으로 public 접근 제어자를 가집니다. 또한 메소드는 abstract를, 변수는staticfinal을 한정자로 갖습니다.

  • public: 모든 클래스에서 접근 가능
  • abstract: 반드시 구현되도록 강제
  • static: 클래스 레벨에서 공통으로 사용
  • final: 초기화된 후 변경 불가

스프링 프레임워크는 이러한 인터페이스의 개념을 도입하여 의존성 주입, 빈 관리, AOP 등의 고급 기능을 제공합니다. 이를 통해 개발자는 공통적인 계약을 정의하는 코드를 작성하고, 이 코드를 구현하는 다양한 구현체를 쉽게 생성할 수 있습니다.

📌 리스트

어플리케이션은 데이터를 리스트 형태로 주고받거나, 처리하거나, 저장하는 경우가 많기 때문에 스프링 프레임워크를 사용하기 전에 익혀야 할 주요 개념입니다.

여러 데이터를 처리할 때 배열을 사용하면 크기가 고정되지만, 컬렉션을 사용하면 크기를 동적으로 조절할 수 있습니다. 컬렉션은 자바에서 제공하는 프레임워크이며, 리스트, 세트, 맵이라는 인터페이스를 제공합니다. 이 중에서 리스트는 순서를 보장하며 값 중복을 허용한다는 특징이 있는 인터페이스입니다.

이러한 리스트의 특징은 스프링 프레임워크 동작 원리에 적용되어 아래와 같은 작업을 원활하게 수행할 수 있도록 합니다.

  • 순차 처리: 특정 인터페이스를 구현한 모든 빈을 리스트로 주입받아 순차적으로 처리합니다.
  • 반복 처리: 스프링 MVC 컨트롤러는 클라이언트에게 받은 데이터나 DB에서 조회한 데이터를 리스트 형태로 받아 순차적으로 하나씩 처리하는 작업을 반복합니다.
  • 일괄 처리: 스프링 Batch는 대량의 데이터를 DB에서 읽고 리스트 형태로 저장하고, 순서와 중복을 보장한 상태로 한 번에 처리합니다.

📌 HTTP

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 형태의 응답을 반환받을 수 있습니다.

Spring Framework 주요 기능

스프링 프레임워크는 의존성 주입(DI)과 관점 지향 프로그래밍(AOP)을 주요 기능으로 제공합니다.

✅ DI

먼저, DI 컨테이너는 애플리케이션 구성 요소 간의 의존성을 자동으로 주입하여 코드 작성 및 관리를 쉽게 만듭니다.

DI 컨테이너로 의존성 주입하는 과정은 다음과 같습니다.

  1. 인스턴스 생성이 필요한 클래스에 어노테이션 부여
    @Controller, @Service, @Repository, @Component
  2. 스프링 프레임워크가 시작할 때 패키지 스캔
  3. 어노테이션이 있는 클래스 추출
  4. 대상 클래스의 인스턴스 생성
  5. 생성된 인스턴스를 이용하고 싶은 클래스에 참조 필드를 선언 @Autowired

✅ AOP

또한, 보안, 트랜잭션 관리, 로깅, 예외 처리 등 애플리케이션에서 공통으로 자주 사용되는 기능Advice을 모아 구현할 수 있는 기본 틀을 제공하므로, 개발자는 핵심 로직중심적 관심사 구현에 집중할 수 있습니다.

  • @Transactional 어노테이션을 사용해서 트랜잭션이 정상 종료하면 커밋하고 예외가 발생하면 롤백하는 기능을 제공합니다.
  • 원하는 AOP 기능을 직접 구현하는 어노테이션을 제공합니다.
    1. @Aspect: 클래스를 AOP 어드바이스로 지정하여 메서드 실행 전후에 추가 기능을 적용합니다.
    2. @Component: 스프링 컨텍스트에 빈으로 등록합니다.
    3. @Before: 메서드 실행 전에 특정 로직을 수행합니다.
    4. @After: 메서드 실행 후에 특정 로직을 수행합니다.
    5. @EnableAspectJAutoProxy: AOP 설정을 활성화하여 애플리케이션에서 AOP 기능을 사용 가능하게 합니다.
profile
오늘의 기록은 내일의 보물

0개의 댓글