
실제 현장에서 data source를 한개만 쓰는 경우는 거의 없다고 보면 된다.
예전에는 oralce을 계정을 틀리게 여러개 썼지만
요즘은 oracle + postgresql
mysql + mariadb 처럼 서로 종류가 틀린 놈들을 묶어서 쓰기도 한다.
하지만 천리길도 한걸음 부터니 한개의 data source 를 쓰는 법 부터 배워 보자.
사실 한개의 data source를 쓸때는 코딩도 거의 필요 없다.
Spring boot 프로젝트를 만들고 의존성을 주입하는 내용은 이번 글에서 다루지않겠다.
아래 링크를 참고해 보기 바란다.
2. Spring boot 프로젝트 만들기 with Spring initializr
이전 작업들에서 Intellj 를 virtual box 내 우분투에 설치 하고,바탕화면에 바로 가기를 추가 했다. 내가 설치한 Intellij 는 community edtion이기에 tool 로 spring boot 프로젝트를 만들수 없다.가장 편하게
robin-write.tistory.com
1. Spring boot 프로젝트를 intellj 로 불러 왔다면 applicaton.properties 를 수정 한다.
Spring boot Project의 기본 설정 파일은 resources 폴더 아래 application.properties 지만
application.yml 로 설정을 해도 된다.
기본은 application.properties 를 보고 만약 그게 없으면 application.yml을 본다.
== applicatin.propertis 로 설정 하는 경우==
spring.datasource.url=jdbc:oracle:thin:@//<호스트>:<포트>/<서비스명>
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
# MyBatis 설정
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.map-underscore-to-camel-case=true
== application.yml 로 설정 하는 경우==
spring:
datasource:
url: jdbc:oracle:thin:@//<호스트>:<포트>/<서비스명>
username: your_username
password: your_password
driver-class-name: oracle.jdbc.OracleDriver
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
과거의 나처럼 서비스명을 멀 넣어야 되 하는 사람이 있을 거다
그런 분은 아래 접은 내용을 읽어 보기 바란다.
아래 접은내용을 열어보기 바란다. 피와 살이된다.
1. SID (System Identifier)
- SID는 Oracle 데이터베이스 인스턴스를 고유하게 식별하는 이름입니다.
- Oracle 서버에서 하나의 데이터베이스 인스턴스를 나타내며, 데이터베이스 파일과 직접 연결됩니다.
- Oracle 인스턴스는 프로세스와 메모리 구조를 포함하며, 이러한 인스턴스를 구분하기 위해 SID가 필요합니다.
- SID는 로컬 연결을 위해 주로 사용됩니다.
예:
- orcl이라는 이름의 SID는 특정 인스턴스를 식별합니다.
- 데이터베이스 서버에 직접 연결하거나 로컬 클라이언트를 사용할 때 사용됩니다.
2. 서비스명 (Service Name)
- 서비스명은 Oracle 네트워크(예: sqlnet 또는 TNS)를 통해 데이터베이스에 연결할 때 사용됩니다.
- 서비스명은 다중 사용자 또는 다중 애플리케이션 환경에서 논리적으로 데이터베이스를 그룹화하기 위해 설계되었습니다.
- 하나의 데이터베이스에서 여러 개의 서비스명을 가질 수 있습니다.
- 서비스명은 네트워크를 통해 데이터베이스에 연결할 때만 사용됩니다.
예:
- 여러 애플리케이션이 서로 다른 서비스명을 통해 동일한 데이터베이스에 연결할 수 있습니다.
- mydb.example.com이라는 서비스명은 네트워크 연결 설정 시 사용됩니다.
3. 주요 차이점
특징SID서비스명| 정의 | 데이터베이스 인스턴스를 식별 | 네트워크 연결 시 데이터베이스를 식별 |
| 용도 | 데이터베이스 서버 내부 또는 로컬 연결에 사용 | 클라이언트와 네트워크 기반 연결에 사용 |
| 복수 개 가능 여부 | 하나의 인스턴스당 하나 | 하나의 데이터베이스에 여러 개 가능 |
| 사용 범위 | 로컬 식별자 (물리적) | 네트워크 식별자 (논리적) |
4. 예제
TNS 설정에서의 차이
- SID 기반 연결:
-
plaintext코드 복사(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SID = orcl) ) )
- 서비스명 기반 연결:
-
plaintext코드 복사(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = mydb.example.com) ) )
5. 언제 어떤 것을 사용하는가?
- SID는 Oracle 서버 내부에서 관리 작업을 수행하거나 특정 인스턴스에 로컬 연결을 해야 할 때 사용됩니다.
- 서비스명은 외부 클라이언트 애플리케이션(예: Spring Boot, MyBatis 등)에서 데이터베이스에 연결할 때 일반적으로 사용됩니다.
SID 를 사용 하여 접속할때는 (/ -> : 로 바뀐다)
"jdbc:oracle:thin:@//<호스트>:<포트>/<서비스명>" 으로 쓰면 안되고 jdbc:oracle:thin:@//<호스트>:<포트>:<SID>
이게 모든 설정의 끝이다.
mybatis 를위한 mapper interface 자바 파일을 만들고
interface 자바 파일과 매칭 되는 mapper xml을 만들고
쿼리결과가 담길 dto 파일을 만드는 내용은 적지 않는다.이번 글은 오직 datasoure 를 한개 쓸때의 설정이 머가 필요 한가를 설명하는 용이니까.
만약 mapper interface , xml 파일, dto 를 만드는걸 알고 싶은 분은아래 링크를 훌터 보시면 도움이 되지 않을까 한다.
오늘도 읽어 주셔서 감사 합니다.
'SI 업무 > spring boot' 카테고리의 다른 글
| @Configuration 의 용도? Interface 를 어떻게 주입하지? (0) | 2024.12.26 |
|---|---|
| 5. JWT, Spring Security (0) | 2024.12.02 |
| 4. profile 로 다른 설정 관리 (0) | 2024.11.29 |
| 3. log는 어떻게 남기지? (1) | 2024.11.29 |
| 2. 복수개의 data source 연결은 어떻게? (4) | 2024.11.27 |