시니어까지의 여정
-
스프링에서는 @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 -
1. 커넥션 풀의 개요 커넥션 풀을 사용하면 풀 속에 미리 커넥션이 생성되어있기 때문에 커넥션을 생성하는데 드는 연결 시간이 소비되지 않는다. 또한 현재 다른 사용자가 사용하지 않는 커넥션을 재사용이 가능하기 때문에 사용자가 접속할 때마다 계속해서 커넥션을 생성할 필요가 없다. 즉, 커넥션 풀을 사용한다면 프로그램 효율과 성능이 전체적으로 증가하게 된다. 2. JNDI의 개요 JNDI(Java Naming and Directory Interface)란 명명 서비스 및 디렉토리 서비스에 접근하기 위한 API를 말한다. 즉 특정 자원에 접근하기 위한 이름으로 사용된다. 3. 톰캣에서 제공되는 CP를 위한 DBCP API를 사용하여 데이터 베이스 사용하기 context.xml
[JSP] 커넥션 풀1. 커넥션 풀의 개요 커넥션 풀을 사용하면 풀 속에 미리 커넥션이 생성되어있기 때문에 커넥션을 생성하는데 드는 연결 시간이 소비되지 않는다. 또한 현재 다른 사용자가 사용하지 않는 커넥션을 재사용이 가능하기 때문에 사용자가 접속할 때마다 계속해서 커넥션을 생성할 필요가 없다. 즉, 커넥션 풀을 사용한다면 프로그램 효율과 성능이 전체적으로 증가하게 된다. 2. JNDI의 개요 JNDI(Java Naming and Directory Interface)란 명명 서비스 및 디렉토리 서비스에 접근하기 위한 API를 말한다. 즉 특정 자원에 접근하기 위한 이름으로 사용된다. 3. 톰캣에서 제공되는 CP를 위한 DBCP API를 사용하여 데이터 베이스 사용하기 context.xml
2022.10.07 -
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