스프링/5. 스프링 DB-1 40

9. DataSource

커넥션을 얻는 다양한 방법. 근데 우리는 결과적으로 HikariCP 커넥션 풀을 사용하게 될거임. 뭐 그렇긴 한데, 저렇게 다양한 방법이 있으니 사용법이 같은 커넥션을 얻어오는거라도 조금씩 사용 방법이 다를 수 있음. 그래서 커넥션 획득을 추상화 했는데, DataSource로 추상화 함. 저런 커넥션 풀 라이브러리나 DriverManager중에 DataSource를 상속받아 만든 게 있음. 그렇기 때문에, 우리가 여러 커넥션 풀 라이브러리를 쓰고 싶다면, 그냥 저 DataSource라는 인터페이스에 의존하도록 로직을 작성하면 된다. 이 인터페이스는 결론적으로 커넥션을 얻는 것에 집중된 인터페이스이다.

8. 커넥션 풀

커넥션을 획득하는 과정 0. 요청, 1. DB드라이버(라이브러리)에서 커넥션을 찾음. 2. TCP/IP 방식으로 DB와 커넥션 연결. 이 때 3 way handshake과 같은 네트워크 연결을 위한 동작이 발생. 3. 커넥션이 완료된 DB에 DB드라이버가 db id, pw와 기타 부가 정보를 db에 전달. 4. db는 받은 id와 pw로 내부 인증을 완료하고(db 관리자의 id나 pw가 맞는지 등), db내부에서 세션 생성 5. DB는 커넥션 생성이 완료되었다고 응답. 6. DB드라이버는 커넥션 객체를 생성해서 반환. 이렇게 커넥션 한번 획득하는데 많은 과정을 거친다. 이거는 매번 이렇게 생성하고 버릴 게 아니라 생성 해놓고 유지시키는 게 좋다. 이렇게 미리 만들어 놓는 커넥션 풀은 서비스마다 다르지만 ..

7. 수정, 삭제

수정과 삭제를 추가시켰다. 똑같다. 수정 및 삭제하는 쿼리문을 만들고, 적절하게 바인딩 한뒤 excuteUpdate() 하면 된다. 직접적으로 DB의 데이터를 바꾸는 거니 excuteUpdate()를 써야 한다. public void update(String memberId, int money){ 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.setString(2, memberId);..

5. JDBC 등록

먼저, 테이블 만들어야 함. 기존에 h2에 member 테이블은 만들었었음. 그걸로 함. 먼저 DB에 들어갈 객체를 만들어 놓음 @Data public class Member { private String memberId; private int money; public Member() { } public Member(String memberId, int money) { this.memberId = memberId; this.money = money; } } 그 다음 Repository라는 디렉토리를 만듦. 리포지토리가 DB와 소통하는 친구임. @Slf4j public class MemberRepositoryV0 { public Member save(Member member) throws SQLExcept..

4. DB에 연결

일단 DB 실행 하고 시작 커넥션을 하는 거임. 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 = "1234"; } 먼저 DB 로그인 정보를 쉽게 쓰기 위해 Const로 만듦. 실제로 생성할 게 아니라서 추상 클래스로 만듦. @Slf4j public class DBConnectionUtil { public static Connection getConnection(){ try { Connection connection = ..

3. JDBC 최신기술

JDBC를 직접 사용하기 보다는, JDBC를 편리하게 사용할 수 있도록 해주는 기술들이 존재한다. 대표적으로 SQL Mapper와, ORM이 있다. JdbcTemplate, MyBatis는 대표적인 SQL Mapper, 둘다 스프링이 제공하는 거임. SQL Mapper는 응답결과를 객체로 자동으로 변환해준다던지, 반복코드도 제공해주고 그런다. ORM은 쿼리를 넣는게 아니라, 매핑 설정 정보를 주면 객체를 넣어주면 그걸 자동으로 쿼리문으로 만들어서 DB에 전달한다. 대표 기술 : JPA, 하이버네이트, 이클립스 JPA는 ORM 표준 인터페이스고, 이걸 구현한 게 하이버네이트나 이클립스 링크 등. 보통 하이버네이트 씀. 더 제공해주는 기능들이 많다고 함. Spring Data JPA, Query DSL는 J..

2. JDBC

중요한 데이터는 대부분 DB에 저장 보통 요런 구조. 우리가 domain과 web을 따로 나눴었죠? 보통, 빠른 응답을 위해 먼저 커넥션을 연결한다. 주로 TCP/IP로 연결한다. 그 다음은 그냥 SQL에 요청하고 응답받고 그런거다. 옛날엔 문제였던게, DB마다 커넥션을 연결하는 방법, SQL을 전달하는 방법, 응답받는 방법 모두 달랐다. 그래서 학습도 해야 했고, 코드도 또 짜야됐다. DB변경 시에는. 그때 나온 게 JDBC(Java Database Connectivity) 자바에서 제공하는 DB와의 의사소통을 위한 API이다. 통역사 역할? 을 하는 듯? 우리는 우리 말만 사용해도 각자의 DB에 맞게 알아서 바꿔서 전달해 주는 듯. JDBC가 제공하는 것들 중 대표적인 인터페이스는 java.sql.C..

1. 환경준비

start.spring.io의 개발종속 라이브러리는 h2 jdbc lombok 이렇게 3개 build.gradle에 testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok' 이거 두개 추가, @Test 환경에서도 lombok 쓸 수 있게 해 주는거임. 그리고 h2 데이터베이스도 설치 해야 하는데 (위에 h2는 h2와 연동해서 다룰 수 있게 해주는 라이브러리) 라이브러리에 설치된 버전이랑 맞춰 줘야 함. 걍 저거랑 똑같은 버전의 h2 설치하면 됨. 설치 후, 실행해보면 근데 처음에는 db 파일이 없어서 연결 해도 에러 뜸. 저건 url로 접근하는 거라 파일이 없으면 못찾고, 맨 처음엔 직접 파일로..