H2 데이터베이스 연결하기 connectionCosnt라는 클래스 만들어서 연결 정보를 입력하자 데이터베이스에 접속하는데 필요한 기본 정보를 편리하게 사용할 수 있도록 상수로 만들었다. public abstract class ConnectionConst { public static final String URL = "jdbc:h2:tcp://localhost/~/test"; public static final String USERNAME = "sa"; public static final String PASSWORD = ""; } JDBC를 사용해서 실제 데이터베이스에 연결하는 코드 작성 DBConnectionUtil @Slf4j public class DBConnectionUtil { public sta..
전체 글
스프링부트를 사용해서 jdbc를 이해해보자 스프링 프로젝트 생성할 때 JDBC API, H2 Database, Lombok 선택 H2 데이터베이스 설정 MySQL을 많이 사용하지만 H2 데이터베이스는 개발이나 테스트 용도고 사용하기 좋은 가볍고 편리한 DB이다. 윈도우 사용자일 경우 cmd에서 H2/bin 폴더로 이동한 다음 h2.bat 를 입력해주면 실행된다. 데이터베이스 파일 생성 방법 JDBC URL에 다음 입력 : jdbc:h2:~/test (test말고 다른 걸로 설정해도 된다) 그 후 연결을 눌러주면 ~/test.mv.db 파일 생성을 확인한다 이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속 h2 데이터베이스를 웹 콘솔로 접근하기 위해서는 http://localh..
데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애 플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다 스프링을 통해 이러한 초기화 작업과 종료 작업을 어떻게 진행하는지 예제로 알아보자. 이 NetworkClient 는 애플리케이션 시작 시점에 connect() 를 호출해서 연결을 맺어두어야 하고, 애플리케이션이 종료되면 disConnect() 를 호출해서 연결을 끊어야 한다. public class NetworkClient{ private String url; //접속해야하는 서버 url public NetworkClient() { System.out.println("생성자 호출, url = " + u..
자동 빈 등록을 기본으로 사용하자 어떤 경우에 컴포넌트 스캔과 자동 주입을 사용하고, 어떤 경우에 설정 정보를 통해서 수동으로 빈을 등록하고, 의존관계도 수동으로 주입해야할까 → 자동을 선호하는 추세 스프링은 @Component뿐만 아니라 @Controller , @Service , @Repository 처럼 계층에 맞추어 일반적인 애플 리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 자동 빈 등록을 사용해도 OCP, DIP를 지킬 수 있다 설정 정보를 기반으로 애플리케이션을 구성하는 부분과 실제 동작하는 부분을 명확하게 나누는 것이 이상적 이지만, 개발자 입장에서 스프링 빈을 하나 등록할 때 @Component 만 넣어주면 끝나는 일을 @Configuration 설정 정보에 가서 @Bean 을 적..
할인 서비스를 제공하는데, 클라이언트가 할인의 종류(rate, fix)를 선택할 수 있다고 가정해보자. 스프링을 사용하면 소위 말하는 전략 패턴을 매우 간단하게 구현할 수 있다 public class AllBeanTest { @Test void findAllBean() { ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); DiscountService discountService = ac.getBean(DiscountService.class); Member member = new Member(1L, "userA", Grade.VIP); int discountPric..
@Autowired 는 타입(Type)으로 조회한다. 타입으로 조회하기 때문에, 마치 다음 코드와 유사하게 동작한다. ac.getBean(DiscountPolicy.class) 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다 예를 들어서 DiscountPolicy 타입의 빈 2개가 등록되고 DiscountPolicy 타입의 빈을 주입받으려고 한다고 하자 @Component public class FixDiscountPolicy implements DiscountPolicy {} @Component public class RateDiscountPolicy implements DiscountPolicy {} @Autowired private DiscountPolicy discountPolicy..
생성자 주입을 하게 되면 필드에 fnal 키워드를 사용하고, 생성자 만들고 주입받을 값을 대입하는 코드를 만들어야한다. @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, @MainDiscountPolicy DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this...
다양한 의존관계 주입 방법 생성자 주입 수정자 주입(Setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계 주입 생성자 호출 시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 스프링 빈 등록될 때 자동으로 주입이 일어난다. (1단계로 다 빈등록 의존관계 주입) 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입이 된다. (스프링 빈에만 해당: 아래 코드에서는 @Component로 스프링 빈으로 등록함) @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final Disco..
컴포넌트 스캔과 의존관계 자동 주입 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다 이렇게 등록해야 할 스프링 빈이 수십, 수백개가 되면 일일이 등록하기도 귀 찮고, 설정 정보도 커지고, 누락하는 문제도 발생한다 아래 코드처럼 컴포넌트 스캔을 사용하려면 먼저 @ComponentScan 을 설정 정보에 붙여주면 된다. @Configuration //@ComponentScan: 스프링 빈을 다 끌어다가 자동으로 스프링 빈으로 끌어올리는.. @ComponentScan( //스프링 빈 등록에서 제외할 것 excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuratio..