Spring 17

[Spring] Lombok(@Builder 와 @Accessors)의 편리한 기능

1. @Builder Lombok에서 @AllArgsConstructor, @NoArgsConstructor @Data를 활용해서 생성자를 편리하게 사용할 수 있다. 하지만 생성자를 만들 때 필드가 많을 시 단점이 존재! 예를 들어 아래와 같은 User Class가 있다고 하자. @Data @AllArgsConstructor @NoArgsConstructor public class User { private String account; private String password; private String status; private String email; private String phoneNumber; private LocalDateTime registeredAt; private LocalDateT..

Spring 2020.07.09

[Spring] Socket통신과 Http통신의 초간단 설명

1. Socket 통신 접속을 계속 유지하여, 데이터를 전달 서버의 자원에 따라서 연결될 수 있는 클라이언트의 수가 한정 실시간 정보 교환에 사용되며 Http보다 속도가 빠름 2. Http 통신 클라이언트의 요청이 있을 때만 데이터 응답을 전달 불필요한 자원의 점유를 없애 다른 접속을 원활하게 하여 많은 데이터를 처리 데이터 요청 후 응답이 오면 연결이 끊어짐

Spring 2020.07.04

[Spring] WebApplicationInitializer

공식 API 문서를 보면 알 수 있듯이 Servlet 3.0 환경의 인터페이스로 기존의 web.xml로 설정하는 것을 프로그래밍으로 설정할 수 있도록 한다. 기존에는 web.xml로 Servlet을 설정 했다면 onStartup 메소드를 오버라이드 해주면서 스프링 설정을 해준다. public class MyWebAppInitializer implements WebApplicationInitializer { @Override public void onStartup(ServletContext container) { // Create the 'root' Spring application context AnnotationConfigWebApplicationContext rootContext = new Annot..

Spring 2020.06.14

[Spring] 예제로 보는 Aspect Oriented Programming with Spring

AOP : 관점지향프로그래밍 (aspect- oriented programming) Spring AOP : schema-based approach or @AspectJ 1. AOP Concepts Aspect : before , after , throws , finally 같은 것들을 관리해준다 Transaction management - 실제 비즈니스 로직에서는 트랜잭션 코드를 숨길 수 있다 Join point : Aspect가 동작해야 될 포인트 Advice : Join 포인트가 언제 동작할건지 관리 (before, after , around) pointcut : 조인 포인트를 판단하는것 인데 어떻게 포인트 컷을 걸지 포인트컷 하나에 여러개의 조인 포인트가 생길 수 있다 target object : ..

Spring 2020.06.07

[Spring] 예제로 보는 Resources

1. The Resource Interface Spring의 Resource 인터페이스는 Resource에 대한 접근을 추상화하기 위한 인터페이스이다. public interface Resource extends InputStreamSource { //리소스가 있는지 없는지 확인 boolean exists(); //Stream이 열렸는지 체크 boolean isOpen(); //해당 리소스의 url을 가져온다 URL getURL() throws IOException; //해당 리소스의 파일을 가져온다 File getFile() throws IOException; //상대 경로를 통해서 다른 리소스를 가져옴 Resource createRelative(String relativePath) throws IOE..

Spring 2020.05.29

[Spring] 예제로 보는 Environment Abstraction

1. @Profile 어플리케이션 배포할 때 어느 상황에 맞춰서 DB를 붙여야하는데 이럴때 @Profile사용하면 좋다. 보통 @Configuration과 같이쓰인다. @Configuration @Profile("default") public class AppDefaultConfig { @Bean(initMethod = "init", destroyMethod = "destroy") public Connection connection(ConnectionFactory connectionFactory){ return connectionFactory.getConnection(); } } @Configuration @Profile("dev") public class AppDefaultConfig { @Bean(i..

Spring 2020.05.27

[Spring] 예제로 보는 Java-based Container Configuration

1. @Bean(intMethod, destroyMethod) public class A { @Autowired private B b; public A(B b) { this.b = b; } //@PostConstruct void init(){ log.error("A post construct"); } //@PreDestroy void destroy(){ log.error("A post destroy"); } } 기존에 사용하던 @PostConstruct , @PreDestroy 어노테이션을 사용하지 않고 아래의 코드블럭에서 보다시피 외부에서 설정이 가능하다. @Configuration public class AppConfig { @Bean public B b(){ return new B(); } @Bea..

Spring 2020.05.21

[Spring] 예제로 보는 Using JSR 330 Standard Annotations

이 파트에서는 Spring에서 사용하는 것들을 자바 표준 기술로 인터페이스만 추가한 것이다. javax.inject javax.inject 1 Maven을 사용한다면 java.inject를 사용하기 위해 pom.xml에 위와 같이 dependency를 추가해주어야 한다. 1. Limitations of JSR-330 Standard Annotations 위의 표는 Spring에서 사용되는 어노테이션을 자바 표준으로 매칭되는 표이다. 예를 들어 @Component 는 @Named로 대체가능 하지만, 실제로는 자바 표준보다는 Spring의 어노테이션을 사용한다. 굳이 사용한다면 @Inject만 사용하고 웬만하면 Spring 어노테이션을 사용하자.

Spring 2020.05.19

[Spring] 예제로 보는 Classpath Scanning and Managed Components

1. @ComponentScan @Configuration @ComponentScan(basePackages = "패키지명") public class AppConfig { } @Component public class B { } basePackages에 해당하는 패키지 안의 @Component 어노테이션이 붙은 class를 scanning하고 자동으로 Bean으로 등록시킨다. 즉, 위의 클래스B 는 xml에 Bean으로 등록을 안해도 Bean으로 등록시켜준다. (단, AppConfig 이 클래스는 xml에 Bean이라고 등록을 해야한다.) 2. @Repository @Repository public class JpaMovieFinder implements MovieFinder { // implementa..

Spring 2020.05.18

[Spring] 예제로 보는 Annotation-based Container Configuration

Are annotations better than XML for configuring Spring? 위의 질문은 Spring 공식 문서에서 해당 파트에서 가장 처음에 등장하는 질문이다. 과연 어노테이션으로 설정하는 것이 XML로 설정하는 것 보다 더 좋은 방법일까?? ① XML 설정 방식의 장점 XML만 보고도 스프링의 설정을 한눈에 확인 가능 설정과 소스코드의 분리 가능 -> POJO(Plain Old Java Object) ② XML 설정 방식의 단점 'XML 헬' 이라고 불릴 정도로 XML이 너무 커진다. 방대해진 XML을 관리하기 힘들어진다. 위의 XML 단점을 보면 어노테이션이 더 나은 방법이 아닌가? 라는 생각이 든다. 하지만! 어노테이션을 사용하면 소스코드와 설정의 분리가 애매해진다. -> ..

Spring 2020.05.12