Spring Framework/토비의 스프링 10

Chapter 08. 외부 설정을 이용한 자동 구성

Environment 추상화와 프로퍼티 지금까지 자동구성에 대한 과정을 살펴봤다. 자동 구성에 의해 만들어지는 빈 오브젝트에는 보통 기본값이 들어가있다. ex) port: 8080 cf) Environment 인터페이스 스프링 애플리케이션의 환경 설정과 관련된 정보를 제공한다. 프로퍼티 값을 가져오거나 환경 변수 값을 조회하는 메서드를 제공한다. getProperty() 스프링은 단일화된 방식으로 접근할 수 있도록 설계되어있다. 1) standardEnviroment System propertyies System Enviroment Variables 2) standardServletEnvironment: 웹 환경일 때 사용 가능 ServletConfig Parameters servletcontext Pa..

Chapter 07. 조건부 자동 구성

@ConditionalOnMissingBean 스타터와 Jetty 서버 구성 추가 Jetty를 서블릿 컨테이너로 사용해보자. 조건부 자동 구성: configuration 클래스에 infra structure 역할을 하는 빈의 구성 정보를 담아서 기술 종류별로 잘게 쪼개어 여러 개의 클래스를 만들어 놓고 외부 설정 파일에 이 목록을 나열하고 파일을 읽어서 해당하는 configuration 클래스를 부트가 시작할 때 빈으로 등록한다. 자동 구성 configuration 클래스들이 스프링 컨테이너에 들어있다. 스프링 부트에 내장된 @AutoConfiguration 애너테이션은 상위에 @Configuration이 있다. 다음과 같이 파일을 살펴 보면 144개의 파일 위치 정보가 들어있다. 부트가 켜지면 144개..

Chapter 06. 메타 애너테이션과 합성 애너테이션

메타 애너테이션 메타 애너테이션이란? 메타 애너테이션: 애너테이션을 위한 애너테이션을 말한다. ex) @Component @Service, @Controller 를 타고 들어가면 상위에 @Component가 붙어있는 걸 알 수 있다. 메타 애너테이션이 불은 클래스를 사용하면 기능적으로는 차이가 없다. 그런데, @Service / @Controller와 같이 다른 이름을 붙이는 것은 WebMvc 에서 컨트롤러 / 서비스 어느 역할인지를 명확히 할 수 있다. 메타 애너테이션에는 상속 개념이 없다. 에너테이션에는 @Retention(RetentionPolicy.RUNTIME), @Target 을 줘야한다. @Retention(RetentionPolicy)의 디폴트 값은 RetentionPolicy.CLASS ..

Chapter 05. DI와 테스트, 디자인 패턴

테스트 코드를 이용한 테스트 서버를 띄우고 http 요청과 응답을 확인할 수 있다. 그런데 매번 직접 확인하는 것은 번거로운 일이다. ex) 헤더, 바디 등 테스트 코드를 사용하면 효율적이다. Spring initializer를 통해 애플리케이션을 처음 세팅하면 "test" 폴더 안에 TestClass 가 생성된다. 애플리케이션이 기본적으로 스프링 부트를 기반으로 작동한다. API 요청 라이브러리 RestTemplate vs TestTemplate RestTemplate: 정상이 아닌 경우, 예외를 던진다. TestRestTemplate: 응답 자체를 그대로 가져오기 때문에 에러가 난 경우 사용할 때 적합하다. status code, content-type 이 뭔지 파악할 수 있어 편리하다. Assert..

Chapter 04. 독립 실행형 스프링 애플리케이션

스프링 컨테이너 사용 지난 시간까지는 독립 실행이 가능한 서블릿 애플리케이션을 만들었다. 그러면 독립 실행형 스프링 애플리케이션은 어떻게 만들 수 있을까? 1) POJO(Plain Old Java Object): 비지니스 로직을 담은 Java 오브젝트 (상속 X, ) 2) 구성 정보를 담은 Configuration 메타 데이터 에러가 나지 않는한 서블릿 컨테이너가 기본적으로 Http response 200을 세팅해서 넣어준다. (생략 가능) Ex) GenericApplicationContext applicationContext = new GenericApplicationContext(); applicationContext.registerBean(HelloController.class); applicati..

