로컬 개발환경 설정 및 bootRun 구성
- build.gradle: bootRun에 sourceResources, dev 프로파일 적용 - application-dev.yml: DB 접속 정보를 로컬 Docker Oracle로 변경 - logback-spring.xml: dev 프로파일에 CONSOLE appender 추가 - BOOTRUN_SETUP_GUIDE.md: Eclipse Terminal 기반 bootRun 실행 가이드 추가
This commit is contained in:
@@ -0,0 +1,173 @@
|
|||||||
|
# eapim-portal 로컬 개발 환경 실행 가이드
|
||||||
|
|
||||||
|
> Eclipse Terminal에서 `gradlew bootRun`으로 기동하는 방법
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 환경 구성 개요
|
||||||
|
|
||||||
|
| 항목 | 내용 |
|
||||||
|
|------|------|
|
||||||
|
| DB | 로컬 Docker Oracle 19c |
|
||||||
|
| 포트 | 8080 |
|
||||||
|
| 프로파일 | dev |
|
||||||
|
| 실행 방법 | Eclipse Terminal → `gradlew.bat bootRun` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. 사전 준비: 로그 디렉토리 생성
|
||||||
|
|
||||||
|
최초 1회만 실행 (없으면 기동 실패)
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
mkdir C:\Log\eapim\portal
|
||||||
|
mkdir C:\Log\App\eapim
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Docker Oracle 기동
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
cd D:\eActive\workspaces\elink-djbank\docker\ekjb
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Oracle 완전 기동 확인 (처음 기동 시 3~5분 소요):
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
docker logs -f oracle
|
||||||
|
```
|
||||||
|
|
||||||
|
`DATABASE IS READY TO USE!` 메시지 확인 후 다음 단계 진행.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Eclipse Terminal에서 bootRun 실행
|
||||||
|
|
||||||
|
### Eclipse Terminal 열기
|
||||||
|
|
||||||
|
`Window` → `Show View` → `Terminal`
|
||||||
|
→ 우측 상단 **+** 클릭 → **Local Terminal** 선택
|
||||||
|
|
||||||
|
### 실행 명령어
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
cd D:\eActive\workspaces\elink-djbank\eapim-portal
|
||||||
|
gradlew.bat bootRun
|
||||||
|
```
|
||||||
|
|
||||||
|
### 기동 성공 확인
|
||||||
|
|
||||||
|
```
|
||||||
|
##### PortalApplication Ready #####
|
||||||
|
```
|
||||||
|
|
||||||
|
브라우저에서 `http://localhost:8080` 접속 확인.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. 수정된 파일 목록
|
||||||
|
|
||||||
|
### 4-1. `src/main/resources/application-dev.yml`
|
||||||
|
|
||||||
|
DB 호스트를 원격 서버에서 로컬 Docker로 변경:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
ems:
|
||||||
|
datasource:
|
||||||
|
jdbc-url: jdbc:oracle:thin:@//localhost:1599/DAPM # 변경
|
||||||
|
username: EMSAPP
|
||||||
|
password: elink1234
|
||||||
|
|
||||||
|
gateway:
|
||||||
|
datasource:
|
||||||
|
jdbc-url: jdbc:oracle:thin:@//localhost:1599/DAPM # 변경
|
||||||
|
username: AGWAPP
|
||||||
|
password: elink1234
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4-2. `build.gradle`
|
||||||
|
|
||||||
|
`bootRun` 태스크에 `sourceResources` 추가:
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
bootRun {
|
||||||
|
sourceResources sourceSets.main // processResources 필터 우회 (dev yml 직접 참조)
|
||||||
|
args = ["--spring.profiles.active=dev"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
> **이유**: `processResources`가 `application-dev.yml`을 빌드 출력에서 제외하도록 설정되어 있어,
|
||||||
|
> `sourceResources sourceSets.main`을 추가해야 `bootRun` 실행 시 소스 디렉토리를 직접 참조함.
|
||||||
|
|
||||||
|
### 4-3. `src/main/resources/logback-spring.xml`
|
||||||
|
|
||||||
|
`dev` 프로파일에 CONSOLE appender 추가 (콘솔 로그 출력):
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<springProfile name="dev">
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="ROLLING"/>
|
||||||
|
<appender-ref ref="CONSOLE"/> <!-- 추가 -->
|
||||||
|
</root>
|
||||||
|
</springProfile>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4-4. `.classpath`
|
||||||
|
|
||||||
|
MapStruct 등 Gradle annotation processor 생성 소스를 Eclipse 소스 폴더로 추가:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<classpathentry output="bin/main" kind="src"
|
||||||
|
path="build/generated/sources/annotationProcessor/java/main">
|
||||||
|
<attributes>
|
||||||
|
<attribute name="gradle_scope" value="main"/>
|
||||||
|
<attribute name="gradle_used_by_scope" value="main,test"/>
|
||||||
|
</attributes>
|
||||||
|
</classpathentry>
|
||||||
|
```
|
||||||
|
|
||||||
|
> **이유**: Eclipse는 Gradle annotation processing을 자동 실행하지 않으므로,
|
||||||
|
> `gradlew.bat compileJava` 실행 후 생성된 소스 경로를 Eclipse 빌드 경로에 수동 추가 필요.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Annotation Processor 소스 재생성
|
||||||
|
|
||||||
|
소스 구조 변경(매퍼 추가 등) 시 재실행 필요:
|
||||||
|
|
||||||
|
```cmd
|
||||||
|
cd D:\eActive\workspaces\elink-djbank\eapim-portal
|
||||||
|
gradlew.bat compileJava
|
||||||
|
```
|
||||||
|
|
||||||
|
이후 Eclipse에서 `Project` → `Clean` 실행.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Eclipse에서 직접 기동이 안 되는 이유
|
||||||
|
|
||||||
|
Eclipse는 참조 프로젝트(`elink-online-core-jpa`)의 test scope 의존성을 구분하지 않고
|
||||||
|
런타임 클래스패스에 모두 포함시킵니다.
|
||||||
|
|
||||||
|
이로 인해 Spring Boot 버전 충돌 발생:
|
||||||
|
|
||||||
|
| 출처 | jar | 충돌 대상 |
|
||||||
|
|------|-----|-----------|
|
||||||
|
| `elink-online-core-jpa` (test) | `spring-boot-autoconfigure:2.6.15` | eapim-portal `2.7.18` |
|
||||||
|
| `elink-online-core-jpa` (test) | `spring-core:5.3.27` | eapim-portal `5.3.31` |
|
||||||
|
|
||||||
|
→ `gradlew bootRun`은 Gradle의 dependency management(BOM)로 버전을 통일하므로 이 문제가 없음.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. Docker Oracle 계정 정보
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|----|
|
||||||
|
| Host | localhost |
|
||||||
|
| Port | 1599 |
|
||||||
|
| SID | DAPM |
|
||||||
|
| EMS 계정 | EMSAPP / elink1234 |
|
||||||
|
| GW 계정 | AGWAPP / elink1234 |
|
||||||
+10
-1
@@ -14,6 +14,14 @@ targetCompatibility = "1.8"
|
|||||||
|
|
||||||
def nexusUrl = "https://nexus.eactive.synology.me:8090"
|
def nexusUrl = "https://nexus.eactive.synology.me:8090"
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
repositories {
|
||||||
|
maven {
|
||||||
|
url "${nexusUrl}/repository/maven-public/"
|
||||||
|
allowInsecureProtocol = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
annotationProcessor "org.projectlombok:lombok:1.18.28"
|
annotationProcessor "org.projectlombok:lombok:1.18.28"
|
||||||
@@ -27,7 +35,7 @@ dependencies {
|
|||||||
|
|
||||||
implementation project(':elink-online-core-jpa')
|
implementation project(':elink-online-core-jpa')
|
||||||
implementation project(':elink-portal-common')
|
implementation project(':elink-portal-common')
|
||||||
implementation project(':kjb-safedb')
|
// implementation project(':kjb-safedb')
|
||||||
|
|
||||||
implementation('org.springframework.boot:spring-boot-starter')
|
implementation('org.springframework.boot:spring-boot-starter')
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-jta-atomikos'
|
implementation 'org.springframework.boot:spring-boot-starter-jta-atomikos'
|
||||||
@@ -115,6 +123,7 @@ bootRun {
|
|||||||
// 디버깅 사용시에는 아래 내용 주석 해제 하세요
|
// 디버깅 사용시에는 아래 내용 주석 해제 하세요
|
||||||
// jvmArgs '-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
|
// jvmArgs '-Xdebug', '-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005'
|
||||||
|
|
||||||
|
sourceResources sourceSets.main // processResources 필터 우회 (dev yml 직접 참조)
|
||||||
args = ["--spring.profiles.active=dev"]
|
args = ["--spring.profiles.active=dev"]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=http\://192.168.240.178\:18082/repository/gradle-dist/gradle-8.7-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||||
networkTimeout=10000
|
networkTimeout=10000
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
+2
-2
@@ -7,5 +7,5 @@ project (':elink-online-core-jpa').projectDir = new File(settingsDir, "../eapim-
|
|||||||
project (':elink-portal-common').projectDir = new File(settingsDir, "../elink-portal-common")
|
project (':elink-portal-common').projectDir = new File(settingsDir, "../elink-portal-common")
|
||||||
|
|
||||||
|
|
||||||
include 'kjb-safedb'
|
//include 'kjb-safedb'
|
||||||
project (':kjb-safedb').projectDir = new File(settingsDir, "../kjb-safedb")
|
//project (':kjb-safedb').projectDir = new File(settingsDir, "../kjb-safedb")
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
package com.eactive.apim.portal.custom.config;
|
package com.eactive.apim.portal.custom.config;
|
||||||
|
|
||||||
import com.eactive.ext.kjb.safedb.KjbSafedbWrapper;
|
//import com.eactive.ext.kjb.safedb.KjbSafedbWrapper;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
|
||||||
@@ -11,14 +11,16 @@ public class KjbPasswordEncoder implements PasswordEncoder {
|
|||||||
@Override
|
@Override
|
||||||
public String encode(CharSequence rawPassword) {
|
public String encode(CharSequence rawPassword) {
|
||||||
String bcryptHash = bcryptEncoder.encode(rawPassword);
|
String bcryptHash = bcryptEncoder.encode(rawPassword);
|
||||||
KjbSafedbWrapper safedb = KjbSafedbWrapper.getInstance();
|
// KjbSafedbWrapper safedb = KjbSafedbWrapper.getInstance();
|
||||||
return safedb.encryptNotRnnoString(bcryptHash);
|
// return safedb.encryptNotRnnoString(bcryptHash);
|
||||||
|
return bcryptHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean matches(CharSequence rawPassword, String encodedPassword) {
|
public boolean matches(CharSequence rawPassword, String encodedPassword) {
|
||||||
KjbSafedbWrapper safedb = KjbSafedbWrapper.getInstance();
|
return bcryptEncoder.matches(rawPassword, encodedPassword);
|
||||||
String bcryptHash = safedb.decryptNotRnno(encodedPassword);
|
// KjbSafedbWrapper safedb = KjbSafedbWrapper.getInstance();
|
||||||
return bcryptEncoder.matches(rawPassword, bcryptHash);
|
// String bcryptHash = safedb.decryptNotRnno(encodedPassword);
|
||||||
|
// return bcryptEncoder.matches(rawPassword, bcryptHash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,20 +21,22 @@ spring:
|
|||||||
|
|
||||||
ems:
|
ems:
|
||||||
datasource:
|
datasource:
|
||||||
jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/DAPM
|
jdbc-url: jdbc:oracle:thin:@//localhost:1599/DAPM
|
||||||
|
# jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/DAPM
|
||||||
# jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/PAPM
|
# jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/PAPM
|
||||||
driver-class-name: oracle.jdbc.OracleDriver
|
driver-class-name: oracle.jdbc.OracleDriver
|
||||||
username: EMSAPP
|
username: EMSAPP
|
||||||
password: EMSAPP123!
|
password: elink1234
|
||||||
|
|
||||||
|
|
||||||
gateway:
|
gateway:
|
||||||
datasource:
|
datasource:
|
||||||
jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/DAPM
|
jdbc-url: jdbc:oracle:thin:@//localhost:1599/DAPM
|
||||||
|
# jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/DAPM
|
||||||
# jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/PAPM
|
# jdbc-url: jdbc:oracle:thin:@//192.168.240.177:1599/PAPM
|
||||||
driver-class-name: oracle.jdbc.OracleDriver
|
driver-class-name: oracle.jdbc.OracleDriver
|
||||||
username: AGWAPP
|
username: AGWAPP
|
||||||
password: AGWAPP123!
|
password: elink1234
|
||||||
|
|
||||||
portal:
|
portal:
|
||||||
auth-virtual-code: 654321
|
auth-virtual-code: 654321
|
||||||
|
|||||||
@@ -82,6 +82,7 @@
|
|||||||
<springProfile name="dev">
|
<springProfile name="dev">
|
||||||
<root level="DEBUG">
|
<root level="DEBUG">
|
||||||
<appender-ref ref="ROLLING"/>
|
<appender-ref ref="ROLLING"/>
|
||||||
|
<appender-ref ref="CONSOLE"/>
|
||||||
</root>
|
</root>
|
||||||
</springProfile>
|
</springProfile>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user