본문 바로가기

Java, Kotlin, Spring111

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.
Spring - 프로파일, 프로퍼티 Spring IoC - Enviornment ApplicationContext 가 가진 속성 중 Enviornment 를 알아보자. 간단히 말하면 프로파일 (빈들의 모음), 프로퍼티 (환경 설정) 설정을 도와준다. 프로파일 ApplicationContext 는 spring IoC 최상위 클래스인 BeanFactory 뿐만 아니라 EnvironmentCapable 도 상속받는다. 이 외에도 여러가지 클래스를 상속받는다. 따라서 getEnviornment() 메소드를 사용할 수 있다. Enviornment 에서 프로파일을 받아올 수 있는데, 프로파일이란 빈들이 모인 그룹을 말한다. Enviornment의 역할은 활성화(active) 할 프로파일을 확인하고 설정을 도와주는 것이다. 따라서 사용하고 싶은 특정 .. 2021. 1. 11.
Spring IoC - ComponentScan, Bean scope ComponentScan 스프링부트 어노테이션인 @SpringBootApplication 은 @ComponentScan 을 포함하고 있다. @SpringBootApplication 이 Application 클래스 위에 붙어있다고 해보자. 컴포넌트 스캔은 빈을 찾아 등록하는데, 스캔하는 범위는 Application 와 같은 경로에 있는 모든 파일 / 하위 파일들이다. @ComponentScan 은 @Repository, @Service, @Controller, @Configuration 을 포함하고 있다. 또한 스캔할 애노테이션을 필터할 수 있는 기능도 제공한다. 컴포넌트 스캔에서 초기에 등록해야할 빈이 많을 경우, 초기 구동 시간이 오래 걸릴 수 있다. 하지만 일단 구동이 되면 후에 느려지진 않는다. 이.. 2021. 1. 10.
Spring IoC - @Autowired @Autowired 의존성을 주입할 때 사용한다. 필드, 세터, 생성자 위에 붙여 의존성을 주입할 수 있다. A클래스에 B클래스를 연결지어 보자(의존성을 주입해보자) 이 때, A는 빈에 등록되었고, B는 빈에 등록되어있지 않다. A클래스의 생성자에 @Autowired를 붙일 경우, 주입하려는 B클래스가 빈에 등록되어 있지않으므로 바로 에러가 난다. 파라미터로 받는 B클래스가 빈 공장에서 찾을 수 없으므로 생성자가 생성되지 않아 A클래스가 만들어지지 않기 때문이다. A의 필드나 세터 위에 붙일 경우도 에러가 난다. 하지만 이 때는 required 옵션으로 에러발생은 방지할 수 있다. @Autowired(required = false) required 기본값은 true 이다. 생성자에는 이 옵션을 넣어봐도 .. 2021. 1. 10.
Spring IoC - 빈 등록 방법 5가지 스프링 2003년 등장해서, java EE 와 호환관계이다. 서블릿 기반 애플리케이션을 만들 때 사용한다. 스프링 5부터는 WebFlux 지원으로 서블릿 기반 아닌 애플리케이션도 만들 수 있게 되었다. 디자인 철학 모든 선택은 개발자의 몫이다. 다양한 관점을 지향한다. 하위 호환성을 지킨다. API를 신중히 설계한다. 높은 수준의 코드를 지향한다. 컨테이너와 빈 IoC(Inversion of Control, 제어의 역전)은 의존성주입 (Dependency Injection)이라고도 하며 의존성있는 객체를 직접 만드는 것이 아닌, 주입 받아 사용하는 방법이다. BeanFactory 는 스프링 IoC 컨테이너의 가장 최상위 인터페이스이다. 빈이란? 빈(bean)은 스프링 IoC 컨테이너가 관리하는 객체이다... 2021. 1. 10.
728x90