<20210719>

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()이다.

 


 

참고

https://atoz-develop.tistory.com/entry/Tomcat-%EC%84%9C%EB%B2%84-DataSource-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95-JNDI

 

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