2021. 7. 26. 00:11ㆍ스터디 정리
▶ tomcat server 여러개 올리기
- servers 우클릭 > new > server
▶ DB연결 > jndi
JNDI란
- Java Naming and Directory interface의 약자로 DB Pool을 미리 Naming 시켜두는 방법(DB 연결방법 중 하나)
- dataSource를 프로젝트 내부에서 설정해서 쓰는것이 아니라 WAS에서 만들어져 있는 dataSource를 jndi를 이용해 접근하여 해당 Connection를 가져와 쓰는 것
사용 이유
- 소스가 노출이 되어도 디비 커넥션 정보는 서버에 있기때문에 보안에 있어서 더 강점
- 개발과 서비스를 운영하는 사람이 다른 경우가 많기때문에 커넥션 정보가 소스에 있는것보다는 WAS에서 설정 되있는것을 선호
설정 방법
1) tomcat server.xml
<GlobalNamingResources>
<Resource name="jndi이름" auth="Container"
connectionProperties="SetBigStringTryClob=true"
driverClassName="oracle.jdbc.driver.OracleDriver"
maxActive="2"
maxIdle="2" maxWait="-1" type="javax.sql.DataSource"
url="연결Url"
username=""
password="" />
</GlobalNamingResources>
> 톰캣 서버에 디비 커넥션 정보를 설정
> url = "jdbc:oracle:thin:@서버아이피:포트:SID이름"
2) tomcat context.xml
<ResourceLink name="jndi이름"
global="jndi이름"
auth="Container"
type="javax.sql.DataSource" />
3) root-context.xml
<!-- 데이터 베이스 source 설정 -->
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="#{config['db.jndiName']}"/>
</bean>
> jndi이름은 application-properties 에서 설정해 놓은걸로 가져다 씀
▶ application-properties
- 외부 설정 파일 : 어플리케이션에서 사용하는 여러가지 설정 값들을 어플리케이션의 밖이나 안에 정의할 수 있는 파일
- 이 파일은 스프링이 프로젝트를 구동할 때 자동으로 로딩하는 파일
- 값을 설정하면 어플리케이션에서 참조할 수 있음
<그 밖의 참고할 것들>
- 어플리케이션은 JNDI를 사용하여 서버의 resource를 찾는다.
특히 JDBC resource를 data source라고 부른다. - Resource를 서버에 등록할 때 고유한 JNDI 이름을 붙이는데, JNDI 이름은 디렉터리 경로 형태를 가진다. 예를 들어 data source의 JNDI 이름은 'jdbc/mydb' 형식으로 짓는다.
다음은 Java EE 서버에서 자원을 찾을때의 기본 JNDI 이름
JNDI 이름 | 설명 |
java:comp/env | 응용 프로그램 환경 항목 |
java:comp/env/jdbc | JDBC Data Source |
java:comp/ejb | EJB 컴포넌트 |
java:comp/UserTransaction | UserTransaction 객체 |
java:comp/env/mail | JavaMail 연결 객체 |
java:comp/env/url | URL 정보 |
java:comp/env/jms | JMS 연결 객체 |
따라서 서버에서 'jdbc/mydb'라는 data source를 찾으려면 'java:comp/env/jdbc/mydb'라는 JNDI 이름으로 찾아야 한다. 즉 lookup() 메소드에 'java:comp/env/jdbc/mydb'를 인자값으로 넘긴다.
lookup() 메소드는 InitialContext 클래스의 메소드로 JNDI 인터페이스를 통해 서버에 등록된 객체를 찾는다.
<Resource> 태그
속성명 | 설명 |
name | JNDI 이름 Context의 lookup()을 사용하여 자원을 찾을때 사용한다. java:comp/env 디렉터리에서 찾을 수 있다. |
auth | 자원 관리의 주체를 지정한다. Application / Container를 지정할 수 있다. |
type | Resource의 타입을 패키지 이름을 포함한 클래스 이름(QName)을 지정한다. |
driverClassName | JDBC 드라이버 클래스의 이름 패키지 이름을 포함한 클래스 이름(QName)을 지정한다. |
url | DB 커넥션 URL |
username | DB 사용자 이름 |
password | DB 암호 |
maxActive | DataSource로부터 꺼낼 수 있는 커넥션 최대 개수 기본값 : 8개 |
maxIdle | DataSource에서 유지할 수 있는 사용되지 않는 커넥션의 최대 개수 최대 유지 개수를 넘어서 반납되는 커넥션은 close된다. 기본값 : 8개 |
maxWait | 발급한 커넥션 수가 최대값인 상태에서 추가로 커넥션 발급 요청이 들어왔을때 커넥션을 준비하기 위해 반납을 기다리는 최대 밀리초 최대 밀리초가 지날때까지 반납되는 커넥션이 없으면 Exception을 던진다. 기본값 : -1 (커넥션 반납할때까지 기다림) |
closeMethod | 톰캣 서버가 종료될 때 자원을 해제하기 위해 호출하는 메소드명 매개변수가 없어야 한다. 톰캣 서버는 내부적으로 DataSource를 생성할때 아파치 DBCP의 BasicDataSource 구현체를 사용하며 BasicDataSource의 자원 해제 메소드는 close()이다. |
참고
Tomcat 서버 DataSource 설정 방법 (+JNDI)
환경 정보 IntelliJ IDEA 2019.3 Ultimate, Amazon Corretto 11, Tomcat 9, JDBC 4.2, 의존성 관리 환경 X Tomcat 서버 DataSource 설정 방법 (+JNDI) ❕ 포스트 상단에는 DataSource, JNDI의 이론적인 내용이 포..
atoz-develop.tistory.com
https://ellordnet.tistory.com/200
[전자정부프레임워크] Tomcat JNDI Oracle/Mysql 설정
1. Tomcat server.xml 에 설정정보 추가 connectionProperties="SetBigStringTryClob=true" driverClassName="oracle.jdbc.driver.OracleDriver" maxActive="2" maxIdle="2" maxWait="-1" type="javax.sql.Dat..
ellordnet.tistory.com
'스터디 정리' 카테고리의 다른 글
ftp (0) | 2021.11.06 |
---|---|
리눅스 공부- 1일차 (0) | 2021.09.11 |
[20210730] 간단 정리 (0) | 2021.07.30 |
20210729_NVARCHAR 와 VARCHAR 차이 (0) | 2021.07.29 |
20210710 스터디 정리 (0) | 2021.07.10 |