목록Database/SQL, JDBC (12)
ecsimsw
소개 이 글은 PIC-UP 프로젝트에 데이터가 쌓였을 때 조회 성능이 어떻게 되고, 어떤 개선 포인트가 있을지 확인했던 과정을 적어보았다. DB 쿼리 빈도를 줄여 조회 성능을 개선하는 캐싱이나 DB 부하 분산은 다루지 않는다. 대신 데이터를 만드는 방법부터 DB 엔진에 넣는 데 걸리는 시간, 인덱스나 쿼리 수정 고민 과정을 적어볼 생각이다. 다루는 내용은 아래와 같다. 1. 데이터를 삽입하는 방법 / 배치 삽입과 파일 삽입 2. 쿼리 조회 성능 확인 3. 인덱스 추가 / 인덱스와 커버링 인덱스 4. 실행 계획 확인 5. OFFSET 기반 페이지네이션 문제 확인과 개선 더미 데이터 추가 유저 정보를 담는 테이블로 더미 데이터를 먼저 넣어봤다. 컬럼은 ID:BIGINT, USERNAME:VARCHAR(20)..
Connection pool 이전에는 db에 엑세스하기 위해 매번 DB connection -> Handling -> DB close을 반복해야했다. 필요한 db 접근이 많아질수록, 이런 과정은 부하를 낳을 것이다. Connection pool은 connection을 일정 개수 미리 만들어 두고, 웹서버가 db에 접근이 필요할 때마다 하나씩 빌리고 반납하는 방식으로 처리하여 위 문제를 해결한다. JSP과 mySql 연동, 커넥션 풀 1. 라이브러리 설치 commons-collections / commons-pool / commons-dbcp 라이브러리를 필요로한다. appache commons에서 다운로드. 2. WebContent / WEB-INF / lib 위에서 설치한 3개의 jar 파일 복사 3...
이전 코드 이전에 Statement로 sql을 적용시키고, 같은 명령을 값만 바꿔서 더 빠르게 처리하기 위해서 PreparedStatement를 사용해서 아래 코드로 insert와 select를 만들었다. 그런데도 그 코드는 다른 기능과 함께 사용하려면 아마 함수나 객체로 만들어 처리하는게 더 가시적이고 편할 것이다. 즉 데이터베이스의 CRUD를 모듈화 한 것이 DAO이다. try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:mysql://localhost:3306/hellojdbc?serverTimezone=UTC"; conn = DriverManager.getConnection(url, "root", "root"); System.out.pr..
PreparedStatement PreparedStatement를 사용하면, 미리 정해둔 sql 틀 안에 인자만 달리해서 마치 함수처럼 쿼리문을 재사용할 수 있다. 또 캐시의 적용으로 동일한 쿼리를 반복해서 사용할 때, Statement 보다 빠른 성능을 보인다. ( 단일 사용의 경우 Statement가 빠르다. ) 사용 방법 PreparedStatement pstat = conn.prepareStatement(sql); pstat.setString(parameterIndex, value); pstat.executeUpdate(); rs = pstat.executeQuery(); 사용 예시 try{ Class.forName("com.mysql.jdbc.Driver"); String url ="jdbc:m..
Statement Statement stat=conn.createStatement(); 1. executeUpdate / Create, Update, Delete String sql = "insert into logininfo(id,pw) values ('admin1','admin')"; int result = stat.executeUpdate(sql); System.out.println(result); 2. executeQuery / ResultSet / Read sql = "select * FROM logininfo"; ResultSet rs = null; rs=stat.executeQuery(sql); while(rs.next()) { String id =rs.getString("id"); Stri..
JDBC 설치 및 연결 JDBC 설치와 연결 JDBC 1. jdbc connector download MySQL :: Download Connector/J MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0. dev.mys.. ecsimsw.tistory.com 에러 사항 에러 1) ClassNotFoundException 나는 이렇게 했는데도 jar이 적용이 안되서 아래 방법으로 해결했다. 1. 프로젝트 우클릭 -> properties -> Deployment Assembly -> Add 2. Java Build Path Ent..
JDBC 1. jdbc connector download MySQL :: Download Connector/J MySQL Connector/J 8.0 is highly recommended for use with MySQL Server 8.0, 5.7 and 5.6. Please upgrade to MySQL Connector/J 8.0. dev.mysql.com 2. build path 설정 프로젝트 우클릭 -> properties -> java build path -> libraries -> Add External JARs -> connector jars 지정 연결 확인 1. import java.sql.*; 2. Class.forName("com.mysql.jdbc.Driver"); 3. Conne..
JOIN mysql> SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 비교값1 = 비교값2; 예시 mysql> SELECT * FROM contacts; +----+---------+------------+-----------+ | id | name | number | job | +----+---------+------------+-----------+ | 1 | jinhwan | 1012341234 | student | | 2 | jiwoo | 1012341334 | developer | | 3 | minsoo | 1012341224 | developer | | 4 | dami | 1032322323 | singer | | 5 | jisoo | 1012223324 | model | |..