개인공부
-
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 -
PreparedStatement와 Statement * PreparedStatement 와 Statement의 가장 큰 차이점은 캐시(cache) 사용 여부이다. 1) 쿼리 문장 분석 2) 컴파일 3) 실행 Statement를 사용하면 매번 쿼리를 수행할 때마다 1) ~ 3) 단계를 거치게 되고, PreparedStatement는 처음 한 번만 세 단계를 거친 후 캐시에 담아 재사용을 한다는 것이다. 만약 동일한 쿼리를 반복적으로 수행한다면 PreparedStatment가 DB에 훨씬 적은 부하를 주며, 성능도 좋다. 1. Statement String sqlstr = "SELECT name, memo FROM TABLE WHERE num = " + num Statement stmt = conn.cred..
[JSP] PreparedStatement 와 Statement 차이점PreparedStatement와 Statement * PreparedStatement 와 Statement의 가장 큰 차이점은 캐시(cache) 사용 여부이다. 1) 쿼리 문장 분석 2) 컴파일 3) 실행 Statement를 사용하면 매번 쿼리를 수행할 때마다 1) ~ 3) 단계를 거치게 되고, PreparedStatement는 처음 한 번만 세 단계를 거친 후 캐시에 담아 재사용을 한다는 것이다. 만약 동일한 쿼리를 반복적으로 수행한다면 PreparedStatment가 DB에 훨씬 적은 부하를 주며, 성능도 좋다. 1. Statement String sqlstr = "SELECT name, memo FROM TABLE WHERE num = " + num Statement stmt = conn.cred..
2022.10.07