본 내용은 뉴렉처 강의를 보고 개인 학습용으로 작성합니다. 01. 스프링 소개 스프링의 핵심 기능 스프링은 프레임워크이며 다양한 기능을 제공하는데 그 중 주요 기능을 2개를 꼽는다면 Dependency injection, Transaction management를 들 수 있겠다. image.png Spring 이전에 Java EE가 그 자리를 차지...
02. 느슨한 결합력과 인터페이스 코드 수정 최소화 어떤 객체를 수정해야 한다면 코드 자체를 수정하는 것보다 설정 파일을 두어 변경하기 원할하게 할 수 있다. 아래와 같은 상황에서 B1이라는 클래스가 B2로 변경이 되어야 할 때 서비스 파일인 S도 수정이 되어야 하는 불편함이 존재한다. image.png 이 때 인터페이스를 두어 객체 타입을 인터페이...
03. Dependency Injection 스프링 코어 기능 : DI 스프링 프레임워크의 코어기능 중 종속 객체를 생성하여 조립해주는 도구로는 DI와 IoC Container를 예로 든다. 이 때 Dependency들을 부품으로 보고 Injection을 조립하는 과정으로 생각하면 편하다. 좌측 클래스의 경우 생성자 호출 시 B에 대한 객체를 생성하여...
04. Inversion of Control 스프링 코어 기능 : IoC DI가 부품의 조립을 의미한다고 했고 현실 세계에서 주문서에 해당하는 것은 XML, Annotation으로 개념이 호환된다고 볼 수 있다. image.png 스프링에서 DI가 진행이 되는 과정을 보면 작은 부품(객체)부터 생성이 되어 큰 단위로 결합이 되는 것을 알 수 있다. ...
05. DI 직접하기 자바 프로젝트 예제 이번에는 스프링의 도움없이 DI를 직접 해보고 추후에 스프링을 활용해본다. 먼저 자바 프로젝트를 생성한다.(Java Perspective로 변환) image.png 다음과 같이 클래스와 인터페이스들을 생성한다. 메인이 되는 프로그램 파일이 서비스 파일이 되고 여기서 DI가 이루어진다. 직접 DI가 이루...
06. 플러그인 설치 스프링 플러그인 설치 스프링 DI 설정을 위해 아래와 같은 내용을 작성해야되는데 직접하지 않고 플러그인을 통해 진행한다. image.png Help > Eclipse Marketplace에 들어가면 다음과 같이 플러그인들을 설치할 수 있도록 준비가 되어 있다. spring을 검색하여 스프링 플러그인을 설치한다. image.pn...
07. Spring Bean Configuration 스프링 DI 지시서 작성하기 Construction Injection 방법을 사용한 이전 코드에 이어 Setter Injection 방법을 추가하여 세터를 통한 설정 방법을 알아본다. 먼저 ExamConsole 인터페이스에 세터를 추가해주고 이를 구현한 InlineExamConsole, GridEx...
08. Application Context IoC Container 사용하기 setting.xml을 통해 Dependency Injection에 대한 내용들을 담았기에 이를 활용할 수 있도록 코드에 반영해야 한다. 이 때 사용되는 것이 Application Context 클래스이며 IoC Container의 실체라고 볼 수 있다. Applicati...
09. 값 형식 DI Setter를 통한 DI 이번에는 setter를 통해 변수에 값을 가지도록 해본다. 일반적인 방법은 다음과 같이 property 태그 내에 name, value를 입력함으로 가능하다. 혹은 중첩태그로도 가능하다. NewlecExam.java
10. 생성자 DI 생성자를 통한 DI 이번엔 생성자를 통해 DI를 진행하는 방법을 알아본다. constructor-arg태그를 사용하며 내부에 value를 입력하면 된다. 만약 매개변수 타입에 의해 생성자 호출의 모호함이 있다면 다음과 같이 type을 추가하여
이번에는 콜렉션을 생성하여 목록을 DI하는 방법을 알아 본다.먼저 다음과 같은 코드를 setting.xml에서 DI하는 것을 알아본다.해당 코드는 스프링을 통하게 하기 위해 다음과 같이 변경될 것이며setting.xml에서는 다음과 같이 작성되면 된다.더 짧은 코드로
Anntation 장점 및 @Autowired DI Annotation 어노테이션은 스프링에서 xml을 통해 DI 설정을 하는 방법에서 더 발전된 방법으로 등장하게 되었고 최신 트렌트화 되었다. 다음과 같이 다양한 어노테이션이 존재한다. Annotation 장점
이전 시간에 @Autowired를 통해 DI를 진행할 수 있었다. 하지만 어떠한 기준으로 작동이 되는 것인가에 대한 궁금증이 생긴다. 기본적으로 클래스 타입을 기준으로 DI가 진행이 된다고 한다. (인터페이스로 구현된 것도 매칭이 가능)다음과 같이 xml파일에서 설정한
@Autowired의 기본적인 위치는 3가지가 있다. 필드 위, 생성자 위, 세터 위가 후보군이 되겠다.우선 지난 번에 사용했던 세터위에서는 직관적으로 DI를 위해 사용이 되는것을 알아볼 수 있다.하지만 필드 위는 해석하기가 난해하다. 이는 기본 생성자를 호출함으로 연
이제 DI 뿐만 아니라 객체까지 Annotation으로 커버해본다. 우선 아래와 같이 작성이 된 것을다음과 같이 바꿔주게 된다. 빈을 삭제하면서 해당 소스코드 클래스 위에 @Component라는 Annotation을 붙여주고 이후 스프링이 이를 찾을 수 있도록 <
이전에 @Component를 통해 객체를 생성하는 법을 알았는데 기본값 설정에 대한 내용을 보고자 한다. 간단하기 해당 필드 위에 @Value를 표시해주고 값을 넣어주면 된다.이제 Annotation으로 모든 설정을 바꾸기 위해 더욱 자세한 내용을 보게된다. 기본적으로
이제 xml 설정 대신 Annotation만으로 설정하는 방법을 알아본다. xml 내용은 다음과 같이 Config 파일을 생성해 치환할 수 있겠다. 특히 객체 생성하는 @Bean의 경우 스프링이 아닌 개발자가 생성하는 모양새인데 이는 스프링이 IoC Container에
관점 지향 프로그래밍의 탄생 배경은 다음과 같다. 이제까지 OOP의 경우 사용자가 필요로하는 주 업무 로직을 중심으로 짜여졌다면 개발자나 관리자에 의해 필요로하는 코드가 수반된다. 로그 기록이나 보안 처리 등이 수반되는 부 업무 로직이 된다. 이는 주 업무로직을 감싸게
먼저 AOP를 자바만으로 구현해본다. 이전 OOP 단계에서는 아래와 같이 로그나 보안등의 부수적인 코드가 주 코드와 함께 존재한다이를 주 업무 코드는 Core Concern, 부 업무 코드는 Cross-cutting Concern으로 분리한다.이후 proxy라는 개념을
이론에 맞춰 AOP를 자바 코드로만 구현해본다. 다음과 같이 패키지와 클래스를 생성하고entity 패키지도 복사해오면서 aop로만 변경해준다. 이 때 Annotation은 제거했고 메소드들을 result를 거쳐 반환할 수 있도록 수정했다.먼저 AOP 개념이 적용되지 않
이제 자바 코드로만 AOP를 구현한 것을 스프링의 DI 장점을 활용하여 구현해본다. 스프링에서는 Cross-cutting Concern이 존재하는 방식을 Advice라고 하며 제공하는 4가지 Advice가 존재한다.이전 내용을 Around Advice을 활용해 스프링으
이전 Around Advice와 달리 Before Advice의 경우 대상을 실행하기 전에 수행된다.먼저 다음과 같이 클래스를 생성한다. Around Advice와 달리 Before Advice는 주 업무의 위치를 기입하지 않아도 된다. (Around Advice의
After Returning Advice의 경우 Core Concern이 정상적으로 끝났을 때 호출되도록 하는 방법이다.xml에 다른 advice들과 동일한 방법으로 bean 추가 및 DI 설정을 해준다.추가한 클래스를 생성한다. 이 때 상속받는 클래스는 AfterRe
이제까지 다룬 AOP의 구조도는 다음과 같다. 사용자 관점에서 Cross-cutting Concern 사이에 Core Concern을 삽입하는데 Proxy객체를 사용한다. 이 때 Core Concern의 각 메소드 마다 Proxy 객체를 통해 Cross-cutting이
지난번 Point Cut 마다 Advisor가 추가되어야 하는 불편함이 있었는데 이를 간소화하여 합쳐본다. Point Cut을 Advisor 내로 합병하고 이에 필요한 Point Cut, 즉 메소드를 list 태그 내에 위치 시킨다.Advisor 내에 total, av