2020-12-03FrameWork / 스프링 / 외전Spring - Null-Safety Null관련 어노테이션 NullPointException이 발생하는 것을 방지하기 위해 Spring Framework 5 버전부터 이를 방지하는 어노테이션을 지원하고 있다. @NonNull @Nullable @NonNullApi(패키지 레벨) @NonNullFields(패키지 레벨) 자세히 보기
2020-11-23FrameWork / 스프링 / 외전Spring - SPEL(SPring Expression Language) AOP(Aspect-Oriented Programming) 프로그래밍에서 발생하는 공통적인 기능을 구현할 때 코드가 중복되지 않도록 모듈화 하는 프로그래밍 기법을 관점지향적 프로그래밍(AOP)라고 한다. 기능별로 Aspect를 만들어 독립적으로 정의하고, 정의된 기능을 어디서 적용해야하는지 명시함으로서 클래스 내부에 구현할 필요 없이 기능을 사용할 수 있다. Java에서는 다중 상속이 불가능하여 AOP가 도입되었다. 자세히 보기
2020-11-13FrameWork / 스프링 / 외전Spring - SPEL(SPring Expression Language) Spring Expression Language(SpEL) 자바에서 사용할 수 있는 Expression Language를 Spring에서 개선한 표현 언어. SpEL은 기존 EL로부터 메소드 호출, 빈 참조, 객체 그래프와 같은 기능을 추가하여 제공한다. SpEL은 Parser와 같은 클래스를 생성한다면 Spring과 연결되지 않고 독립적으로 사용할 수 있다. 자세히 보기
2020-11-12FrameWork / 스프링 / 2장 - 추상화Spring Ch 2. 추상화 - 데이터 바인딩 추상화(PropertyEditor, Converter, Formatter) 데이터 바인딩 Web Application을 개발할 수록 코드는 점점 복잡해지고 여러 스크립트의 객체와 화면으로 입력받는 데이터의 타입이 일치해지기 어려워진다. 예를 들어, 웹에서 form 태그로 값을 입력받아 처리하고자 할 때 입력받는 값은 String이지만 실제 사용되는 데이터는 Date, Boolean 또는 정의된 클래스 객체의 타입으로 사용되며 이를 처리하는 코드를 작성해야한다. 입력 받은 문자열을 객체에 맞는 데이터로 변환하는 작업을 간편하게 하기 위해 Spring에서는 데이터 바인딩 기능을 갖는 인터페이스를 추상화하여 제공하고 있다. PropertyEditor PropertyEditor는 Spring 3.0버전 전까지 사용되고 있던 데이터 바인딩 인터페이스이다. Text-Object간의 변환을 수행할 수 있도록 getAsText, setAsText 메소드를 제공하고 있다. 그러나 멀티 스레드로 동시에 접근이 이루어질경우 데이터가 변경되기 쉬워 싱글톤으로 사용할 수 없으며 controller에 등록해서 사용해야 한다. 자세히 보기
2020-11-12FrameWork / 스프링 / 2장 - 추상화Spring Ch 2. 추상화 - Validation 추상화 Validation 객체를 검증하기 위해 사용되는 인터페이스. 웹, 서비스 등 모든 계층에 관계가 없어 일반적으로 사용할 수 있다는 장점이 있다. Bean Validation의 Annotation으로 객체의 데이터를 검증할 수 있다. Validator는 기본적으로 다음 두 함수를 오버라이드하여 검증해야한다. boolean supports(class<?>) - 검증할 객체의 타입을 체크하는 함수. void validate(Object, Errors) - 실제 검증이 이루어지는 함수. 자세히 보기
2020-11-11FrameWork / 스프링 / 2장 - 추상화Spring Ch 2. 추상화 - ResourceLoader와 Resource 추상화 Resource 추상화 java는 java.net.URL이라는 URL 클래스로 리소스에 접근할 수 있다. classPath 또는 ServletContext 기준 상대경로의 리소스(low-level Resource)에 접근하려면 핸들러를 등록하여 URL접미사를 만들어 사용해야 한다. 이는 코드만으로 리소스의 출처를 확인하기 불편하며 비효율적이고 불편하다. Spring의 Resource 객체는 URL 클래스를 추상화하여 low-level 리소스에 접근할 수 있도록 기능을 제공하고 있다. 자세히 보기
2020-11-04FrameWork / 스프링 / 1장 - IOC 컨테이너Spring Ch 1. IoC 컨테이너(4) - MessageSource와 EventPublisher MessageSource 한국어 페이지 뿐 아니라 다른 언어를 사용하는 페이지를 출력하고자 할 때 언어만 다른 html파일을 사용한다면 유지보수가 어렵고 비효율적일 것이다. SpringBoot에서는 국제화 기능을 제공하는 인터페이스 MessageSource를 @Autowired로 자동 등록할 수 있다. .properties파일에 key-value 형식으로 값을 저장하고, MessageSource 객체로 메시지를 받아 사용한다.자세히 보기
2020-11-04FrameWork / 스프링 / 1장 - IOC 컨테이너Spring Ch 1. IoC 컨테이너(4) - Profile과 Property Profile 프로파일으로 런타임 환경을 설정할 수 있다. 빈들을 하나의 환경으로 묶어 선언함으로서 테스트 환경에서 테스트를 수행하고 신속하게 배포 환경으로 전환할 수 있다. @Component 어노테이션으로 등록된 빈들은 DefaultProfile에 존재한다. @Profile 어노테이션으로 프로파일을 등록할 수 있고 !, &, |의 논리 설정을 사용할 수 있다. 자세히 보기
2020-11-03FrameWork / 스프링 / 1장 - IOC 컨테이너Spring Ch 1. IoC 컨테이너(3) - 빈의 스코프 빈의 스코프싱글톤 애플리케이션 전반에 걸쳐 빈의 인스턴스가 오직 하나만 존재한다. Autowired에 의해 주입된 싱글톤 객체는 다른 객체에 주입된 싱글톤 객체와 동일한 객체이다. 프로토타입 @Scope(“prototype”)으로 프로토타입을 선언한다. 프로토타입 객체는 매 호출마다 객체가 초기화된다.자세히 보기
2020-11-02FrameWork / 스프링 / 외전Spring - 중복된 빈 등록에 대한 처리 스프링 의존 객체 선택 컴포넌트 Annotation은 싱글톤 범위로 등록되며 같은 타입의 빈이 다른 클래스에서 등록된 경우 에러가 발생한다. 12345678910111213public interface Repository {}@Repositorypublic class Repository2 implements Repository{}@Repository public class Repository3 implements Repository{}@Servicepublic class Service{ @Autowired //등록된 빈이 중복되어 에러 발생 Repository repository;}자세히 보기
2020-11-12Spring Ch 2. 추상화 - 데이터 바인딩 추상화(PropertyEditor, Converter, Formatter)FrameWork / 스프링 / 2장 - 추상화