Chapter 03. 독립 실행형 서블릿 애플리케이션

Containerless 개발 준비 컨테이너 리스 방식은 서블릿 컨테이너와 관련된 번거롭고 복잡한 작업들에 대해 개발자가 더이상 신경쓰지 않도록 스프링 컨테이너에 올라가는 빈에만 집중할 수 있도록 해준다. main() 메서드 하나만 실행시켰는데 Tomcat(Java의 서블릿 컨테이너)이 뜨고 스프링 컨테이너도 뜬다. 애플리케이션을 동작시킨다. 그런데 만약, Spring Boot가 없다면? 서블릿 컨테이너 띄우기 서블릿 컨테이너(Servlet container)란? 자바의 표준 기술인 servlet에 대해 서블릿을 구현한 컨테이너를 말하며 종류가 다양하다. ex) Tomcat springio를 통해 스프링 프로젝트를 셋업하면 자동으로 내장형 톰캣(embedded tomcat)이라는 라이브러리가 제공된다. ..

Chapter 02. 스프링 부트 시작하기

스프링 부트 개발 환경 스프링 부트 2.7.6 JDK 8/11/17 설치 Java 11 Gragle - groovy Spring Boot 2.7.6 group: tobyspring artifact: helloboot jar Hello API 테스트 http request를 생성하고 http response를 확인한다. 웹 브라우저 개발자 도구 curl intelliJ ultimate http request Postman API platform: JUnit test HTTPie content HTTP 요청과 응답 웹 애플리케이션의 동작 구조: 웹 클라이언트가 요청을 보낸다. 웹 컨테이너는 해당 요청을 처리할 컴포넌트를 찾아서 요청을 위임한다. 컴포넌트는 요청을 분석하고 처리한다. 결과로 만들어진 응답이 클..

Chapter 01. 스프링 부트 살펴보기

스프링 부트(Spring Boot)란? 스프링 부트는 스프링을 기반으로 실무 환경에 사용 가능한 수준의 독립 실행형 애플리케이션을 복잡한 고민없이 빠르게 작성할 수 있게 도와주는 여러가지 도구 모음이다. 알아서 결정해준다. 스프링과 스프링 부트는 다르다. 애플리케이션을 만들 수 있도록 도와주는 기술이다. 예전의 엔터프라이즈 애플리케이션은 web appliction archive 라는 와? 파일 같은 형태로 패키징해서 서버에 배포한다. 그 위에서 동작시키는 방식으로 사용했다. 그런데 스프링 부트는 .java, .jar? 를 이용해서 애플리케이션 전체를 바로 실행 가능하다. 스프링 부트(Spring Boot) 목표 빠르고 광범위한 영역의 스프링 개발 경험을 제공한다. 강한 주장을 가지고 즉시 적용 가능한 기..

Chapter 01. Object와 의존 관계

1.1 DAO DAO(Data Access Object): DB를 사용해서 데이터를 조회하거나 조작하는 기능만 하도록 만드는 오브젝트을 말한다. 1.1.1 User public class User { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setP..

머릿말

Spring이란 무엇인가? Java Enterprise application 개발에 사용되는 프레임워크를 말한다. 애플리케이션의 바탕이 되는 틀과 공통 프로그래밍 모델, API를 제공한다. 애플리케이션의 바탕이 되는 틀(Spring Container): 스프링 컨테이너 또는 ApplicationContext 라고 불리는 스프링 런타임 엔진을 제공한다. 독립적 동작할 수도 있고 보통 웹 모듈에서 동작하는 서비스나 서블릿으로 등록해서 사용한다. 공통 프로그래밍 모델: IoC/DI, 서비스 추상화, AOP 1) 스프링은 유연하고 확장성있는 코드를 만들 수 있도록 도와주는 객체지향 설계 원칙, 디자인 패턴의 핵심원리를 담고 있는 IoC, DI를 근간으로 한다. IoC, DI 방식을 따라 작성해서 스프링이 제공하..