Spring Core
-
이번 포스트에서는 target의 메서드 즉 join point에서 advice를 적용 할 것인지 결정하기 위한 pointcut 작성에 대해 살펴보자. Pointcut(포인트컷) pointcut이란?Pointcut은 target의 메서드에서 advice를 적용할 것인지 결정하는 메서드 선정 알고리즘으로 @Before 등 애너테이션의 value 값이다. pointcut을 작성 할 때는 execution, within, bean 등 지정자와 함께 사용한다.execution: 메서드의 signature 기반으로 한 정교한 포인트컷 작성법으로 가장 많이 사용된다.@Before("execution(String *..SimpleBean.getName())")within: 빈 클래스 기반으로 포..
03. pointcut 작성이번 포스트에서는 target의 메서드 즉 join point에서 advice를 적용 할 것인지 결정하기 위한 pointcut 작성에 대해 살펴보자. Pointcut(포인트컷) pointcut이란?Pointcut은 target의 메서드에서 advice를 적용할 것인지 결정하는 메서드 선정 알고리즘으로 @Before 등 애너테이션의 value 값이다. pointcut을 작성 할 때는 execution, within, bean 등 지정자와 함께 사용한다.execution: 메서드의 signature 기반으로 한 정교한 포인트컷 작성법으로 가장 많이 사용된다.@Before("execution(String *..SimpleBean.getName())")within: 빈 클래스 기반으로 포..
2020.06.20 -
문제 상황의 인식 이번 포스트에서는 간단한 Aspect를 작성해 보고 어떤 방식으로 동작하는지 살펴보자. 어느 일하기 싫은 날! 힘들지만 다음과 같은 멋진 빈을 만들었다. package com.doding.aoptest.simple; import java.util.Calendar; import org.springframework.stereotype.Component; import lombok.Data; @Data @Component public class SimpleBean { private String name ; private Calendar now ; } SimpleBean 등록 후 단위 테스트 위 빈이 잘 동작하는지 테스트 해보자. 테스트만 통과하면 퇴근 각이다.! package com.dodin..
02. Aspect 작성과 동작문제 상황의 인식 이번 포스트에서는 간단한 Aspect를 작성해 보고 어떤 방식으로 동작하는지 살펴보자. 어느 일하기 싫은 날! 힘들지만 다음과 같은 멋진 빈을 만들었다. package com.doding.aoptest.simple; import java.util.Calendar; import org.springframework.stereotype.Component; import lombok.Data; @Data @Component public class SimpleBean { private String name ; private Calendar now ; } SimpleBean 등록 후 단위 테스트 위 빈이 잘 동작하는지 테스트 해보자. 테스트만 통과하면 퇴근 각이다.! package com.dodin..
2020.06.18 -
AOP 스프링의 특징을 딱 두 가지만 들어보라면 앞서 배운 DI와 지금 소개할 AOP이다. 사실 AOP는 프로젝트 과정에서 적극적으로 사용하지 않을 수도 있지만 스프링 내부적으로 어마어마하게 많이 사용되고 있는 기술이다. 무언가 스프링이 처리하는 마법 같은 일들은 대부분 AOP의 결과인 것들이 많다. 과연 AOP란 무엇일까? AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)란? AOP는 사실 용어조차 추측하기 힘들다. 어떤 "관점을 기반으로 프로그래밍 한다"는 이야기인데 찬찬히 살펴보자. 일상생활에서의 관점과 관점 지향적 삶 먼저 일상 생활에서 "관점"이라는 것을 생각해 보자. 우리는 사무실, 식당, 헬스장 등 다양한 공간에서 다양한 일을 한다. 사무실에서는 업무를 처리하..
01. AOP 기본 컨셉AOP 스프링의 특징을 딱 두 가지만 들어보라면 앞서 배운 DI와 지금 소개할 AOP이다. 사실 AOP는 프로젝트 과정에서 적극적으로 사용하지 않을 수도 있지만 스프링 내부적으로 어마어마하게 많이 사용되고 있는 기술이다. 무언가 스프링이 처리하는 마법 같은 일들은 대부분 AOP의 결과인 것들이 많다. 과연 AOP란 무엇일까? AOP(Aspect Oriented Programming: 관점 지향 프로그래밍)란? AOP는 사실 용어조차 추측하기 힘들다. 어떤 "관점을 기반으로 프로그래밍 한다"는 이야기인데 찬찬히 살펴보자. 일상생활에서의 관점과 관점 지향적 삶 먼저 일상 생활에서 "관점"이라는 것을 생각해 보자. 우리는 사무실, 식당, 헬스장 등 다양한 공간에서 다양한 일을 한다. 사무실에서는 업무를 처리하..
2020.06.18 -
이번 포스트에서는 Profile에 대해 살펴보자. 환경의 분리와 프로파일 실제 프로젝트를 진행하다보면 다양한 개발 환경의 복잡성을 경험하는 것은 불가피하다. 일반적으로 DB를 이용해서 개발할 때 개발자들은 자신의 로컬 DB에서 작업을 시작해서 테스트 서버에서 기능을 검증하고 최종적으로 운영 환경에서 애플리케이션을 서비스한다. 이 과정에서 비지니스 로직 자체는 거의 변하지 않지만 DB 주소, 비밀번호등 인프라 관련 설정은 각 단계(환경)마다 크게 달라질 수 있다. 이런 상황에서 각 환경에 맞춰 설정 파일을 수시로 수정하는 작업은 상당히 번거롭다. 이런 문제를 해결하기 위해 환경에 따른 설정을 미리 준비해두고, 필요에 따라 적절한 설정으로 손쉽게 교체할 수 있다면 개발 및 배포 과정이 훨씬 간결하고 효율적으..
05. Profile이번 포스트에서는 Profile에 대해 살펴보자. 환경의 분리와 프로파일 실제 프로젝트를 진행하다보면 다양한 개발 환경의 복잡성을 경험하는 것은 불가피하다. 일반적으로 DB를 이용해서 개발할 때 개발자들은 자신의 로컬 DB에서 작업을 시작해서 테스트 서버에서 기능을 검증하고 최종적으로 운영 환경에서 애플리케이션을 서비스한다. 이 과정에서 비지니스 로직 자체는 거의 변하지 않지만 DB 주소, 비밀번호등 인프라 관련 설정은 각 단계(환경)마다 크게 달라질 수 있다. 이런 상황에서 각 환경에 맞춰 설정 파일을 수시로 수정하는 작업은 상당히 번거롭다. 이런 문제를 해결하기 위해 환경에 따른 설정을 미리 준비해두고, 필요에 따라 적절한 설정으로 손쉽게 교체할 수 있다면 개발 및 배포 과정이 훨씬 간결하고 효율적으..
2020.06.17 -
묵시적 DI 앞선 포스트에서 @Configuration과 @Bean을 이용해서 명시적으로 빈을 선언하는 방법에 대해 알아보았다. 이 방식은 빈 설정이 빈 클래스 외부 즉 @Configuration 클래스에 존재하는 형태로 비지니스 로직과 빈 관리 로직이 잘 분리되어 관심사의 분리라는 주제에 아주 이상적이다. 단 이 방식은 빈을 만들 때 마다 설정 파일에 명시적으로 빈을 선언해주어야 한다. 묵시적 빈 설정 묵시적인 빈 설정 방식은 빈으로 사용할 클래스에 @Component 라고 선언한다. 즉 빈에 대한 설정이 빈 클래스 내부에 존재하기 때문에 관심 사항의 분리라는 부분에서는 일보 후퇴하는 복합적인 관심사를 다루게 된다. @Component라고 선언된 클래스는 바로 빈이 되는것은 아니고 뒤에서 언급할 @Co..
04. DI 처리 - 묵시적 DI묵시적 DI 앞선 포스트에서 @Configuration과 @Bean을 이용해서 명시적으로 빈을 선언하는 방법에 대해 알아보았다. 이 방식은 빈 설정이 빈 클래스 외부 즉 @Configuration 클래스에 존재하는 형태로 비지니스 로직과 빈 관리 로직이 잘 분리되어 관심사의 분리라는 주제에 아주 이상적이다. 단 이 방식은 빈을 만들 때 마다 설정 파일에 명시적으로 빈을 선언해주어야 한다. 묵시적 빈 설정 묵시적인 빈 설정 방식은 빈으로 사용할 클래스에 @Component 라고 선언한다. 즉 빈에 대한 설정이 빈 클래스 내부에 존재하기 때문에 관심 사항의 분리라는 부분에서는 일보 후퇴하는 복합적인 관심사를 다루게 된다. @Component라고 선언된 클래스는 바로 빈이 되는것은 아니고 뒤에서 언급할 @Co..
2020.06.17 -
스프링은 DI를 어떻게 처리할까? 다음의 그림을 살펴보자. 개발자는 비즈니스 로직을 담은 빈(Bean)들을 POJO 형태로 작성한다. 개발자는 각 빈들을 어떻게 생성하고 has-a 관계를 맺어줄지에 대한 설명서인 메타정보를 작성해서 스프링 컨테이너에게 전달한다. 스프링 컨테이너는 메타정보에 근거해 빈 객체를 만들고 setter/생성자를 호출해서 의존성을 주입한다. 클라이언트 코드에서 컨테이너에게 빈을 요청하면 컨테이너는 관리하고 있던 빈 객체를 반환해 준다. 이런 DI를 처리하는 방식은 메타정보를 만드는 방식에 따라 명시적 DI와 묵시적 DI로 나뉜다. Java Config를 활용한 명시적 DI 명시적 DI 명시적 DI란 빈을 생성하고 의존성을 주입하는 코드를 별도의 파일에 "이것은 빈입니다." 라고 작..
03. DI 처리 - 명시적 DI스프링은 DI를 어떻게 처리할까? 다음의 그림을 살펴보자. 개발자는 비즈니스 로직을 담은 빈(Bean)들을 POJO 형태로 작성한다. 개발자는 각 빈들을 어떻게 생성하고 has-a 관계를 맺어줄지에 대한 설명서인 메타정보를 작성해서 스프링 컨테이너에게 전달한다. 스프링 컨테이너는 메타정보에 근거해 빈 객체를 만들고 setter/생성자를 호출해서 의존성을 주입한다. 클라이언트 코드에서 컨테이너에게 빈을 요청하면 컨테이너는 관리하고 있던 빈 객체를 반환해 준다. 이런 DI를 처리하는 방식은 메타정보를 만드는 방식에 따라 명시적 DI와 묵시적 DI로 나뉜다. Java Config를 활용한 명시적 DI 명시적 DI 명시적 DI란 빈을 생성하고 의존성을 주입하는 코드를 별도의 파일에 "이것은 빈입니다." 라고 작..
2020.06.16 -
이번 포스트에서는 스프링의 가장 큰 특징 중 하나인 DI(Dependency Injection)의 개념과 필요성에 대해 알아보자. 참고로 pom.xml에 설정했던 와는 무관하다. 생활에서의 의존성과 의존성 주입 그리고 Ioc Container 의존성 우리는 멀리 떨어져있는 사람들과 통화(business logic)를 위해 전화기를 사용한다. 통화를 위해서는 당연히 전화기를 가져야(has a) 한다. 이처럼 통화를 위해 반드시 전화기를 사용하는 것을 '전화기에 의존하고 있다'라고 하고 이때 '전화기는 우리의 의존성'이 된다. 의존성인 전화기를 갖기 위해서 전통적으로는 직접 구매를 했지만 요즘은 렌탈이나 구독 서비스가 등장하고 있다. "아이폰13, 매달 4만원에 쓴다"…윤곽 드러난 애플의 구독서비스 "아이폰..
02. Dependency와 Dependency Injection이번 포스트에서는 스프링의 가장 큰 특징 중 하나인 DI(Dependency Injection)의 개념과 필요성에 대해 알아보자. 참고로 pom.xml에 설정했던 와는 무관하다. 생활에서의 의존성과 의존성 주입 그리고 Ioc Container 의존성 우리는 멀리 떨어져있는 사람들과 통화(business logic)를 위해 전화기를 사용한다. 통화를 위해서는 당연히 전화기를 가져야(has a) 한다. 이처럼 통화를 위해 반드시 전화기를 사용하는 것을 '전화기에 의존하고 있다'라고 하고 이때 '전화기는 우리의 의존성'이 된다. 의존성인 전화기를 갖기 위해서 전통적으로는 직접 구매를 했지만 요즘은 렌탈이나 구독 서비스가 등장하고 있다. "아이폰13, 매달 4만원에 쓴다"…윤곽 드러난 애플의 구독서비스 "아이폰..
2020.06.15 -
이번 포스트에서는 스프링 애플리케이션의 구성 요소에 대해서 살펴보자. Spring Application의 구성 요소 기본적인 구조 Spring 애플리케이션은 POJO + 메타 정보 + 스프링 프레임워크(IoC Container) 3 가지로 구성된다. 비즈니스 로직을 가지고 있는 POJO와 애플리케이션 구성 정보를 가지는 메타정보를 IoC Container인 스프링 프레임워크가 조합해서 스프링 애플리케이션을 구성하게 된다. 이 요소들에 대해서 좀 더 상세하게 알아보자. POJO POJO란 Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미하는데 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다. 스프링 이전의 프레..
01. Spring Application의 구성 요소이번 포스트에서는 스프링 애플리케이션의 구성 요소에 대해서 살펴보자. Spring Application의 구성 요소 기본적인 구조 Spring 애플리케이션은 POJO + 메타 정보 + 스프링 프레임워크(IoC Container) 3 가지로 구성된다. 비즈니스 로직을 가지고 있는 POJO와 애플리케이션 구성 정보를 가지는 메타정보를 IoC Container인 스프링 프레임워크가 조합해서 스프링 애플리케이션을 구성하게 된다. 이 요소들에 대해서 좀 더 상세하게 알아보자. POJO POJO란 Plain Old Java Object의 약자로 말 그대로 이전부터 사용하던 평범한 자바 객체를 의미하는데 객체를 만들 때 특별히 무언가를 상속받아서 확장 할 필요가 없다는 것을 강조하기 위한 말이다. 스프링 이전의 프레..
2020.06.15