본문 바로가기

Java, Kotlin, Spring/Spring, Spring Boot53

Springboot 자동설정(AutoConfiguration) 자동 설정 @SpringBootApplication 안에 여러 어노테이션이 있다. 조금 살펴보면, @SpringBootConfiuration 은 기존 @Configuration 을 사용하며, 기능도 비슷하다. 빈 설정을 제공한다. @ComponentScan 는 어노테이션이 붙은 클래스의 같은 패키지 내(히위 패키지 포함)에서 컴포넌트들을 스캔하여 빈을 등록한다. 컴포넌트라 함은 @Component 애노테이션을 말하고, 이는 @Configuration, @Repository, @Service, @Controller, @RestController 를 포함한다. @EnableAutoConfiguration 은 추가적으로 빈을 한 번더 읽어 등록한다. 기본적으로 @Configuration 가 들어있고, 스프링부.. 2021. 1. 14.
Springboot 프로젝트 생성, 이니셜라이져 Springboot 001 스프링부트 목표 빠르고 폭넓은 사용성 컨벤션으로 정해져있는 설정 사용, 여기에 사용자 설정 추가 쉽게 가능 비즈니스 로직에 추가로 다양한 기능 제공 코드 생성하지 않고, xml 설정 필요없다. 스프링부트 프로젝트 생성 Intellij > File > New > Project Gradle > Name(ArtifactId) 및 GroupId 작성 > Finish gradle.build plugins { id 'java' id 'org.springframework.boot' version '2.4.1' id 'io.spring.dependency-management' version "1.0.10.RELEASE" } group 'me.wordbe' version '1.0-SNAPSHO.. 2021. 1. 14.
Spring - null-safety NullPointException 을 막는 것을 목표로 한다. Intellij 의 도움을 받는다. 스프링 5에 추가된 Null 관련 에노테이션으로 @NonNull, @Nullable, @NonNullApi (패키지 레벨 설정), @NonNullFields (패키지 레벨 설정) 이 있다. import org.springframework.lang.NonNull; import org.springframework.stereotype.Service; @Service public class RedEventService { @NonNull public String createEvent(@NonNull String name) { return "red " + name; } } NonNull 을 사용하여 null 값이 들.. 2021. 1. 13.
Spring - AOP(관점지향 프로그래밍) Aspect-oriented Programming, 관점지향 프로그래밍 흩어진 관심사(Crosscutting concerns) 를 유기적으로 연결되도록 프로그래밍하는 것이다. 코드면에서는 중복된 코드가 제거되어 효율적이고, 비즈니스적으로는 관련된 업무가 연결되어 쉽게 통제가 가능할 것이다. 여러 프로그래밍언어에서 AOP 구현체(implementation)가 있는데 java에서는 AspectJ 가 널리 쓰인다. 스프링에서는 스프링 AOP를 사용한다. 스프링 AOP는 AspectJ 보다 제한적인 기능을 제공한다. 개념, 용어 Aspect : 기존 클래스들의 유기적 관계를 재정리할 새로운 관점 클래스들을 말한다. 한 관점은 하나의 모듈이 되는데 이 안에 advice와 pointcut 이 포함된다. Advice.. 2021. 1. 13.
Spring - spEL(스프링 Expression Language) Spring - spEL, 스프링 표현어 스프링 EL(Expression Language) 란 객체 그래프를 조회하고 조작하는 기능을 제공하는 언어를 말한다. spEL은 모든 스프링 프로젝트에서 사용하는 expression language로 만들었다. 문법이나 규칙은 배우기가 쉽다. #{"표현식"} ${"프로퍼티"} 이런식으로 특정 객체를 가져와서 문자열처럼 사용할 수 있고, 계산도 할 수 있다. 표현식은 프로퍼티를 포함할 수 있지만, 반대로는 불가능하다. 가령 #{blue.data} + 1 은 가능하다. 어디에 사용되는가 @Value 애노테이션 안에 spEL을 쓰면, 아래 필드값에 결과가 주입된다. @ConditionalOnExpression 어노테이션에서도 사용된다. 스프링 시큐리티의 경우 메소드 시.. 2021. 1. 13.
Spring - 데이터 바인딩 데이터 바인딩 데이터 바인딩이란 서로 다른 타입의 데이터를 함께 묶어 동기화하는 기법이다. 이 글에서는 서로 다른 유형의 데이터를 넣었을 때 알아서 원하는 유형으로 연결 시켜주는 것이라고 생각하자. 예를들면 Object 형에서 String 형으로 말이다. 스프링에서 데이터 바인딩을 하는 방법은 다양하다. PropertyEditor, Converter, Formatter 3가지 모두 사용가능하지만, 포매터를 추천한다. PropertyEditor DataBinder 인터페이스 xml 설정 값을 빈으로 넣을 때도 사용되고, spEL 에서도 사용된다. 프로퍼티 값을 타겟 객체에 설정하는 기능을 제공하고, 사용자 입장에서는 사용자 입력값을 애플리케이션 도메인 모델에 동적으로 변환하여 넣어주는 기능을 제공한다. 입.. 2021. 1. 13.
Spring - Validation Validation 추상화 org.springframework.validation.Validator 주로 spring MVC 에서 사용하지만, 웹 MVC 전용은 아니다. 애플리케이션에서 사용하는 객체 검증을 위한 일반적 인터페이스이다. 예제를 만들기 위해 이벤트를 하나 생성한다. @Getter @Setter public class RedEvent { Integer id; String title; } (lombok 을 사용하여 자동 게터, 세터를 생성한다고 하자) 이제 위 이벤트를 가지고 Validator 를 구현해보자. Validator를 사용하려면 두 가지 메소드를 구현해야 한다. supports, validate public class RedEventValidator implements Validat.. 2021. 1. 12.
Spring - ResourceLoader ApplicationContext 은 여러가지 클래스를 상속받는다. 그 중 ResourceLoader 를 알아보자. 리소스를 읽어오는 기능을 제공한다. ResourceLoader Resourceloader 를 통해 resources 폴더 안의 리소스들을 읽을 수 있다. classpath 는 기본적으로 target/classes 로 되어있다. import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.io.Res.. 2021. 1. 12.
Spring - ApplicationEventPublisher ApplicationContext 은 여러가지 인터페이스를 상속받는다. 그 중 ApplicationEventPublisher 를 알아보자. 이벤트 프로그래밍에 필요한 인터페이스를 제공한다. ApplicationEventPublisher 옵저버 패턴 구현체로, 이벤트 기반 프로그래밍을 할 때 유용하다. 간단한 예제는 아래와 같다. 1) 이벤트를 만든다. 2) 이벤트를 Listener 에 등록시킨다. 3) AppRunner 에서 이벤트를 발생시키고, 위에서 등록한 이벤트 리스너가 이벤트를 작동시키도록 한다. 1) 이벤트 생성 public class BlueEvent extends ApplicationEvent { private int data; public int getData() { return data;.. 2021. 1. 12.
Spring - Messagesource ApplicationContext 은 여러가지 클래스를 상속받는다. 그 중 MessageSource 를 알아보자. 여러 메시지 기능(다국어, 캐시 등)을 제공한다. MessageSource Spring은 다국어 기능을 지원한다. MessageSource 는 빈으로 등록되어 있는 클래스이기 때문에, @Autowired 로 의존성 주입이 가능하여 바로 끌어다 사용할 수 있다. 여기서 getMessage() 메소드를 사용하면 된다. 다국어 메시지 설정은 프로퍼티 파일을 생성하면 된다. messages_ko_KR.properties greeting=안녕 {0} messages.properties greeting=Hello {0} Runner로 테스트를 해보자. @Component public class AppR.. 2021. 1. 12.
728x90