개인공부/SPRING
-
AOP (관점 지향 프로그래밍) 📌 1. AOP란? 문제를 바라보는 관점을 기준으로 프로그래밍을 하는 기법 AOP 구현 방법으로는, 여러 가지가 존재하는데, 일반적으로 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드에 삽입하는 것이다. 비슷한 동작을 하는 인터페이스와 필터가 있는데 이들은 웹에서 사용한다. AOP는 프로그래밍 기법 중 하나이며, 특정 패키지의 특정 클래스 전체, 특정 클래스의 특정 메서드 전체 등 적용 범위를 다양하게 설정하여 공통 기능으로 사용할 수 있다. 공통 기능 == 공통 관심 사항 핵심 로직 == 핵심 관심 사항 핵심 비즈니스 기능과 구분하기 위해 공통 기능을 공통 관심 사항(cross-cutting concern)이라고 표현하며, 핵심 로직을 핵심 관심 사항(core ..
[Spring] 스프링 AOP (Spring AOP)란?AOP (관점 지향 프로그래밍) 📌 1. AOP란? 문제를 바라보는 관점을 기준으로 프로그래밍을 하는 기법 AOP 구현 방법으로는, 여러 가지가 존재하는데, 일반적으로 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드에 삽입하는 것이다. 비슷한 동작을 하는 인터페이스와 필터가 있는데 이들은 웹에서 사용한다. AOP는 프로그래밍 기법 중 하나이며, 특정 패키지의 특정 클래스 전체, 특정 클래스의 특정 메서드 전체 등 적용 범위를 다양하게 설정하여 공통 기능으로 사용할 수 있다. 공통 기능 == 공통 관심 사항 핵심 로직 == 핵심 관심 사항 핵심 비즈니스 기능과 구분하기 위해 공통 기능을 공통 관심 사항(cross-cutting concern)이라고 표현하며, 핵심 로직을 핵심 관심 사항(core ..
2022.10.09 -
public class MemberPrinter { private DateTimeFormatter dateTimeFormatter; public void print(Member member) { if (dateTimeFormatter == null) { System.out.printf( "회원 정보: 아이디=%d, 이메일=%s, 이름=%s, 등록일=%tF\n", member.getId(), member.getEmail(), member.getName(), member.getRegisterDateTime()); } else { System.out.printf( "회원 정보: 아이디=%d, 이메일=%s, 이름=%s, 등록일=%s\n", member.getId(), member.getEmail(), membe..
객체 자동주입할 떄 해당하는 빈 객체가 없을 시 예외가아닌 null값으로 대체하는 방법(@Nullable)public class MemberPrinter { private DateTimeFormatter dateTimeFormatter; public void print(Member member) { if (dateTimeFormatter == null) { System.out.printf( "회원 정보: 아이디=%d, 이메일=%s, 이름=%s, 등록일=%tF\n", member.getId(), member.getEmail(), member.getName(), member.getRegisterDateTime()); } else { System.out.printf( "회원 정보: 아이디=%d, 이메일=%s, 이름=%s, 등록일=%s\n", member.getId(), member.getEmail(), membe..
2022.10.09 -
스프링에서는 @Autowired를 사용해 의존성을 주입한다. bean을 설정할 때 를 사용함으로써 굳이 bean 태그 안에 나 태그를 추가하지 않아도 스프링의 @Autowired 어노테이션이 적용된 생성자, 필드, 메소드에 대해 의존 자동 주입을 처리한다. 하지만, 만약 동일한 타입을 가진 bean 객체가 두개가 있다면 어떻게 될까? 스프링이 어떤 빈을 주입해야 할 지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 Exception을 발생시킨다@Autowired의 주입 대상이 한 개여야 하는데 실제로는 두 개 이상의 빈이 존재해 주입할 때 사용할 객체를 선택할 수 없기 때문이다. 단, @Autowired가 적용된 필드나 설정 메서드의 property 이름과 같은 이름을 가진 빈 객체가 존재할 경우에..
@Qualifier 애노테이션스프링에서는 @Autowired를 사용해 의존성을 주입한다. bean을 설정할 때 를 사용함으로써 굳이 bean 태그 안에 나 태그를 추가하지 않아도 스프링의 @Autowired 어노테이션이 적용된 생성자, 필드, 메소드에 대해 의존 자동 주입을 처리한다. 하지만, 만약 동일한 타입을 가진 bean 객체가 두개가 있다면 어떻게 될까? 스프링이 어떤 빈을 주입해야 할 지 알 수 없어서 스프링 컨테이너를 초기화하는 과정에서 Exception을 발생시킨다@Autowired의 주입 대상이 한 개여야 하는데 실제로는 두 개 이상의 빈이 존재해 주입할 때 사용할 객체를 선택할 수 없기 때문이다. 단, @Autowired가 적용된 필드나 설정 메서드의 property 이름과 같은 이름을 가진 빈 객체가 존재할 경우에..
2022.10.08 -
package config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import spring.ChangePasswordService; import spring.MemberDao; import spring.MemberInfoPrinter; import spring.MemberListPrinter; import spring.MemberPrinter; import spring.MemberRegisterService; import spring.VersionPrinter; @Configuration public class AppCtx { @Bean pu..
@Autowired 애노테이션package config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import spring.ChangePasswordService; import spring.MemberDao; import spring.MemberInfoPrinter; import spring.MemberListPrinter; import spring.MemberPrinter; import spring.MemberRegisterService; import spring.VersionPrinter; @Configuration public class AppCtx { @Bean pu..
2022.10.08 -
@Component 란, @Component는 개발자가 직접 작성한 Class를 싱글톤 클래스 Bean으로 등록하기 위한 Annotation이다. * 위에서 설명한 스프링의 컴포넌트 스캔 (@ComponentScan) 기능에 의해 스캔될 때, 주어진 패키지 내에서 @Component 어노테이션이 적용된 클래스를 식별하고, 그러한 클래스의 빈을 생성하여 ApplicationContext에 등록한다. * (value = "") 옵션이 있고, 해당 옵션을 사용하지 않는다면 class의 이름을 camelCase로 변경한 것을 bean id로 사용한다. 그렇다면 @Controller, @Service, @Repository 어노테이션이란? @Controller, @Service, @Repository @Contr..
@Bean vs @Component 차이@Component 란, @Component는 개발자가 직접 작성한 Class를 싱글톤 클래스 Bean으로 등록하기 위한 Annotation이다. * 위에서 설명한 스프링의 컴포넌트 스캔 (@ComponentScan) 기능에 의해 스캔될 때, 주어진 패키지 내에서 @Component 어노테이션이 적용된 클래스를 식별하고, 그러한 클래스의 빈을 생성하여 ApplicationContext에 등록한다. * (value = "") 옵션이 있고, 해당 옵션을 사용하지 않는다면 class의 이름을 camelCase로 변경한 것을 bean id로 사용한다. 그렇다면 @Controller, @Service, @Repository 어노테이션이란? @Controller, @Service, @Repository @Contr..
2022.10.08 -
Java 언어를 이용해 개발을 하다 보면 기계적으로 작성해야 하는 코드들이 상당히 많다. 이번에는 기계적인 코드 작성을 자동화하여 코드 다이어트를 해주는 Java 필수 라이브러리 Lombok에 대해 알아보도록 하겠다. 1. Lombok의 필요성 [ 기존의 코드 작성 ] 예를 들어 우리가 경기도 지역화폐 가맹점에 대한 상점 목록을 반환해주는 SpringBoot 기반의 API 서버를 개발한다고 가정하자. 우리는 기존에 Java를 활용하여 프로젝트를 개발할 때 다양한 VO 클래스들을 생성하였고, 해당 예제의 경우 가게들의 정보를 저장하는 Store를 아래와 같이 만들어줄 수 있다. public class Store extends Common { private String companyName; // 상호명 p..
Lombok이란? 및 Lombok 활용법Java 언어를 이용해 개발을 하다 보면 기계적으로 작성해야 하는 코드들이 상당히 많다. 이번에는 기계적인 코드 작성을 자동화하여 코드 다이어트를 해주는 Java 필수 라이브러리 Lombok에 대해 알아보도록 하겠다. 1. Lombok의 필요성 [ 기존의 코드 작성 ] 예를 들어 우리가 경기도 지역화폐 가맹점에 대한 상점 목록을 반환해주는 SpringBoot 기반의 API 서버를 개발한다고 가정하자. 우리는 기존에 Java를 활용하여 프로젝트를 개발할 때 다양한 VO 클래스들을 생성하였고, 해당 예제의 경우 가게들의 정보를 저장하는 Store를 아래와 같이 만들어줄 수 있다. public class Store extends Common { private String companyName; // 상호명 p..
2022.10.06