Notice
Recent Posts
Recent Comments
Link
투케이2K
43. (TWOK/UTIL) [Spring/Intelij] 기본 스프링 부트 프로젝트 구조 생성 및 오라클 DB 연결 설정 실시 본문
투케이2K 유틸파일
43. (TWOK/UTIL) [Spring/Intelij] 기본 스프링 부트 프로젝트 구조 생성 및 오라클 DB 연결 설정 실시
투케이2K 2022. 5. 12. 09:46[설 명]
프로그램 : Spring / Intelij
설 명 : 기본 스프링 부트 프로젝트 구조 생성 및 오라클 DB 연결 설정 실시
[방법 설명]
[build.gradle]
plugins {
id 'org.springframework.boot' version '2.6.7'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
// TODO [war file create]
id 'war'
}
group = 'com.manager'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
//configurations {
// compileOnly {
// extendsFrom annotationProcessor
// }
//}
// TODO [war 파일 빌드 명칭 변경]
war {
archiveName 'manager.war'
}
// TODO [war file create]
configurations {
developmentOnly
runtimeClasspath {
extendsFrom developmentOnly
}
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
annotationProcessor 'org.projectlombok:lombok'
// TODO [war file create]
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'javax.servlet:jstl'
}
tasks.named('test') {
useJUnitPlatform()
}
[ManagerProjectApplication]
package com.manager.managerproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ManagerProjectApplication {
public static void main(String[] args) {
SpringApplication.run(ManagerProjectApplication.class, args);
}
}
[ServletInitializer]
package com.manager.managerproject;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(ManagerProjectApplication.class);
}
}
[application.yml]
# TODO [공통으로 사용]
spring:
# [profiles : 배포 시 설정 이름 : spring 내 설정]
profiles:
active: prod
# [devtools : spring 내 설정]
devtools:
livereload:
enabled: true
# [datasource : spring 내 설정]
# [url : port 및 servername 작성]
# [username : 스키마 명칭]
# [password : 비밀 번호]
datasource:
driver-class-name: oracle.jdbc.OracleDriver
url: jdbc:oracle:thin:@105.58.176.205:1521:testserver
username: TEST
password: test#9988
# TODO [접속 포트 설정]
# 접속 주소 : http://localhost:7000/index.html
# 파일 경로 : config 폴더 >> MvcConfiguration 파일 >> 파일 경로 설정
# index.html 파일 : resource 폴더 >> templates 폴더 >> index.html 파일
server:
port: 7000
# TODO [mybatis 설정 : xml 파일 경로 지정 필요]
mybatis:
mapper-locations: classpath:D_Mybatis/*.xml
type-aliases-package: com.manager.managerproject.model
[index.html]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--
[호출 방법]
1. application.yml 파일에서 지정한 서버 포트 확인
2. 호출 : http://localhost:7000/index.html
-->
<p>hello world</p>
</body>
</html>
[Database_Api_Controller]
package com.manager.managerproject.A_Controller;
import com.manager.managerproject.model.Time_Json_Model;
import com.manager.managerproject.B_Service.Database_Api_Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
// TODO [크로스 도메인 접속 허용 설정]
@CrossOrigin("*")
// TODO [RestController / Api 처리]
@RestController
public class Database_Api_Controller {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 데이터베이스 접근 및 컨트롤러 클래스
* // -----------------------------------------
* 2. 사용자가 api 호출을 통해서 접근 수행
* // -----------------------------------------
* 3. service 클래스 호출 및 로직 연결 실시
* // -----------------------------------------
* */
/**
* // -----------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // -----------------------------------------
* // [SEARCH FAST] : [테스트 API 호출]
* // [SEARCH FAST] : [테스트 DB 호출]
* // [SEARCH FAST] : [테스트 MODEL 리턴]
*
* // [SEARCH FAST] : [로그인 사용자 인증 요청]
* // -----------------------------------------
* */
// TODO [Autowire 설정]
@Autowired
private Database_Api_Service database_api_service;
// TODO [전역 변수 선언 실시]
private static final String CLASS_NAME = "Database_Api_Controller";
// TODO [SEARCH FAST] : [테스트 API 호출]
@GetMapping("/testApi")
public String testApi(@RequestParam Map<String, String> param){
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("testApi"));
System.out.println("[INPUT] : "+String.valueOf(param.toString()));
System.out.println("================================================");
System.out.println("\n");
/**
* // -----------------------------------------
* [호출 방법]
* // -----------------------------------------
* 1. 호출 방식 : GET
* // -----------------------------------------
* 2. 호출 방법 : http://localhost:7000/testApi
* // -----------------------------------------
* 3. 리턴 데이터 : Y : testApi
* // -----------------------------------------
* */
// [Api 리턴 메시지 반환]
return "Y : testApi";
}
// TODO [SEARCH FAST] : [테스트 DB 호출]
@GetMapping("/testDB")
public String testDB(@RequestParam Map<String, String> param){
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("testDB"));
System.out.println("[INPUT] : "+String.valueOf(param.toString()));
System.out.println("================================================");
System.out.println("\n");
/**
* // -----------------------------------------
* [호출 방법]
* // -----------------------------------------
* 1. 호출 방식 : GET
* // -----------------------------------------
* 2. 호출 방법 : http://localhost:7000/testDB
* // -----------------------------------------
* 3. 리턴 데이터 : 2022-05-12 (오라클 DB 조회 현재 날짜)
* // -----------------------------------------
* */
// [service 호출 수행]
String time = database_api_service.DB_TIME();
// [Api 리턴 메시지 반환]
return time;
}
// TODO [SEARCH FAST] : [테스트 MODEL 리턴]
@GetMapping("/testModel")
public Time_Json_Model testModel(@RequestParam Map<String, String> param){
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("testModel"));
System.out.println("[INPUT] : "+String.valueOf(param.toString()));
System.out.println("================================================");
System.out.println("\n");
/**
* // -----------------------------------------
* [호출 방법]
* // -----------------------------------------
* 1. 호출 방식 : GET
* // -----------------------------------------
* 2. 호출 방법 : http://localhost:7000/testModel
* // -----------------------------------------
* 3. 리턴 데이터 : {"state":"T","time":"2022-05-12"}
* // -----------------------------------------
* */
// [service 호출 수행]
String time = database_api_service.DB_TIME();
// [model 형식 리턴 데이터 반환]
return new Time_Json_Model("T", time);
}
// TODO [SEARCH FAST] : [로그인 사용자 인증 요청]
@PostMapping("/login_access")
public String login_access(@RequestParam Map<String, String> param){ // [쿼리 파람 방식]
//public String login_access(@RequestBody Map<String, String> param){ // [body 방식]
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("login_access"));
System.out.println("[INPUT] : "+String.valueOf(param.toString()));
System.out.println("================================================");
System.out.println("\n");
/**
* // -----------------------------------------
* [호출 방법]
* // -----------------------------------------
* 1. 호출 방식 : POST [쿼리 파람]
* // -----------------------------------------
* 2. 호출 방법 : http://localhost:7000/login_access?id=twok&pw=tk1234
* // -----------------------------------------
* 3. 리턴 데이터 :
*
* {"I_ID":"twok","O_CURSOR":[{"권한":"1","노트":"모든 기능 사용","아이디":"twok","비밀번호":"twok@kr","일자":"20200512153945","학교":"DEV"}],"O_MSG":"Y : 정상 로그인 성공 [M_DEBUG : 3-1-1]","I_PW":"twok@kr"}
*
* {"I_ID":"twok123","O_CURSOR":[null],"O_MSG":"N : 등록된 사용자가 아닙니다. 관리자에게 연락바랍니다. [M_DEBUG : 3-1-2]","I_PW":"tk@1234"}
*
* // -----------------------------------------
* */
// [인풋 데이터를 받을 변수 선언 실시]
String id = "";
String pw = "";
// [정상적으로 인풋 데이터가 포함되었는지 확인]
try {
JSONObject inputJson = new JSONObject(param);
if (inputJson.has("id") == true){ // [특정 key 값을 포함하는 경우]
id = String.valueOf(inputJson.get("id"));
}
if (inputJson.has("pw") == true){ // [특정 key 값을 포함하는 경우]
pw = String.valueOf(inputJson.get("pw"));
}
}
catch (Exception e){
e.printStackTrace();
}
// [service 호출 수행]
Map map = database_api_service.PRO_UMCS_MANAGER(id, pw);
// [리턴 받은 map 데이터 널 체크 실시]
try {
if (map != null){
JSONObject resultJson = new JSONObject(map);
System.out.println("\n");
System.out.println("================================================");
System.out.println("[CLASS] : "+String.valueOf(CLASS_NAME));
System.out.println("[METHOD] : "+String.valueOf("login_access"));
System.out.println("[RESULT] : "+String.valueOf(resultJson));
System.out.println("================================================");
System.out.println("\n");
}
}
catch (Exception e){
e.printStackTrace();
}
// [리턴 데이터 반환]
return "";
}
} // TODO [클래스 종료]
[Database_Api_Service]
package com.manager.managerproject.B_Service;
import com.manager.managerproject.C_Mapper.Database_Api_Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
// TODO [서비스 어노테이션]
@Service
public class Database_Api_Service {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 데이터베이스 접근 및 서비스 클래스
* // -----------------------------------------
* 2. mapper 인터페이스 메소드 호출 수행 실시
* // -----------------------------------------
* */
/**
* // -----------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // -----------------------------------------
* // [SEARCH FAST] : [테스트 DB 호출]
* // [SEARCH FAST] : [로그인 사용자 인증 요청]
* // -----------------------------------------
* */
// TODO [Autowire 설정]
@Autowired
private Database_Api_Mapper database_api_mapper;
// TODO [SEARCH FAST] : [테스트 DB 호출]
public String DB_TIME(){
// [mapper 인터페이스 호출 실시]
return database_api_mapper.DB_TIME();
}
// TODO [SEARCH FAST] : [로그인 사용자 인증 요청]
public Map PRO_UMCS_MANAGER(String id, String pw){
// [mybatis xml 에서 설정한 인풋값 명칭에 맞게 데이터 가공 실시]
Map map = new HashMap<>();
map.put("I_ID", id);
map.put("I_PW", pw);
// [mapper 인터페이스 호출 실시]
database_api_mapper.PRO_UMCS_MANAGER(map);
// [프로시저 수행 후 리턴 값이 map 에 자동으로 담긴다]
return map;
}
} // TODO [클래스 종료]
[Database_Api_Mapper]
package com.manager.managerproject.C_Mapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
// TODO [매퍼 어노테이션]
@Mapper
public interface Database_Api_Mapper {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. 데이터베이스 접근 및 매퍼 인터페이스
* // -----------------------------------------
* 2. 데이터베이스 쿼리문 수행 xml 리턴 값 받음
* // -----------------------------------------
* */
/**
* // -----------------------------------------
* // TODO [빠른 로직 찾기 : 주석 로직 찾기]
* // -----------------------------------------
* // [SEARCH FAST] : [테스트 DB 호출]
* // [SEARCH FAST] : [로그인 사용자 인증 요청]
* // -----------------------------------------
* */
// TODO [SEARCH FAST] : [테스트 DB 호출]
String DB_TIME();
// TODO [SEARCH FAST] : [로그인 사용자 인증 요청]
void PRO_UMCS_MANAGER(Map map); // [프로시저 : void]
} // TODO [클래스 종료]
[Database_Api_Mybatis.xml]
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper 인터페이스 지정 : com.manager.managerproject.C_Mapper -->
<mapper namespace="com.manager.managerproject.C_Mapper.Database_Api_Mapper">
<!--
// =========================================
// [파일 설명]
// =========================================
1. DB 접근 및 쿼리, 프로시저, 함수 호출 수행 파일
// =========================================
2. mapper 리턴 데이터를 받을 인터페이스 설정 필요
// =========================================
-->
<!--
// =========================================
// [빠른 로직 찾기 : 주석 로직 찾기]
// =========================================
// [SEARCH FAST] : [테스트 DB 호출]
// =========================================
// [SEARCH FAST] : [로그인 사용자 인증 요청]
// =========================================
-->
<!--
// =========================================
// [SEARCH FAST] : [테스트 DB 호출]
// =========================================
// [select id] [mapper 인터페이스 지정 메소드] : DB_TIME
// =========================================
-->
<select id="DB_TIME" resultType="String">
<![CDATA[
select TO_CHAR(SYSDATE, 'YYYY-MM-DD')
from dual
]]>
</select>
<!--
// =========================================
// [SEARCH FAST] : [로그인 사용자 인증 요청]
// =========================================
// [select id] [mapper 인터페이스 지정 메소드] : PRO_UMCS_MANAGER
// =========================================
// [resultMap] : 프로시저 수행 후 리턴 메시지 및 커서 테이블이 담길 맵
// =========================================
-->
<resultMap id="PRO_UMCS_MANAGER_RESULT" type="hashmap" />
<select id="PRO_UMCS_MANAGER" parameterType="hashmap" statementType="CALLABLE">
<![CDATA[
{ call PRO_UMCS_MANAGER (
#{I_ID},
#{I_PW},
#{O_MSG, mode=OUT, jdbcType=VARCHAR, javaType=string, resultMap=PRO_UMCS_MANAGER_RESULT},
#{O_CURSOR, mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=PRO_UMCS_MANAGER_RESULT}
)}
]]>
</select>
</mapper>
[Time_Json_Model]
package com.manager.managerproject.model;
import lombok.Data;
// TODO [Data 어노테이션 : getter , setter]
@Data
public class Time_Json_Model {
/**
* // -----------------------------------------
* TODO [클래스 설명]
* // -----------------------------------------
* 1. Time 형식 데이터 Json 문자열로 리턴 수행
* // -----------------------------------------
* 2. 리턴 형식 : {"state":"T","time":"2022-05-12"}
* // -----------------------------------------
* */
// TODO [전역 변수 선언]
private String state; // [상태 값 : T / F]
private String time; // [time 값 : 2022-05-12]
// TODO [클래스 생성자 초기화]
public Time_Json_Model(String state, String time) {
this.state = state;
this.time = time;
}
} // TODO [클래스 종료]
[MvcConfiguration]
package com.manager.managerproject.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//WebMvcConfigurer.super.addResourceHandlers(registry);
// TODO [resource >> static >> 리소스 연결]
registry.addResourceHandler("/**").addResourceLocations("classpath:/templates/", "classpath:/static/");
}
}
반응형
'투케이2K 유틸파일' 카테고리의 다른 글
Comments