목록스프링 5 프로그래밍 입문/8.DB 연동 (8)
진취적 삶
데이터 처리와는 상관없는 코드이지만 JDBC 프로그래밍을 할 때 구조적으로 반복되는 코드들이 있다. 구조적인 반복을 줄이기 위한 방법은 템플릿 메서드 패턴과 전략 패턴을 함께 사용한다. 스프링은 이 두 패턴을 엮은 JdbcTemplate 클래스를 제공한다. 커밋과 롤백 처리는 스프링이 알아서 처리하므로 코드를 작성하는 사람은 트랜잭션 처리를 제외한 핵심 코드만 집중해서 작성하면 된다.
org.springframework spring-jdbc 5.0.2.RELEASE org.apache.tomcat tomcat-jdbc 8.5.27 mysql mysql-connector-java 5.1.45 spring-jdbc : JDBC 연동에 필요한 기능 제공 tomcat-jdbc : DB 커넥션풀 기능 제공 mysql-connector-java : MYSQL 연결에 필요한 JDBC 드라이버 제공 커넥션 풀 : 최초 연결에 따른 부하를 줄이기 위해 사용하는것이 커넥션 풀 커넥션 풀은 일정 개수의 DB커넥션을 미리 만들어두는 기법이다 . DB커넥션이 필요한 프로그램은 커넥션 풀에서 커넥션을 가져와 사용한 뒤 커넥션을 다시 풀에 반납한다. 커넥션도 일정 개수로 유지해서 DBMS에 대한 부하를 일정 수..
8.3.1 Tomcat JDBC의 주요 프로퍼티 tomcat JDBC 모듈의 pool.DataSource 클래스는 커넥션 풀 기능을 제공 커넥션 풀은 커넥션을 생성하고 유지한다. 커넥션 풀에 커넥션을 요청하면 해당 커넥션은 활성 상태가 된다. 커넥션을 다시 커넥션 풀에 반환하면 idel 상태가 된다. datasource.getConnection() : pool에서 커넥션을 가져온다. 커넥션을 종료하면 실제 커넥션을 끊지 않고 풀에 반환한다. maxActive는 활성 상태가 가능한 최대 커넥션 개수 maxWait 커넥션 반환 대기 시간 커넥션 풀을 사용하면 미리 커넥션을 생성했다가 필요할 때에 커넥션을 꺼내 쓰므로 구하는 시간이 줄어 전체 응답 시간도 짧아진다. 커넥션 풀을 초기화 할때는 최소 수준의 커넥..
8.4.1 JdbcTemplate 생성 public class AppCtx { @Bean(destroyMethod = "close") public DataSource dataSource(){ DataSource ds = new DataSource(); ds.setDriverClassName("com.mysql.jdbc.Driver"); ds.setUrl("jdbc:mysql://localhost/spring5fs?characterEncoding=utf8"); ds.setUsername("spring5"); ds.setPassword("spring5"); ds.setInitialSize(2); ds.setMaxActive(10); ds.setTestWhileIdle(true); ds.setMinEvicta..
public class MainForMemberDao { private static MemberDao memberDao; public static void main(String[] args) throws WrongIdPasswordException { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppCtx.class); memberDao = ctx.getBean(MemberDao.class); selectAll(); updateMember(); insertMember(); } private static void selectAll() { System.out.println("----------seletAll"..
SQL 문법이 잘못됐을때 발생한 메시지는 BadSqlGrammerException 클래스임을 확인 스프링은 JDBC 뿐만 아니라 JPA, 하이버네이트 등에 대한 연동을 지원하고 MyBatis 는 자체적으로 스프링 연동 기능을 제공한다. 스프링은 DuplicateKeyException , QueryTimeoutException 등 DataAccessException 을 상속한 다양한 익셉션 클래스를 제공한다.
이메일 인증 시점에 테이블의 데이터를 변경하는 기능은 다음 코드처럼 회원정보에서 이메일을 수정하고 인증 상태를 변경하는 두 쿼리를 실행 jdbcTemplate.update("update MEMBER set EMAIL = ?" ,email); jdbcTemplate.update("insert into EMAIL_AUTH values(?,'T')" ,email); 중복이나 코드를 잘못 수정/배포 해서 두번째 쿼리에서 문제가 생겼을때 첫번째 ㅋ쿼리 실행 결과도 취소되야 올바른 상태를 유지한다. 두개 이상의 쿼리를 한 작업으로 실행해야 할 때 사용하는 것이 트랜잭션이다 . 트랜잭션은 여러 쿼리를 논리적으로 하나의 작업으로 묶어준다 . 트랜잭션으로 묶인 쿼리 중 하나라도 실패하면 전체 쿼리를 실패로 간주하고 실패..
link_preview