- K8sUtil 파일 삭제
- 승인관리 완전삭제 기능 추가 - DJBank로 명칭 업데이트
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
|
||||
**기술 스택:**
|
||||
- Spring Boot 2.7.18 with Spring MVC and Thymeleaf
|
||||
- Java 8 (targetCompatibility: 1.8)
|
||||
- Java 8 (sourceCompatibility/targetCompatibility: 1.8)
|
||||
- Gradle 8.7 빌드 시스템
|
||||
- Oracle 19c 데이터베이스 (JNDI를 통한 이중 데이터소스)
|
||||
- Spring Security (커스텀 인증)
|
||||
@@ -59,7 +59,7 @@ git push origin jenkins_with_weblogic
|
||||
|
||||
### 애플리케이션 실행
|
||||
- gradlew 사용 금지 - offline gradle 단독 실행
|
||||
- msi-gf63 컴퓨터에서는 /c/eactive/workspaces/shell-scripts/kjb-gradle.sh 로 gradle 실행 (jdk, gradle 등 환경 변수 세팅 후 gradle 실행하는 스크립트)
|
||||
- JDK/Gradle 환경 변수는 저장소 루트의 `.envrc`(direnv)로 자동 설정됨 (JAVA_HOME → Zulu JDK 8, GRADLE_USER_HOME → 격리 디렉터리)
|
||||
|
||||
```bash
|
||||
# dev 프로파일로 실행 (기본값)
|
||||
|
||||
@@ -90,10 +90,7 @@ export GIT_REPO_BASE="ssh://git@192.168.240.178:18081/eapim"
|
||||
# export GIT_REPO_BASE="https://git.eactive.synology.me:8090/kjb-eapim"
|
||||
|
||||
# Gradle 명령어 설정
|
||||
# 일반 환경: gradle
|
||||
# msi-gf63 환경: /c/eactive/workspaces/shell-scripts/kjb-gradle.sh
|
||||
export GRADLE_CMD="gradle"
|
||||
# export GRADLE_CMD="/c/eactive/workspaces/shell-scripts/kjb-gradle.sh"
|
||||
|
||||
# ====================================
|
||||
# 2. 작업 디렉토리 생성
|
||||
@@ -128,12 +125,6 @@ git clone ${GIT_REPO_BASE}/elink-portal-common.git
|
||||
cd elink-portal-common
|
||||
git checkout master # 또는 필요한 브랜치
|
||||
|
||||
# kjb-safedb 클론
|
||||
cd $WORKSPACE_DIR
|
||||
git clone ${GIT_REPO_BASE}/kjb-safedb.git
|
||||
cd kjb-safedb
|
||||
git checkout master # 또는 필요한 브랜치
|
||||
|
||||
# ====================================
|
||||
# 6. 최종 폴더 구조 확인
|
||||
# ====================================
|
||||
@@ -142,7 +133,6 @@ git checkout master # 또는 필요한 브랜치
|
||||
# ├── eapim-online/
|
||||
# │ └── elink-online-core-jpa/
|
||||
# ├── elink-portal-common/
|
||||
# └── kjb-safedb/
|
||||
|
||||
# ====================================
|
||||
# 7. eapim-portal 프로젝트로 이동 및 디펜던시 다운로드
|
||||
@@ -169,10 +159,7 @@ set GIT_REPO_BASE=ssh://git@192.168.240.178:18081/eapim
|
||||
REM set GIT_REPO_BASE=https://git.eactive.synology.me:8090/kjb-eapim
|
||||
|
||||
REM Gradle 명령어 설정
|
||||
REM 일반 환경: gradle
|
||||
REM msi-gf63 환경: C:\eactive\workspaces\shell-scripts\kjb-gradle.sh
|
||||
set GRADLE_CMD=gradle
|
||||
REM set GRADLE_CMD=C:\eactive\workspaces\shell-scripts\kjb-gradle.sh
|
||||
|
||||
REM ====================================
|
||||
REM 2. 작업 디렉토리 생성
|
||||
@@ -207,12 +194,6 @@ git clone %GIT_REPO_BASE%/elink-portal-common.git
|
||||
cd elink-portal-common
|
||||
git checkout master
|
||||
|
||||
REM kjb-safedb 클론
|
||||
cd /d "%WORKSPACE_DIR%"
|
||||
git clone %GIT_REPO_BASE%/kjb-safedb.git
|
||||
cd kjb-safedb
|
||||
git checkout master
|
||||
|
||||
REM ====================================
|
||||
REM 6. 최종 폴더 구조 확인
|
||||
REM ====================================
|
||||
@@ -221,7 +202,6 @@ REM ├── eapim-portal\
|
||||
REM ├── eapim-online\
|
||||
REM │ └── elink-online-core-jpa\
|
||||
REM ├── elink-portal-common\
|
||||
REM └── kjb-safedb\
|
||||
|
||||
REM ====================================
|
||||
REM 7. eapim-portal 프로젝트로 이동 및 디펜던시 다운로드
|
||||
@@ -253,30 +233,19 @@ REM Gradle 디펜던시 다운로드
|
||||
|
||||
- **gradlew 사용 금지**: 반드시 시스템에 설치된 gradle을 직접 사용하거나 환경에 맞는 스크립트를 사용하세요
|
||||
- **Gradle 명령어 변수화**: 위의 `GRADLE_CMD` 변수를 설정하면 환경별로 다른 gradle 명령어 사용 가능
|
||||
- **SafeDB**: 암호화 기능이 필요한 경우 kjb-safedb 모듈 설정 확인
|
||||
|
||||
## 빌드 및 실행
|
||||
|
||||
### Gradle 명령어 설정
|
||||
|
||||
사용 환경에 따라 적절한 gradle 명령어를 설정하세요:
|
||||
|
||||
**Git Bash:**
|
||||
```bash
|
||||
# 일반 환경
|
||||
export GRADLE_CMD="gradle"
|
||||
|
||||
# msi-gf63 환경
|
||||
export GRADLE_CMD="/c/eactive/workspaces/shell-scripts/kjb-gradle.sh"
|
||||
```
|
||||
|
||||
**Windows CMD:**
|
||||
```cmd
|
||||
REM 일반 환경
|
||||
set GRADLE_CMD=gradle
|
||||
|
||||
REM msi-gf63 환경
|
||||
set GRADLE_CMD=C:\eactive\workspaces\shell-scripts\kjb-gradle.sh
|
||||
```
|
||||
|
||||
### 빌드 및 실행 명령어
|
||||
@@ -310,7 +279,6 @@ kjb-eapim/
|
||||
├── eapim-online/ # Online 프로젝트
|
||||
│ └── elink-online-core-jpa/ # Gateway 데이터 모델
|
||||
├── elink-portal-common/ # 공통 유틸리티
|
||||
└── kjb-safedb/ # SafeDB 암호화 라이브러리
|
||||
```
|
||||
|
||||
### eapim-portal 내부 구조
|
||||
@@ -327,7 +295,6 @@ src/main/java/com/eactive/apim/portal/
|
||||
이 프로젝트는 다음 모듈에 의존합니다 (settings.gradle 참조):
|
||||
- `eapim-online/elink-online-core-jpa`: Gateway 데이터 모델 (../eapim-online/elink-online-core-jpa)
|
||||
- `elink-portal-common`: 공통 유틸리티 (../elink-portal-common)
|
||||
- `kjb-safedb`: SafeDB 암호화 라이브러리 (../kjb-safedb)
|
||||
|
||||
## SASS / CSS 스타일 개발
|
||||
|
||||
@@ -532,8 +499,6 @@ ls -lh src/main/resources/static/css/main.min.css # minified
|
||||
|
||||
- 사용자 관리 (내부/기업)
|
||||
- API 키 관리 및 승인 워크플로우
|
||||
- API 카탈로그 및 문서화
|
||||
- API 테스트 프록시
|
||||
- 감사 추적 (Hibernate Envers)
|
||||
|
||||
## 배포
|
||||
@@ -543,22 +508,6 @@ ls -lh src/main/resources/static/css/main.min.css # minified
|
||||
- WebLogic
|
||||
- Tomcat (내장)
|
||||
|
||||
### Docker
|
||||
```bash
|
||||
./build_docker.sh
|
||||
docker run -p 8080:8080 eapim-portal:latest
|
||||
```
|
||||
|
||||
## 관련 프로젝트
|
||||
|
||||
프로젝트 구조 (kjb-eapim 디렉토리 기준):
|
||||
- `eapim-portal/` - Portal 웹 애플리케이션 (현재 프로젝트)
|
||||
- `eapim-online/` - Online 프로젝트 (elink-online-core-jpa 포함)
|
||||
- `elink-portal-common/` - 공통 유틸리티 라이브러리
|
||||
- `kjb-safedb/` - SafeDB 암호화 라이브러리
|
||||
- `eapim-admin/` - Admin 포털 (선택사항)
|
||||
- `kjb-eapim-sql/` - SQL 스크립트 (선택사항)
|
||||
|
||||
## 문서
|
||||
|
||||
- **프로젝트 상세 지침**: `CLAUDE.md` (한글)
|
||||
|
||||
+3
-17
@@ -128,11 +128,13 @@ bootRun {
|
||||
}
|
||||
|
||||
|
||||
// annotation processor 출력 디렉토리는 IntelliJ/Gradle 통합이 자동 등록함.
|
||||
// 명시적으로 srcDir 추가하면 IntelliJ idea 모드에서 MapStruct가 같은 파일을
|
||||
// 중복 생성하려다 javax.annotation.processing.FilerException 발생함.
|
||||
sourceSets {
|
||||
main {
|
||||
java {
|
||||
srcDir 'src/main/java'
|
||||
srcDir 'build/generated/sources/annotationProcessor/java/main'
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,20 +183,4 @@ task printSourceSets {
|
||||
println " Output dir : ${srcSet.output.classesDirs.asPath}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// CryptoCli 실행 task (bcrypt 지원)
|
||||
task cryptoCli(type: JavaExec) {
|
||||
mainClass = 'com.eactive.ext.kjb.safedb.CryptoCli'
|
||||
classpath = sourceSets.main.runtimeClasspath
|
||||
standardInput = System.in
|
||||
|
||||
// SafeDB 라이브러리 경로 추가 (리눅스)
|
||||
classpath += files("/safedb/JavaAPI/config")
|
||||
classpath += fileTree(dir: "/safedb/JavaAPI/lib", include: ["*.jar"])
|
||||
|
||||
// CLI 인자 전달: ./gradlew cryptoCli --args="bcrypt hash password123"
|
||||
if (project.hasProperty('args')) {
|
||||
args project.args.split('\\s+')
|
||||
}
|
||||
}
|
||||
@@ -3,8 +3,9 @@ package com.eactive.apim.portal.apps.auth.service;
|
||||
|
||||
import com.eactive.apim.portal.apps.apis.dto.ApiSpecInfoDto;
|
||||
import com.eactive.apim.portal.apps.apiservice.dto.ApiServiceDTO;
|
||||
import com.eactive.apim.portal.apps.user.dto.PortalOrgDTO;
|
||||
import com.eactive.apim.portal.common.user.PortalAuthenticatedUser;
|
||||
import com.eactive.apim.portal.common.util.SecurityUtil;
|
||||
import lombok.var;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@@ -18,12 +19,12 @@ public class ApiPermissionFilter {
|
||||
|
||||
if (isAuthenticated) {
|
||||
// null 체크 추가
|
||||
var user = SecurityUtil.getPortalAuthenticatedUser();
|
||||
PortalAuthenticatedUser user = SecurityUtil.getPortalAuthenticatedUser();
|
||||
if (user != null && user.getRoleCode() != null) {
|
||||
roleCode = user.getRoleCode().toString();
|
||||
}
|
||||
|
||||
var userOrg = SecurityUtil.getUserOrg();
|
||||
PortalOrgDTO userOrg = SecurityUtil.getUserOrg();
|
||||
if (userOrg != null) {
|
||||
org = userOrg.getId();
|
||||
}
|
||||
@@ -44,12 +45,12 @@ public class ApiPermissionFilter {
|
||||
|
||||
if (isAuthenticated) {
|
||||
// null 체크 추가
|
||||
var user = SecurityUtil.getPortalAuthenticatedUser();
|
||||
PortalAuthenticatedUser user = SecurityUtil.getPortalAuthenticatedUser();
|
||||
if (user != null && user.getRoleCode() != null) {
|
||||
roleCode = user.getRoleCode().toString();
|
||||
}
|
||||
|
||||
var userOrg = SecurityUtil.getUserOrg();
|
||||
PortalOrgDTO userOrg = SecurityUtil.getUserOrg();
|
||||
if (userOrg != null) {
|
||||
org = userOrg.getId();
|
||||
}
|
||||
|
||||
@@ -24,7 +24,6 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.var;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -252,7 +251,7 @@ public class AccountController {
|
||||
@GetMapping("/mypage/org-transfer")
|
||||
public String showOrgTransferPage(Model model) {
|
||||
try {
|
||||
var authenticatedUser = SecurityUtil.getPortalAuthenticatedUser();
|
||||
PortalAuthenticatedUser authenticatedUser = SecurityUtil.getPortalAuthenticatedUser();
|
||||
PortalUserDTO user = userFacade.findById(authenticatedUser.getId());
|
||||
|
||||
if (user.getRoleCode() != PortalUserEnums.RoleCode.ROLE_USER) {
|
||||
@@ -282,7 +281,7 @@ public class AccountController {
|
||||
HttpServletResponse response) {
|
||||
Map<String, Object> result = new HashMap<>();
|
||||
try {
|
||||
var currentUser = SecurityUtil.getPortalAuthenticatedUser();
|
||||
PortalAuthenticatedUser currentUser = SecurityUtil.getPortalAuthenticatedUser();
|
||||
|
||||
if (currentUser.getRoleCode() != PortalUserEnums.RoleCode.ROLE_USER) {
|
||||
result.put("status", "ERROR");
|
||||
|
||||
@@ -9,7 +9,6 @@ import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
|
||||
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
|
||||
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
|
||||
|
||||
@@ -20,7 +19,6 @@ import javax.sql.DataSource;
|
||||
@Configuration
|
||||
@EntityScan(basePackages = {"com.eactive.apim.gateway"})
|
||||
@EnableJpaRepositories(basePackages = "com.eactive.apim.gateway", repositoryBaseClass = BaseRepositoryImpl.class, entityManagerFactoryRef = "gatewayEntityManagerFactory")
|
||||
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
|
||||
@Slf4j
|
||||
public class GatewayDatasourceConfiguration extends BaseDatasourceConfiguration {
|
||||
private final Environment env;
|
||||
|
||||
@@ -5,7 +5,7 @@ server:
|
||||
timeout: 15m
|
||||
encoding:
|
||||
charset: UTF-8
|
||||
port: '8080'
|
||||
port: '39130'
|
||||
error:
|
||||
include-message: never
|
||||
include-stacktrace: never
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
title.html=KJBank API Portal Portal
|
||||
title.html=DJBank API Portal
|
||||
password.not.match=Password is not matched
|
||||
authnumber.not.match=Auth number is not matched.
|
||||
apim.route.register.file=File
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
title.html=\uAD11\uC8FC\uC740\uD589 API Portal
|
||||
title.html=DJBank \uAC1C\uBC1C\uC790\uD3EC\uD0C8
|
||||
apim.route.register.file=\uCCA8\uBD80\uD30C\uC77C
|
||||
field.required=\uD544\uC218 \uC785\uB825\uD56D\uBAA9\uC785\uB2C8\uB2E4.
|
||||
companyName=\uD68C\uC0AC\uBA85
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"openapi": "3.0.0",
|
||||
"info": {
|
||||
"title": "광주은행 OAuth 2.0 토큰 발급",
|
||||
"title": "DJBank OAuth 2.0 토큰 발급",
|
||||
"description": "OAuth 2.0 토큰 발급을 위한 API 문서입니다.",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
@@ -28,7 +28,7 @@
|
||||
"paths": {
|
||||
"/api/v1/oauth/token": {
|
||||
"post": {
|
||||
"summary": "광주은행 액세스 토큰 발급",
|
||||
"summary": "DJBank 액세스 토큰 발급",
|
||||
"description": "client_credentials grant type을 사용하여 액세스 토큰을 발급받습니다.",
|
||||
"security": [
|
||||
{
|
||||
@@ -51,12 +51,12 @@
|
||||
"client_id": {
|
||||
"type": "string",
|
||||
"maxLength": 256,
|
||||
"description": "광주은행에서 발급한 client id"
|
||||
"description": "DJBank에서 발급한 client id"
|
||||
},
|
||||
"client_secret": {
|
||||
"type": "string",
|
||||
"maxLength": 512,
|
||||
"description": "광주은행에서 발급한 client secret"
|
||||
"description": "DJBank에서 발급한 client secret"
|
||||
},
|
||||
"scope": {
|
||||
"type": "string",
|
||||
|
||||
@@ -59,7 +59,7 @@
|
||||
</div>
|
||||
<div id="PrintDIV">
|
||||
<h1 style="text-align:center">
|
||||
<img style="height:30px;" th:src="@{/img/logo/logo.png}" alt="광주은행 오픈뱅킹" />
|
||||
<img style="height:30px;" th:src="@{/img/logo/logo.png}" alt="DJBank 오픈뱅킹" />
|
||||
</h1>
|
||||
<p style="text-align:center">우61470 광주광역시 동구 제봉로 225 전화 (062)239-6722 FAX (062)239-6719 오픈뱅크 플랫폼 담당자</p>
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<section layout:fragment="title">
|
||||
<div class="page-title-banner">
|
||||
<img th:src="@{/img/img_title_bg.png}" class="title-image" alt="타이틀 배경">
|
||||
<h1>사업 제휴</h1>
|
||||
<h1>피드백/개선요청</h1>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
<!-- Title Bar -->
|
||||
<div class="register-title-bar">
|
||||
<h2 class="register-title">사업 제휴 신청</h2>
|
||||
<span class="register-subtitle">광주은행은 온라인 비즈니스 혁신을 위한 사업 제안을 환영합니다.</span>
|
||||
<h2 class="register-title">피드백/개선요청</h2>
|
||||
<span class="register-subtitle">DJBank은 온라인 비즈니스 혁신을 위한 피드백/개선요청을 환영합니다.</span>
|
||||
</div>
|
||||
|
||||
<!-- Form Content -->
|
||||
@@ -24,10 +24,10 @@
|
||||
<form name="partnershipForm" id="partnershipForm" th:action="@{/partnership}" th:object="${partnership}"
|
||||
enctype="multipart/form-data" method="post" class="register-form">
|
||||
|
||||
<!-- 사업 제목 Field -->
|
||||
<!-- 제목 Field -->
|
||||
<div class="form-row">
|
||||
<div class="form-label-wrapper label-offset">
|
||||
<span class="form-label-text">사업 제목</span>
|
||||
<span class="form-label-text">제목</span>
|
||||
<span class="required-badge">필수</span>
|
||||
</div>
|
||||
<div class="form-field-wrapper">
|
||||
@@ -35,7 +35,7 @@
|
||||
id="bizSubject"
|
||||
th:field="*{bizSubject}"
|
||||
class="form-input"
|
||||
placeholder="제안하고자 하시는 사업 제목을 입력해 주세요"
|
||||
placeholder="제안하고자 하는 제목을 입력해 주세요"
|
||||
required
|
||||
maxlength="200">
|
||||
</div>
|
||||
@@ -44,7 +44,7 @@
|
||||
<!-- 사업 내용 Field -->
|
||||
<div class="form-row">
|
||||
<div class="form-label-wrapper">
|
||||
<span class="form-label-text">사업 내용</span>
|
||||
<span class="form-label-text">내용</span>
|
||||
<span class="required-badge">필수</span>
|
||||
</div>
|
||||
<div class="form-field-wrapper">
|
||||
@@ -52,7 +52,7 @@
|
||||
th:field="*{bizDetail}"
|
||||
class="form-textarea"
|
||||
rows="10"
|
||||
placeholder="제안하고자 하시는 사업 내용을 상세히 입력해 주세요 (사업의 목적, 내용, 기대 효과 등)"
|
||||
placeholder="제안하고자 하시는 내용을 상세히 입력해 주세요"
|
||||
required
|
||||
maxlength="4000"></textarea>
|
||||
<small class="char-counter-wrapper">
|
||||
@@ -62,7 +62,8 @@
|
||||
</div>
|
||||
|
||||
<!-- File Upload Field -->
|
||||
<div class="form-row">
|
||||
<!--/* 260520 - DJB 에서는 첨부 파일 허용안함. */-->
|
||||
<!--<div class="form-row">
|
||||
<div class="form-label-wrapper label-offset">
|
||||
<span class="form-label-text">첨부파일</span>
|
||||
</div>
|
||||
@@ -99,7 +100,7 @@
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
</form>
|
||||
</div>
|
||||
@@ -108,7 +109,7 @@
|
||||
<div class="form-actions">
|
||||
<button type="button" class="btn btn-submit btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
||||
<button type="button" class="btn btn-submit btn-primary btn-submit-form">
|
||||
<span>제휴 신청</span>
|
||||
<span>작성 완료</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="login-card">
|
||||
<!-- Logo -->
|
||||
<div class="login-logo">
|
||||
<img th:src="@{/img/logo/logo_box.png}" alt="광주은행">
|
||||
<img th:src="@{/img/logo/logo_box.png}" alt="DJBank">
|
||||
</div>
|
||||
|
||||
<!-- Header Message -->
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
<div class="hero-text-content">
|
||||
<div class="hero-text">
|
||||
<p class="hero-subtitle">세상의 모든 서비스</p>
|
||||
<p class="hero-title">광주은행 API가 함께 합니다.</p>
|
||||
<p class="hero-title">DJBank API가 함께 합니다.</p>
|
||||
</div>
|
||||
<a th:href="@{/signup}" class="btn-hero-signup">회원가입하기</a>
|
||||
</div>
|
||||
<div class="hero-image-content">
|
||||
<img th:src="@{/img/hero_image_1.png}" alt="광주은행 API 서비스" class="hero-image">
|
||||
<img th:src="@{/img/hero_image_1.png}" alt="DJBank API 서비스" class="hero-image">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -32,12 +32,12 @@
|
||||
<div class="hero-text-content">
|
||||
<div class="hero-text">
|
||||
<p class="hero-subtitle">세상의 모든 서비스</p>
|
||||
<p class="hero-title">광주은행 API가 함께 합니다.</p>
|
||||
<p class="hero-title">DJBank API가 함께 합니다.</p>
|
||||
</div>
|
||||
<a th:href="@{/signup}" class="btn-hero-signup">회원가입하기</a>
|
||||
</div>
|
||||
<div class="hero-image-content">
|
||||
<img th:src="@{/img/hero_image_2.png}" alt="광주은행 API 서비스" class="hero-image">
|
||||
<img th:src="@{/img/hero_image_2.png}" alt="DJBank API 서비스" class="hero-image">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -48,12 +48,12 @@
|
||||
<div class="hero-text-content">
|
||||
<div class="hero-text">
|
||||
<p class="hero-subtitle">세상의 모든 서비스</p>
|
||||
<p class="hero-title">광주은행 API가 함께 합니다.</p>
|
||||
<p class="hero-title">DJBank API가 함께 합니다.</p>
|
||||
</div>
|
||||
<a th:href="@{/signup}" class="btn-hero-signup">회원가입하기</a>
|
||||
</div>
|
||||
<div class="hero-image-content">
|
||||
<img th:src="@{/img/hero_image_3.png}" alt="광주은행 API 서비스" class="hero-image">
|
||||
<img th:src="@{/img/hero_image_3.png}" alt="DJBank API 서비스" class="hero-image">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -156,7 +156,7 @@
|
||||
<span th:if="${service.groupDesc != null and !#strings.isEmpty(service.groupDesc)}"
|
||||
th:text="${service.groupDesc}">서비스 설명</span>
|
||||
<span th:unless="${service.groupDesc != null and !#strings.isEmpty(service.groupDesc)}">
|
||||
광주은행 API 서비스를 이용해보세요.
|
||||
DJBank API 서비스를 이용해보세요.
|
||||
</span>
|
||||
</p>
|
||||
<div class="card-illustration">
|
||||
@@ -178,15 +178,15 @@
|
||||
<div class="info-content">
|
||||
<h2 class="info-title">
|
||||
차별화된 API 서비스,<br>
|
||||
<span class="title-highlight">광주은행 API Portal</span>
|
||||
<span class="title-highlight">DJBank API Portal</span>
|
||||
</h2>
|
||||
<p class="info-description">
|
||||
광주은행 API Portal은 기업이 금융 서비스를 편리하게 개발할 수 있도록 차별화된 API와 테스트환경을 제공합니다.
|
||||
DJBank API Portal은 기업이 금융 서비스를 편리하게 개발할 수 있도록 차별화된 API와 테스트환경을 제공합니다.
|
||||
</p>
|
||||
|
||||
<div class="action-buttons">
|
||||
<a href="#" class="action-btn action-btn-primary">
|
||||
처음 만나는 광주은행 API
|
||||
처음 만나는 DJBank API
|
||||
</a>
|
||||
<a href="#" class="action-btn action-btn-secondary">
|
||||
사업 제휴 문의
|
||||
@@ -195,7 +195,7 @@
|
||||
</div>
|
||||
|
||||
<div class="info-image">
|
||||
<img th:src="@{/img/img_api_intro.png}" alt="광주은행 API">
|
||||
<img th:src="@{/img/img_api_intro.png}" alt="DJBank API">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -208,7 +208,7 @@
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">
|
||||
<span class="title-regular">비지니스의 시작,</span><br>
|
||||
<span class="title-bold">광주은행 오픈 API가 함께 하겠습니다.</span>
|
||||
<span class="title-bold">DJBank 오픈 API가 함께 하겠습니다.</span>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="support-grid">
|
||||
@@ -219,8 +219,8 @@
|
||||
</div>
|
||||
<div class="card-content">
|
||||
<h3>공지사항</h3>
|
||||
<p class="pc">광주은행 API의 새로운 소식</p>
|
||||
<p class="mobile">광주은행 API의 <br/>새로운 소식</p>
|
||||
<p class="pc">DJBank API의 새로운 소식</p>
|
||||
<p class="mobile">DJBank API의 <br/>새로운 소식</p>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
<div class="section-header">
|
||||
<h2 class="section-title">
|
||||
<span class="title-top">우리곁의 수많은 서비스들이</span>
|
||||
<span class="title-highlight">광주은행 오픈 API</span>와 함께하고 있습니다.
|
||||
<span class="title-highlight">DJBank 오픈 API</span>와 함께하고 있습니다.
|
||||
</h2>
|
||||
</div>
|
||||
<div class="stats-cards">
|
||||
@@ -320,7 +320,7 @@
|
||||
<div class="cta-background"></div>
|
||||
<div class="container">
|
||||
<div class="cta-content">
|
||||
<h2 class="cta-title">광주은행 API를 지금 바로 만나보세요.</h2>
|
||||
<h2 class="cta-title">DJBank API를 지금 바로 만나보세요.</h2>
|
||||
<a th:href="@{/signup}" class="btn-signup-cta">회원가입하기</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
<div class="signup-selection-card">
|
||||
<!-- Logo -->
|
||||
<div class="signup-logo">
|
||||
<img th:src="@{/img/logo/logo_box.png}" alt="광주은행">
|
||||
<img th:src="@{/img/logo/logo_box.png}" alt="DJBank">
|
||||
</div>
|
||||
|
||||
<!-- Message -->
|
||||
<p class="signup-message">광주은행 API Portal 사용을 위해 회원 가입해 주세요.</p>
|
||||
<p class="signup-message">DJBank API Portal 사용을 위해 회원 가입해 주세요.</p>
|
||||
|
||||
<!-- Signup Buttons -->
|
||||
<div class="signup-buttons">
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
</p>
|
||||
<p class="info-text" style="margin-top: 16px;">
|
||||
<strong th:text="${orgName}"></strong>에서
|
||||
광주은행 API Portal 법인회원으로 초대하였습니다.
|
||||
DJBank API Portal 법인회원으로 초대하였습니다.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
<div class="result-info-box">
|
||||
<p class="info-text">
|
||||
<strong th:text="${orgName}"></strong>에서
|
||||
광주은행 API Portal 법인회원으로 초대하였습니다.
|
||||
DJBank API Portal 법인회원으로 초대하였습니다.
|
||||
</p>
|
||||
<p class="info-text" style="margin-top: 8px;">
|
||||
초대를 수락하시면 법인회원으로 전환됩니다.
|
||||
|
||||
@@ -11,8 +11,8 @@
|
||||
<h1 class="signup-guide__title">회원 가입 안내</h1>
|
||||
<div class="signup-guide__underline"></div>
|
||||
<div class="signup-guide__desc">
|
||||
<p>광주은행 API 개발자 포털에 방문해 주셔서 감사합니다.</p>
|
||||
<p>광주은행 API 사용을 위해서는 다음과 같은 이용절차로 진행하여야 합니다.</p>
|
||||
<p>DJBank API 개발자 포털에 방문해 주셔서 감사합니다.</p>
|
||||
<p>DJBank API 사용을 위해서는 다음과 같은 이용절차로 진행하여야 합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
<div class="service-intro">
|
||||
<!-- 메인 타이틀 섹션 -->
|
||||
<header class="service-intro__header">
|
||||
<h1 class="service-intro__title">광주은행 오픈뱅크 플랫폼</h1>
|
||||
<h1 class="service-intro__title">DJBank 오픈뱅크 플랫폼</h1>
|
||||
<div class="service-intro__underline"></div>
|
||||
</header>
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<div class="service-intro__text-column">
|
||||
<div class="service-intro__card">
|
||||
<p class="service-intro__desc">
|
||||
광주은행이 제공하는 오픈API를 활용하여 핀테크 기업들이 새로운 금융서비스를 편리하게 개발할 수 있는 환경입니다.
|
||||
DJBank이 제공하는 오픈API를 활용하여 핀테크 기업들이 새로운 금융서비스를 편리하게 개발할 수 있는 환경입니다.
|
||||
</p>
|
||||
</div>
|
||||
<div class="service-intro__card">
|
||||
@@ -36,7 +36,7 @@
|
||||
<!-- 오른쪽: 다이어그램 이미지 -->
|
||||
<div class="service-intro__diagram-column">
|
||||
<div class="service-intro__diagram-card">
|
||||
<img th:src="@{/img/service/intro_diagram.png}" alt="광주은행 오픈뱅크 플랫폼 구성도" class="service-intro__diagram-img">
|
||||
<img th:src="@{/img/service/intro_diagram.png}" alt="DJBank 오픈뱅크 플랫폼 구성도" class="service-intro__diagram-img">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<div class="footer-content">
|
||||
<!-- Left Section -->
|
||||
<div class="footer-left">
|
||||
<img src="/img/logo/logo.png" alt="광주은행" class="footer-logo">
|
||||
<img src="/img/logo/logo.png" alt="DJBank" class="footer-logo">
|
||||
<div class="footer-links">
|
||||
<a th:href="@{/agreements/terms}" class="footer-link">이용약관</a>
|
||||
<span class="footer-separator">|</span>
|
||||
@@ -19,10 +19,10 @@
|
||||
<div class="footer-right">
|
||||
<div class="footer-related-sites">
|
||||
<select class="related-sites-select">
|
||||
<option>광주은행 관련 사이트</option>
|
||||
<option>광주은행 홈페이지</option>
|
||||
<option>광주은행 인터넷뱅킹</option>
|
||||
<option>광주은행 모바일뱅킹</option>
|
||||
<option>DJBank 관련 사이트</option>
|
||||
<option>DJBank 홈페이지</option>
|
||||
<option>DJBank 인터넷뱅킹</option>
|
||||
<option>DJBank 모바일뱅킹</option>
|
||||
</select>
|
||||
</div>
|
||||
<p class="footer-contact">고객센터 1588-3388</p>
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
<div class="header-left">
|
||||
<div class="logo-wrapper">
|
||||
<a th:href="@{/}" class="logo-link">
|
||||
<img src="/img/logo/logo.png" alt="광주은행" class="logo" width="114" height="22">
|
||||
<img src="/img/logo/logo.png" alt="DJBank" class="logo" width="114" height="22">
|
||||
</a>
|
||||
<a th:href="@{/}" class="logo-text">API Portal</a>
|
||||
</div>
|
||||
@@ -96,7 +96,7 @@
|
||||
<div class="mobile-header">
|
||||
<div class="mobile-left">
|
||||
<a th:href="@{/}" class="mobile-logo-link">
|
||||
<img src="/img/logo/logo.png" alt="광주은행" class="mobile-logo">
|
||||
<img src="/img/logo/logo.png" alt="DJBank" class="mobile-logo">
|
||||
</a>
|
||||
<a th:href="@{/}" class="mobile-logo-text">API Portal</a>
|
||||
</div>
|
||||
@@ -122,7 +122,7 @@
|
||||
<div class="drawer-header">
|
||||
<div class="drawer-header-left">
|
||||
<a th:href="@{/}" class="drawer-logo-link">
|
||||
<img th:src="@{/img/logo/logo.png}" alt="광주은행" class="drawer-logo">
|
||||
<img th:src="@{/img/logo/logo.png}" alt="DJBank" class="drawer-logo">
|
||||
</a>
|
||||
<span class="drawer-logo-text">API Portal</span>
|
||||
</div>
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
<!-- Welcome Section (Anonymous) -->
|
||||
<div class="drawer-welcome" sec:authorize="isAnonymous()">
|
||||
<p class="welcome-text">광주은행 API Portal에 오신것을 환영합니다.</p>
|
||||
<p class="welcome-text">DJBank API Portal에 오신것을 환영합니다.</p>
|
||||
<div class="welcome-buttons">
|
||||
<a th:href="@{/signup}" class="btn-drawer-signup">회원가입</a>
|
||||
<a th:href="@{/login}" class="btn-drawer-login">로그인</a>
|
||||
|
||||
Reference in New Issue
Block a user