안녕하세요. 오늘은 그동안 사용해왔던 여러가지 Dependency Injection 방법들에 대해서 소개해보고자 합니다. 일단 Dependency Injection이 무엇인지부터 이야기가 선행되어야 할텐데요. 다들 아시겠지만 스프링에서의 가장 기본적인 개념이 되겠고, 특정 계층(컨트롤러, 서비스 등)에 선언된 local 변수들의 인스턴스를 스프링 컨테이너 내에서 Bean이라는 객체로 관리되게 됩니다.(관리하여 주입해줄 객체) 한글로는 의존객체라고하며 A라는 클래스에 B라는 객체가 로컬변수로 선언되어 B의 메소드가 사용되고 있을 때, B가 없으면 A 클래스의 인스턴스가 생성될 수 없기 때문에 A는 B에 의존한다라고 합니다. 따라서 스프링은 프레임워크이기 때문에 싱글톤으로 이러한 A, B라는 Bean 객체를..
스프링의 가장 중요한 개념인 DI객체라는 것이 있다. 이는 Dependency Injection이라는 용어의 약자로써, A 클래스가 멤버로써 다른 B 클래스를 가지고 있을 때 A클래스는 B클래스가 존재하지 않으면 안된다. -> 즉 의존하고 있다. 라는 의미로 "B 클래스는 A 클래스의 의존객체이다." 라고 합니다. 스프링은 이러한 의존성을 주입해주는 방법으로 new 키워드 생성자를 통한 인스턴스화가 아닌 스프링이 Bean이라는 이름으로 관리하는 객체들을 주로 @Autowired라는 어노테이션을 이용해서 주입시켜주게 됩니다.(혹은 생성자, Setter 주입) 이때, 스프링이 관리하는 Bean이라는 객체들은 싱글톤(singleton) 객체로써 어느 클래스에서 주입받던지 단 하나의 인스턴스입니다. 즉, 다음과..
Lombok - 자바 개발시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해주는 라이브러리. - @Data, @Getter, @Setter, @ToString 등의 어노테이션 방식을 이용한다. - @Data 어노테이션은 모든 요소를 추가하는것. 즉 변수선언만 해놓고 getter/setter, toString, 생성자, equals 메소드 hashcode 등 lombok으로 생성할 수 있는 모든 메소드를 생성시킴. https://mvnrepository.com/ Maven Repository: Search/Browse/Explore Camel Async Http Client support Last Release on Oct 20, 2019 mvnrepository..
스케줄러 - 주기적으로 매일, 매주, 매월 등 주기적으로 특정한 프로그램을 실행하기 위한 것 - Spring의 경우는 Spring-batch 혹은 Quartz 라이브러리를 이용하면 프로그램이 실행되는 동안 주기적인 스케줄링이 가능하다. Spring에서 Quartz 라이브러리 설정 1. pom.xml org.quartz-scheduler quartz 2.3.0 org.quartz-scheduler quartz-jobs 2.3.0 - quartz와 quartz-jobs 디펜던시 등록. 2. root-context.xml 의 namepace에서 task 항목을 체크! - task:annotation-driven 태그 추가 - 스케줄러가 실행될 컨트롤러가 속한 패키지를 component-scan 처리한다. 3...
트랜잭션 - 비즈니스로직에서 쪼개질 수 없는 하나의 단위작업 - 한 번에 이루어지는 작업의 단위 - 알아두면 좋은 ACID 원칙 원자성(Atomicity) 하나의 트랜잭션은 모두 하나의 단위로 처리해야 한다. A와 B 작업이 하나의 트랜잭션으로 묶여있는 경우 A는 성공, B는 실패할 경우 해당 작업단위는 실패로 끝나야한다. 즉, A,B 모두 rollback 되어야 한다는 원칙 일관성(Consistency) 트랜잭션이 성공했다면 데이터베이스의 모든 데이터는 일관성을 유지해야한다. 격리성(Isolation) 트랜잭션으로 처리되는 중간에 외부에서의 간섭은 없어야한다. 영속성(Durability) 트랜잭션이 성공적으로 처리되면, 그 결과는 영속적으로 보관되어야 한다. 실습했던 내용 - pom.xml 에 라이브러..
ContextLoaderListener - 해당 웹 어플리케이션이 구동시 같이 동작, web.xml에 default로 기재되어 있음. contextConfigLocation /WEB-INF/root-context.xml /WEB-INF/root-context2.xml ... org.springframework.web.context.ContextLoaderListener 이런식으로 여러가지의 설정파일을 등록시킬 수 있음 DispatcherServlet - Front-Controller 라고도 불림. - 웹 관련 처리의 준비작업을 함. XmlWebApplicationContext를 이용해서 servlet-context.xml 파일을 로딩하고 해석함. - 마지막 ViewResolver를 통해서 만들어진 응답데..
Spring lagacy Project로 프로젝트를 생성한 경우! 1. web.xml, root-context.xml, servlet-context.xml 파일을 삭제한다. 2. pom.xml 에 web.xml 파일이 없다는 설정을 추가해야한다. ... org.apache.maven.plugins maven-war-plugin 3.2.0 false 3. Java로 설정하는 경우 xml파일의 역할을 Java 클래스가 대신하게 되므로 기능을 대신할 Java Class 3개를 만들어 줍니다.(Spring lagacy인 경우 스프링 버전이 3.x 대 버전이기 때문에 이를 5.x 대 버전으로 높이고 java 버전도 1.8정도로 맞춰주세요. pom.xml에서, 그래야 밑에 3개의 클래스들이 상속/구현할 클래스/인터..
AOP 어플리케이션에서의 관심사의 분리(기능의 분리) 즉, 핵심적인 기능에서 부가적인 기능을 분리한다. 분리한 부가기능을 애스펙트(Aspect)라는 독특한 모듈형태로 만들어서 설계하고 개발하는 방법 AOP 사용이유 회원이라는 기능이 있고 회원만이 접근할 수 있는 url이 존재, 그 곳을 접근할 때는 회원의 session정보가 존재해야했음. AOP pointcut 기능을 이용해서 모든 요청이 서블릿으로 들어올 때 before pointcut을 걸어두어 회원의 session정보가 존재하는지 검사. package com.test.genius.code.pointcut; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.htt..