| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- topologySpreadConstraints
- post
- html
- ssh
- spring
- ajax
- mysql
- Kubernetes
- node.js
- git
- Bootstrap
- Get
- Java
- spread operator
- MySQL Error
- javascript
- 인생이재밌다
- json
- AWS
- sessionStorage
- AWS Route53
- chartjs
- ES6
- AWS RDS
- jsp
- 영화예매
- 예매로직
- mongodb
- zombie-hit apartment
- terminationGracePeriodSeconds
- Today
- Total
jongviet
May 24, 2021 - JSP 3일차(DBCP, JSP encoding) 본문
*5월24일
-그동안 JDBC를 사용 시 단편적으로 클라이언트 측에서 요청이 올 때 마다 새로운 conn을 따서 DB에 연결하는 방식으로 실습을 진행했다. 이는 공부하는 주니어 개발자가 철저히 연습하는 환경에서 수행해본 방법이고, 실제 서비스에 있어서는 사용량을 철저하게 고려하여 설계가 이루어져야하기에 DBCP 활용이 중요하다.
-오늘은 DBCP가 무엇인지 왜 쓰는지 간략하게 정리해보고자 한다.
*DBCP : Database Connection Pool
-기존에는 접속 할 때마다 'Driver Load' -> 'conn에 getConnection' 받아오는 과정으로 실습함. DBCP는 그것을 보완하기 위한 기술임.
-실제 서비스에서는 커넥션 풀 사용하지 않을 시 과부하 걸림.. '클라이언트 -> 커넥션풀 -> DB'
-DBCP 기술은 현재 톰캣에 내장되어 있음! 톰캣꺼 쓰면됨 걍!!
->Spring넘어가면 톰캣꺼 안쓰고 자체 라이브러리에 제공되는 기술을 씀!
-JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup)하기 위한 자바 API다. 인터페이스나 클래스 이름을 그대로 xml과 매핑시키는 기술이라고 볼 수 있음.
-프로젝트 web.xml 내부에 설정
<resource-ref>
<description>DB Connection</description> //자체이름지정
<res-ref-name>jdbc/mysql</res-ref-name> //자체이름지정, name
<res-type>javax.sql.DataSource</res-type> //java extension의 sql내, type
<res-auth>Container</res-auth> //하나의 데이터 소스를 가지고 있는 박스라는 느낌~, auth
</resource-ref>
-DBCP 설정값 / mysql버전, Servers/Tomcat/context.xml내에 저장
<Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"
maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="root" password="*****" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/sqlex/>
//maxWaitMillis는 주로 6000~10000 6~10초로 커넥션 얻기 전 대기시간; 해당 시간 초과 시 예외처리됨. -1로 세팅 시 무한정 대기 가능.
//maxTotal은 동시에 사용할 수 있는 최대 커넥션 개수, -1로 지정하면 제한없이 사용가능. mysqld max_connections 설정값을 맞춰줘야함!
//maxidle은 커넥션풀에 미사용상태로 최대한 보관 될 수 있는 커넥션의 수!
-maxWaitMillis 관련
한국의 인터넷 사용자는 2~3초내에 페이지가 로딩되거나 반응이 오지 않을 시 바로 나감. 만약 maxWaitMillis를 10초로 지정한다면 실제 10초가 지났을 때 남아있는 사용자는 거의 없을 것... 반대로 너무 짧게 설정하면 수 많은 사람들에게 오류가 리턴되어 난장판이 될 것임. 사용서비스의 특성, 타겟 사용자의 특성을 고려해서 설계해야 하는 중요한 부분임!
-Transaction per seconds(TPS) : 초당 처리할 수 있는 요청의 수

-DBCP = DBManager class 내부 코드
package model;
import java.sql.Connection;
import java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
public class DBManager {
public static Connection getConnection() {
Connection conn = null; //connection = getConnection(url, id, pwd);
try {
//tomcat context.xml에 설정한 리소스 찾아서 가져옴
Context initCtx = new InitialContext(); //Context는 하나의 박스(인터페이스), key:value로 구성된 내부값들
//자바 컴파일러 환경 설정
Context envCtx = (Context) initCtx.lookup("java:/comp/env"); //자바컴파일러환경, 설정된코드
//DataSource 설정, DataSource형태는 Spring까지 감! DB 커넥 전에 필요한 사전 작업을 하는게 DataSource;
DataSource ds = (DataSource) envCtx.lookup("jdbc/mysql"); //DataSource = context.xml의 name
try {
conn = ds.getConnection();
} catch (SQLException e) {
System.out.println("DB 커넥션 오류");
e.printStackTrace();
}
} catch (NamingException e) {
System.out.println("DBCP 설정 오류");
e.printStackTrace();
return null;
}
return conn;
}
}
*JSP request & response encoding
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("UTF-8");
'Spring legacy' 카테고리의 다른 글
| June 1, 2021 - 웹 보안 관련 기본(get&post 분기처리, session, admin account) (0) | 2021.06.01 |
|---|---|
| May 28, 2021 - Spring, JSP 각종 용어 개념(학습내용 + 찾은 내용 필기 (1) | 2021.05.28 |
| May 26, 2021 - JSP 웹 file 삽입/수정/삭제(개인 필기) (1) | 2021.05.26 |
| May 23, 2021 - JSP 2일차 (0) | 2021.05.23 |
| May 21, 2021 - JSP 1일차 (0) | 2021.05.21 |