diff --git a/pom.xml b/pom.xml index af53200..d7dab0c 100644 --- a/pom.xml +++ b/pom.xml @@ -2,116 +2,103 @@ 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 2.3.12.RELEASE - - - com.example - demo - 0.0.1-SNAPSHOT - demo - war - Demo project for Spring Boot - - - - - com.google.code.gson - gson - - - - org.apache.commons - commons-lang3 - - - - org.json - json - 20160810 - - - - - org.apache.tomcat.embed - tomcat-embed-jasper - provided - - - - javax.servlet - jstl - - - + + + + org.springframework.boot + spring-boot-starter-parent + 2.7.18 + + + + com.example + profile + 0.0.1-SNAPSHOT + war + + profile + Spring Boot 2.7 WAR for Tomcat 9 + + + 8 + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + 2.3.2 + + + + + org.mariadb.jdbc + mariadb-java-client + + + commons-fileupload commons-fileupload - 1.3.3 + 1.5 - - - commons-io - commons-io - 2.6 - - + + - org.springframework.boot - spring-boot-starter-web + org.apache.tomcat.embed + tomcat-embed-jasper + provided + + + + + javax.servlet + jstl - org.springframework.boot - spring-boot-starter-tomcat - provided - - - - - mysql - mysql-connector-java - + org.json + json + 20230618 + - org.mariadb.jdbc - mariadb-java-client - - - - - org.mybatis.spring.boot - mybatis-spring-boot-starter - 2.3.2 + org.apache.commons + commons-lang3 - org.springframework.boot - spring-boot-starter-test - test - - - org.junit.vintage - junit-vintage-engine - - + com.google.code.gson + gson - + + - - profile - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - + + + profile + + + + org.springframework.boot + spring-boot-maven-plugin + + + diff --git a/src/main/java/com/example/demo/config/HttpUtil.java b/src/main/java/com/example/demo/config/HttpUtil.java index 1953931..412c670 100644 --- a/src/main/java/com/example/demo/config/HttpUtil.java +++ b/src/main/java/com/example/demo/config/HttpUtil.java @@ -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 { - - - public static void sendGet(String url) { - 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"); - - 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(); - - } - } + /* ===================== GET ===================== */ + public static String sendGet(String url) { - /** - * 객체를 JSON 문자열로 POST 방식으로 전송한다. - * @param url - * @param object - */ - public static void 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 - 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(); + try { + URL u = new URL(url); + conn = (HttpURLConnection) u.openConnection(); + conn.setRequestMethod("GET"); + conn.setConnectTimeout(3000); + conn.setReadTimeout(3000); - // read the response - System.out.println(httpCon.getResponseCode()); - System.out.println(httpCon.getResponseMessage()); + try (InputStream in = new BufferedInputStream(conn.getInputStream())) { + return IOUtils.toString(in, 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(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } finally { + if (conn != null) conn.disconnect(); + } + } - } catch(Exception e) { - e.printStackTrace(); - } + /* ===================== POST JSON ===================== */ - } + public static String sendObject2Json(String url, Object object) { - /** - * 객체를 GET 파라미터 형식의 POST 방식으로 전송한다. - * @param url - * @param object - */ - public static void 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); - - StringBuilder sb = new StringBuilder(); - JSONObject json = new JSONObject(jsonStr); - Iterator 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. - } - String queryStr = sb.toString(); - - System.out.println( "json to query :" + queryStr ); - - //전송 - raw.write(queryStr.getBytes("EUC-KR")); - raw.flush(); - raw.close(); + try { + URL u = new URL(url); + conn = (HttpURLConnection) u.openConnection(); - // read the response - System.out.println(httpCon.getResponseCode()); - System.out.println(httpCon.getResponseMessage()); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); + conn.setDoOutput(true); + 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(); + String jsonStr = new Gson().toJson(object); - } catch(Exception e) { - e.printStackTrace(); - } + try (OutputStream os = conn.getOutputStream()) { + os.write(jsonStr.getBytes(StandardCharsets.UTF_8)); + } - } + try (InputStream in = new BufferedInputStream(conn.getInputStream())) { + return IOUtils.toString(in, StandardCharsets.UTF_8); + } - - /** - * 객체를 GET 파라미터 형식의 POST 방식으로 전송한다. - * @param url - * @param object - */ - public static void send2PostOrderId(String url, String moduleId, String orderId, String userId) { + } catch (Exception e) { + e.printStackTrace(); + return null; + } finally { + if (conn != null) conn.disconnect(); + } + } - 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); + /* ===================== POST FORM ===================== */ - 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(); + public static String sendObject2Post(String url, Object object) { - // read the response - System.out.println(httpCon.getResponseCode()); - System.out.println(httpCon.getResponseMessage()); + HttpURLConnection conn = null; - 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 { + URL u = new URL(url); + conn = (HttpURLConnection) u.openConnection(); - } catch(Exception e) { - e.printStackTrace(); - } + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); + conn.setDoOutput(true); - } - - - /** 클라이언트 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 { - String ip = request.getHeader("HTTP_X_FORWARDED_FOR"); - if ( StringUtils.isEmpty( ip ) ) { - ip = request.getRemoteAddr(); - } - return ip; - } + JSONObject json = new JSONObject(new Gson().toJson(object)); + StringBuilder sb = new StringBuilder(); -}//end class \ No newline at end of file + Iterator keys = json.keys(); + while (keys.hasNext()) { + String key = keys.next(); + sb.append(key) + .append("=") + .append(URLEncoder.encode(json.getString(key), "UTF-8")) + .append("&"); + } + + try (OutputStream os = conn.getOutputStream()) { + os.write(sb.toString().getBytes(StandardCharsets.UTF_8)); + } + + 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(); + } + } + + /* ===================== Client IP ===================== */ + + public static String getClientIp(HttpServletRequest request) { + String ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + if (StringUtils.isBlank(ip)) { + ip = request.getRemoteAddr(); + } + return ip; + } +} diff --git a/src/main/java/com/example/demo/controller/JSPController.java b/src/main/java/com/example/demo/controller/JSPController.java index 5de81fc..afdd5d5 100644 --- a/src/main/java/com/example/demo/controller/JSPController.java +++ b/src/main/java/com/example/demo/controller/JSPController.java @@ -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"); - - - - return "add"; - } - - - @GetMapping("/index.do") - public String index(Model model) { - - ResponseEntity result = callForecastApi(); - JSONObject json = new JSONObject(result); - JSONArray jsonArr = new JSONArray( json.get("body").toString() ); - - List list = new ArrayList(); - for ( int i = 0; i < jsonArr.length(); i++) { - HashMap map = new HashMap(); - 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); - } - - model.addAttribute("list", list); - - return "index"; - } - - @GetMapping("/list.do") - public String home(Model model) { - - model.addAttribute("start", "start....OK"); - - ResponseEntity 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 list = new ArrayList(); - for ( int i = 0; i < jsonArr.length(); i++) { - HashMap map = new HashMap(); - 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); - } - - model.addAttribute("list", list); - return "hello"; - } - -// public ResponseEntity callForecastApi( -// @RequestParam(value="base_time") String baseTime, -// @RequestParam(value="base_date") String baseDate, -// @RequestParam(value="beach_num") String beachNum ) { - - public ResponseEntity callForecastApi() { - - HttpURLConnection urlConnection = null; - InputStream stream = null; - String result = null; -// String urlStr = callBackUrl + -// "serviceKey=" + serviceKey + -// "&dataType=" + dataType + -// "&base_date=" + baseDate + -// "&base_time=" + baseTime + -// "&beach_num=" + beachNum; - + /* ===================== 화면 ===================== */ + + @GetMapping("/add.do") + public String addList() { + return "add"; + } + + @GetMapping("/index.do") + public String index(Model model) { + + List> list = fetchUserList(); + model.addAttribute("list", list); + + return "index"; + } + + @GetMapping("/list.do") + public String list(Model model) { + + model.addAttribute("start", "start....OK"); + + List> list = fetchUserList(); + model.addAttribute("list", list); + + return "hello"; + } + + /* ===================== API 처리 ===================== */ + + private List> fetchUserList() { + + ResponseEntity response = callForecastApi(); + String body = response.getBody(); + + JSONArray jsonArr = new JSONArray(body); + + List> list = new ArrayList<>(); + + for (int i = 0; i < jsonArr.length(); i++) { + JSONObject obj = jsonArr.getJSONObject(i); + + HashMap 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 callForecastApi() { + + HttpURLConnection conn = null; + InputStream stream = null; + 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(); } - } - diff --git a/src/main/java/com/example/demo/controller/UserProfileController.java b/src/main/java/com/example/demo/controller/UserProfileController.java index 1d2830a..9eb44ab 100644 --- a/src/main/java/com/example/demo/controller/UserProfileController.java +++ b/src/main/java/com/example/demo/controller/UserProfileController.java @@ -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,8 +48,9 @@ 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 putUserProfile(@PathVariable String id, @RequestParam String name, diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 25ae8fa..403a293 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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 diff --git a/src/test/java/com/example/demo/DemoApplicationTests.java b/src/test/java/com/example/demo/DemoApplicationTests.java deleted file mode 100644 index 2778a6a..0000000 --- a/src/test/java/com/example/demo/DemoApplicationTests.java +++ /dev/null @@ -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() { - } - -}