전체 글
-
스프링 DB - DataSource의 이해Data Base/스프링 DB 2023. 11. 21. 14:47
DataSource 이해 커넥션을 얻는 방법은 앞서 학습한 JDBC DriverManager를 직접 사용하거나, 커넥션 풀을 사용하는 등 다양한 방법이 존잰한다. 커넥션을 획득하는 다양한 방법 DriverManager를 통해 커넥션 획득 JDBC로 개발한 애플리케이션 처럼 DriverManager를 통해서 커넥션을 획득하다가, 커넥션 풀을 사용하는 방법으로 변겨하려면 어떻게 해야 할까? DriverManager를 통해 커넥션 획득을 하다가 커넥션 풀로 변경시 문제 예를 들어서 애플리케이션 로직에서 DriverManager를 사용해서 커넥션을 획득하다가 HikariCP 같은 커넥션 풀을 사용하도록 변경하면 커넥션을 획들하는 애플리케이션 코드도 함께 변경해야한다. 의존관계가 DriverManager에서 Hi..
-
스프링 DB 1 - 커넥션 풀 과 데이터 소스 이해Data Base/스프링 DB 2023. 11. 21. 14:03
커넥션 풀 이해 데이터베이스 커넥션을 매번 획득 데이터 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거친다. (DriverManager.getConnection()사용시) 애플리케이션 로직은 DB드라이버를 통해 커넥션을 조회한다. DB드라이버는 DB와 TCP/IP 커넥션을 연결한다. 물론 이 과정에서 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생한다. DB드라이버는 TCP/IP 커넥션이 연결되면 ID,PW와 기타 부가정보를 DB에 전달한다. DB는 ID, PW 통해 내부 인증을 완료하고, 내부에 DB세션을 생성한다. DB는 커넥션이 생성이 완료되었다는 응답을 보낸다. DB드라이버는 커넥션 객체를 생성해서 클라이언트에 반환한다. 이렇게 커넥션을 새로 만드는 것은 과정도..
-
Spring 기본 24 - 롬복과 최신 트렌드FrameWork/Spring&Spring-boot 2023. 11. 21. 13:34
롬복과 최신 트렌 막상 개발을 해보면 대부분 다 불변이고, 그래서 다음에 오는 코드와 같이 생성자에 final 키워드를 사용하게 된다. 그런데 생성자도 만들어야 하고, 주입 받은 값을 대입하는 코드도 만들어야하고, 필드주입 처럼 편리하게 사용할 수 있는 방법은 없는 걸까? 다음의 기본 코드를 최적화 하며 알아보자. 기본 코드 @Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository me..
-
스프링 기본 23 - 생성자 주입을 선택해라FrameWork/Spring&Spring-boot 2023. 11. 21. 13:01
과거에는 수정자 주입과 필드 주입을 많이 사용했지만, 최근에는 스프링을 포함한 DI프레임워크 대부분이 생성자 주입을 권장한다. 그 이유는 다음과 같다. 불변 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다.(불변해야 한다.) 수정자 주입을 사용하면, seXxx 메서드를 public으로 열어두어야 한다. 누군가 실수로 변경할 수 도 있고 변경하면 안되는 메서드를 열어두는 것은 좋은 설계방법이 아니다. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에는 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. 누락 프레임워크 없이 순수한 자바 코드를 단위 테스트 하는 경우에 다음과 같이 ..
-
스프링 기본 22- 옵션 처리FrameWork/Spring&Spring-boot 2023. 11. 21. 11:42
옵션처리 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 그런데 @Autowired만 사용하면 required 옵션 기본값이 ture로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법은 다음과 같다. @Autowired(required=false): 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨. org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null이 입력된다. Optional : 자동 주입할 대상이 없으면 Optional.empty가 입력된다. package autowired; import com.hello.core.member.Member; import org.junit.jupiter.ap..
-
스프링 기본 21 - 의존관계 자동 주입FrameWork/Spring&Spring-boot 2023. 11. 21. 10:50
다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통새서 의존 관계를 주입 받는 방법이다. 앞선 게시물에서 진행했던 방법이 생성자 주입이다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다.(이후에 다시 setting X) ⭐불변,필수 의존관계에 사용 package com.hello.core.order; import com.hello.core.discount.DiscountPolicy; import com.hello.core.discount.FixDiscountPolicy; import com.hello.core.member.Member; import com.hello...
-
스프링 DB 1 - JDBC개발 - 수정, 삭제Data Base/스프링 DB 2023. 11. 20. 17:10
JDBC개발 - 수정, 삭제 수정과 삭제는 등록과 비슷하다. 등록, 수정, 삭제 처럼 데이터를 변경하는 쿼리는 executeUpdate()를 사용하면 된다. MemberRepositoryV0 - 회원 수정 추가 private void update(String memberId, int money) throws SQLException { String sql = "update member set money=? where member_id = "; Connection con = null; PreparedStatement pstmt = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setInt(1,money); pstmt.s..
-
스프링 DB - JDBC 개발 - 조회Data Base/스프링 DB 2023. 11. 20. 15:54
JDBC 개발 - 조회 예시 - JDBC를 통해 이전에 저장한 데이터를 조회하는 기능을 개발 MemberRepositoryV0 - 회원 조회 추가 public Member findById(String memberId) throws SQLException { String sql = "select * from member where member_id = ?"; Connection con = null; PreparedStatement pstmt = null; ResultSet rs = null; try { con = getConnection(); pstmt = con.prepareStatement(sql); pstmt.setString(1,memberId); //DB에서 정보 조회시 rs = pstmt.exe..