DB 접속 업데이트 및 소스 정리

This commit is contained in:
daniel LEE 2026-01-01 11:02:39 +09:00
parent 1e4e48e521
commit b67430acc1
6 changed files with 268 additions and 410 deletions

149
pom.xml
View File

@ -2,24 +2,79 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 🔴 Tomcat 9 표준 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
<version>2.7.18</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<artifactId>profile</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<packaging>war</packaging>
<description>Demo project for Spring Boot</description>
<name>profile</name>
<description>Spring Boot 2.7 WAR for Tomcat 9</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<!-- REST API -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 외부 Tomcat 9 배포 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.2</version>
</dependency>
<!-- DB Driver (MariaDB 기준, 하나만 선택) -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<!-- File Upload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.5</version>
</dependency>
<!-- JSP 엔진 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<!-- JSTL -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230618</version>
</dependency>
<dependency>
@ -28,88 +83,20 @@
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<!--<scope>provided</scope> provided로 지정하면 패키징시 제외됩니다. -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- Commons FileUpload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<!-- WAR 이름 -->
<finalName>profile</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

View File

@ -8,200 +8,126 @@ import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.io.IOUtils;
import org.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
import com.google.gson.Gson;
public class HttpUtil {
/* ===================== GET ===================== */
public static void sendGet(String url) {
public static String sendGet(String url) {
HttpURLConnection conn = null;
try {
URL u = new URL(url);
HttpURLConnection httpCon = (HttpURLConnection) u.openConnection();
// httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// httpCon.setDoOutput(true);
// httpCon.setDoInput(true);
httpCon.setRequestMethod("GET");
conn = (HttpURLConnection) u.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
InputStream in = new BufferedInputStream(httpCon.getInputStream());
String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(result);
in.close();
httpCon.disconnect();
} catch(Exception e) {
try (InputStream in = new BufferedInputStream(conn.getInputStream())) {
return IOUtils.toString(in, StandardCharsets.UTF_8);
}
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (conn != null) conn.disconnect();
}
}
/* ===================== POST JSON ===================== */
/**
* 객체를 JSON 문자열로 POST 방식으로 전송한다.
* @param url
* @param object
*/
public static void sendObject2Json(String url, Object object) {
public static String sendObject2Json(String url, Object object) {
HttpURLConnection conn = null;
try {
URL u = new URL(url);
HttpURLConnection httpCon = (HttpURLConnection) u.openConnection();
httpCon.setRequestProperty("Content-Type", "application/json; charset=EUC-KR");
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setRequestMethod("POST");
OutputStream raw = httpCon.getOutputStream();
//OutputStream buffered = new BufferedOutputStream(raw);
//OutputStreamWriter out = new OutputStreamWriter(buffered,"UTF-8");
//OutputStreamWriter out = new OutputStreamWriter(buffered);
//Object -> JSON
conn = (HttpURLConnection) u.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setDoOutput(true);
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
String jsonStr = new Gson().toJson(object);
System.out.println("ready to send : " + url);
System.out.println("converted json data: \n" + jsonStr);
//전송
raw.write(jsonStr.getBytes("EUC-KR"));
raw.flush();
raw.close();
// read the response
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());
try (OutputStream os = conn.getOutputStream()) {
os.write(jsonStr.getBytes(StandardCharsets.UTF_8));
}
InputStream in = new BufferedInputStream(httpCon.getInputStream());
String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(result);
in.close();
httpCon.disconnect();
try (InputStream in = new BufferedInputStream(conn.getInputStream())) {
return IOUtils.toString(in, StandardCharsets.UTF_8);
}
} catch(Exception e) {
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (conn != null) conn.disconnect();
}
}
}
/* ===================== POST FORM ===================== */
/**
* 객체를 GET 파라미터 형식의 POST 방식으로 전송한다.
* @param url
* @param object
*/
public static void sendObject2Post(String url, Object object) {
public static String sendObject2Post(String url, Object object) {
HttpURLConnection conn = null;
try {
URL u = new URL(url);
HttpURLConnection httpCon = (HttpURLConnection) u.openConnection();
httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setRequestMethod("POST");
OutputStream raw = httpCon.getOutputStream();
//OutputStream buffered = new BufferedOutputStream(raw);
//OutputStreamWriter out = new OutputStreamWriter(buffered,"UTF-8");
//OutputStreamWriter out = new OutputStreamWriter(buffered);
//Object -> JSON
String jsonStr = new Gson().toJson(object);
System.out.println("ready to send : " + url);
System.out.println("converted json data: \n" + jsonStr);
conn = (HttpURLConnection) u.openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
conn.setDoOutput(true);
JSONObject json = new JSONObject(new Gson().toJson(object));
StringBuilder sb = new StringBuilder();
JSONObject json = new JSONObject(jsonStr);
Iterator<String> keys = json.keys();
//sb.append("?"); //start of query args
while (keys.hasNext()) {
String key = keys.next();
sb.append(key);
sb.append("=");
sb.append( URLEncoder.encode((String)json.get(key), "EUC-KR") );
sb.append("&"); //To allow for another argument.
sb.append(key)
.append("=")
.append(URLEncoder.encode(json.getString(key), "UTF-8"))
.append("&");
}
String queryStr = sb.toString();
System.out.println( "json to query :" + queryStr );
try (OutputStream os = conn.getOutputStream()) {
os.write(sb.toString().getBytes(StandardCharsets.UTF_8));
}
//전송
raw.write(queryStr.getBytes("EUC-KR"));
raw.flush();
raw.close();
try (InputStream in = new BufferedInputStream(conn.getInputStream())) {
return IOUtils.toString(in, StandardCharsets.UTF_8);
}
// read the response
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());
InputStream in = new BufferedInputStream(httpCon.getInputStream());
String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(result);
in.close();
httpCon.disconnect();
} catch(Exception e) {
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (conn != null) conn.disconnect();
}
}
}
/* ===================== Client IP ===================== */
/**
* 객체를 GET 파라미터 형식의 POST 방식으로 전송한다.
* @param url
* @param object
*/
public static void send2PostOrderId(String url, String moduleId, String orderId, String userId) {
try {
URL u = new URL(url);
HttpURLConnection httpCon = (HttpURLConnection) u.openConnection();
httpCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
httpCon.setDoOutput(true);
httpCon.setDoInput(true);
httpCon.setRequestMethod("POST");
OutputStream raw = httpCon.getOutputStream();
System.out.println("ready to send : " + url);
String queryStr = "moduleId=" + moduleId + "&" + "orderId=" + orderId + "&" + "userId=" + userId;
System.out.println( "json to query :" + queryStr );
//전송
raw.write(queryStr.getBytes("EUC-KR"));
raw.flush();
raw.close();
// read the response
System.out.println(httpCon.getResponseCode());
System.out.println(httpCon.getResponseMessage());
InputStream in = new BufferedInputStream(httpCon.getInputStream());
String result = org.apache.commons.io.IOUtils.toString(in, "UTF-8");
System.out.println(result);
in.close();
httpCon.disconnect();
} catch(Exception e) {
e.printStackTrace();
}
}
/** 클라이언트 ip 추출
PROXY SERVER 또는 LOAD BALANCER를 거치는 경우 ip가 접속하기 직전의 ip로 들어오게 된다.
PROXY SERVER 또는 LOAD BALANCER를 거칠 경우 reuqest header의 HTTP_X_FORWARDED_FOR 키워드에 정보를 남김으로
먼저 확인 없을 경우 request.getRemoteAddr() ip를 추출한다. */
public static String getClientIp(HttpServletRequest request) throws Exception {
public static String getClientIp(HttpServletRequest request) {
String ip = request.getHeader("HTTP_X_FORWARDED_FOR");
if ( StringUtils.isEmpty( ip ) ) {
if (StringUtils.isBlank(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}//end class
}

View File

@ -10,8 +10,6 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.http.HttpStatus;
@ -19,158 +17,112 @@ import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class JSPController {
// @Value("${openApi.serviceKey}")
// private String serviceKey;
//
// @Value("${openApi.callBackUrl}")
// private String callBackUrl;
//
// @Value("${openApi.dataType}")
// private String dataType;
/* ===================== 화면 ===================== */
@GetMapping("/add.do")
public String addList(Model model) {
// System.out.println( id );
// model.addAttribute("id", "id");
// model.addAttribute("name", "name");
public String addList() {
return "add";
}
@GetMapping("/index.do")
public String index(Model model) {
ResponseEntity<String> result = callForecastApi();
JSONObject json = new JSONObject(result);
JSONArray jsonArr = new JSONArray( json.get("body").toString() );
List<Object> list = new ArrayList<Object>();
for ( int i = 0; i < jsonArr.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject obj = jsonArr.getJSONObject(i);
map.put( "id", obj.getString("phone") );
map.put( "name", obj.getString("name") );
map.put( "phone", obj.getString("phone") );
map.put( "address", obj.getString("address") );
map.put( "filepath", obj.getString("filepath") );
list.add(map);
}
List<HashMap<String, String>> list = fetchUserList();
model.addAttribute("list", list);
return "index";
}
@GetMapping("/list.do")
public String home(Model model) {
public String list(Model model) {
model.addAttribute("start", "start....OK");
ResponseEntity<String> result = callForecastApi();
// System.out.println(result);
JSONObject json = new JSONObject(result);
model.addAttribute("name", result);
JSONArray jsonArr = new JSONArray( json.get("body").toString() );
// System.out.println( jsonArr );
List<Object> list = new ArrayList<Object>();
for ( int i = 0; i < jsonArr.length(); i++) {
HashMap<String, String> map = new HashMap<String, String>();
JSONObject obj = jsonArr.getJSONObject(i);
map.put( "id", obj.getString("phone") );
map.put( "name", obj.getString("name") );
map.put( "phone", obj.getString("phone") );
map.put( "address", obj.getString("phone") );
map.put( "filepath", obj.getString("filepath") );
list.add(map);
}
List<HashMap<String, String>> list = fetchUserList();
model.addAttribute("list", list);
return "hello";
}
// public ResponseEntity<String> callForecastApi(
// @RequestParam(value="base_time") String baseTime,
// @RequestParam(value="base_date") String baseDate,
// @RequestParam(value="beach_num") String beachNum ) {
/* ===================== API 처리 ===================== */
private List<HashMap<String, String>> fetchUserList() {
ResponseEntity<String> response = callForecastApi();
String body = response.getBody();
JSONArray jsonArr = new JSONArray(body);
List<HashMap<String, String>> list = new ArrayList<>();
for (int i = 0; i < jsonArr.length(); i++) {
JSONObject obj = jsonArr.getJSONObject(i);
HashMap<String, String> map = new HashMap<>();
map.put("id", obj.optString("phone"));
map.put("name", obj.optString("name"));
map.put("phone", obj.optString("phone"));
map.put("address", obj.optString("address"));
map.put("filepath", obj.optString("filepath"));
list.add(map);
}
return list;
}
/* ===================== HTTP 호출 ===================== */
public ResponseEntity<String> callForecastApi() {
HttpURLConnection urlConnection = null;
HttpURLConnection conn = null;
InputStream stream = null;
String result = null;
// String urlStr = callBackUrl +
// "serviceKey=" + serviceKey +
// "&dataType=" + dataType +
// "&base_date=" + baseDate +
// "&base_time=" + baseTime +
// "&beach_num=" + beachNum;
String result = "";
String urlStr = "https://api.leejk0523.com/profile/user/all";
try {
URL url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
urlConnection = (HttpURLConnection) url.openConnection();
stream = getNetworkConnection(urlConnection);
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException("HTTP error : " + conn.getResponseCode());
}
stream = conn.getInputStream();
result = readStreamToString(stream);
if (stream != null) stream.close();
} catch(IOException e) {
} catch (Exception e) {
e.printStackTrace();
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
try {
if (stream != null) stream.close();
} catch (IOException e) {}
if (conn != null) conn.disconnect();
}
return new ResponseEntity<>(result, HttpStatus.OK);
}
/* URLConnection 을 전달받아 연결정보 설정 후 연결, 연결 후 수신한 InputStream 반환 */
private InputStream getNetworkConnection(HttpURLConnection urlConnection) throws IOException {
urlConnection.setConnectTimeout(3000);
urlConnection.setReadTimeout(3000);
urlConnection.setRequestMethod("GET");
urlConnection.setDoInput(true);
if(urlConnection.getResponseCode() != HttpURLConnection.HTTP_OK) {
throw new IOException("HTTP error code : " + urlConnection.getResponseCode());
}
return urlConnection.getInputStream();
}
/* InputStream을 전달받아 문자열로 변환 후 반환 */
private String readStreamToString(InputStream stream) throws IOException{
StringBuilder result = new StringBuilder();
private String readStreamToString(InputStream stream) throws IOException {
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
String readLine;
while((readLine = br.readLine()) != null) {
result.append(readLine + "\n\r");
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
return result.toString();
return sb.toString();
}
}

View File

@ -30,6 +30,11 @@ public class UserProfileController {
this.mapper = mapper;
}
@GetMapping("/user/test")
public Object test() {
return "OK";
}
@GetMapping("/user/{id}")
public UserProfile getUserProfile(@PathVariable String id) {
return mapper.getUserProfile(id);
@ -43,9 +48,10 @@ public class UserProfileController {
@Value("${server.url.img}")
private String SERVER_URL_IMG;
@Value("server.servlet.context-path")
@Value("${server.servlet.context-path}")
private String CONTEXT_PATH;
@PostMapping("/user/{id}")
// public HashMap<String, Object> putUserProfile(@PathVariable String id, @RequestParam String name,
// public void putUserProfile(@PathVariable String id, @RequestParam String name,

View File

@ -1,6 +1,6 @@
# DB
spring.datasource.url=jdbc:mariadb://leejk0523.com:3306/profile?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&autoReconnect=true&verifyServerCertificate=false&useSSL=false
spring.datasource.username=leejk0523
spring.datasource.url=jdbc:mariadb://linuxserver-mariadb-1:3306/profile?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul&autoReconnect=true&verifyServerCertificate=false&useSSL=false
spring.datasource.username=root
spring.datasource.password=Ghtkssk0325
# Encoding

View File

@ -1,13 +0,0 @@
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Test
void contextLoads() {
}
}