벡엔드 웹프로그래밍/Spring

Spring 웹 프로그래밍 85일차 (25/3/19)

wkun 2025. 3. 19. 17:59

contents

 

Rest API 활용하기

1.JSON 개념의 이해

2.자바스크립트에서 JSON 생성하기

3.JSON을 위한 환경설정

서버프로그램 개발: REST API

NAVER CLOUD PLATFORM

1.위도와 경도 값 얻어오기: Geocoding

2.지도 이미지 생성하기: Static Map

 

-------------------------------------------------------

 

 

Rest API 활용하기

 

1.JSON 개념의 이해

1)개념: JSON이란?

-JSON(JavaScript Object Nation)은 데이터 교환을 위한 경량의 데이터 교환 형식임. 이는 사람이 읽을 수 있는 텍스트기반의 형식으로, 기계가 쉽게 구문 해석하고 생성할 수 있음

*데이터 형식: text.html

                      application/Json

                          //          .xml

 

-JSON은 다음과 같은 특징을 가짐

(1)데이터 구조

·JSON은 키-값 쌍으로 구성된 객체 형태로 데이터를 표현함

·배열, 숫자, 문자열, 불리언, null 등의 데이터 타입을 지원함

(2)간단한 구문

·JSON은 중괄호 {}로 객체를 나태내고, []로 배열을 나타냄

·키와 값은 콜론: 으로 구분되며, 각 키-값 쌍은 쉼표(,)로 구분됨

(3)언어의 독립성

·JSON은 언어 독립적인 데이터 형식이므로, 다양한 프로그래밍 언어에서 사용할 수 있음

·대부분의 프로그래밍 언어는 JSON 데이터를 읽고 쓸 수 있는 라이브러리를 제공함

(4)데이터 전송

·JSON은 HTTP 요청의 페이로드로 사용되어 클라이언트-서버간 데이터 전송에 활용됨

·API 응답 데이터, 설정 파일, 데이터베이스 데이터 등을 JSON 형식으로 표현할 수 있음

 

2)종류: 다양한 데이터 전달 방식

-현재는 주로 Json(JavaScript Object Nation)을 통하여 데이터를 주고 받는 방식이 많으나 과거의 데이터와 같은 경우 XML, Text와 같은 형태로도 많은 데이터를 주고 받았음

-아래의 데이터 방식을 통하여 자바에서 왜 JSON을 많이 사용하는지 알아봄

(1)String obj = "kim,busan,1111-1111-1111";

-첫번째 방식은 변수에 데이터를 담아서 전송하는 방법으로 단순하지만 데이터 처리가 어려움

-이러한 데이터를 처리하기 위해서는 문자열 라이브러리를 사용하는 것이 필수적임

 

(2)String xml_obj =

   "<members>"

        +"<member>"

               +<name>kim</name><address>busan</address><phone>1111-1111-111</phone>

        +"</member>"

        +"<member>"

               +<name>lee</name><address>seoul</address><phone>2222-2222-222</phone>

        +"</member>"

   + "<members>"

-두번째 방식은 데이터처리는 쉬우나 태그 태그로 인하여 데이터 크기가 커지는 단점으로 네크워크를 통하여 데이터전송시 타 데이터보다 오래 걸린다는 단점이 있음

 

(3)String json_obj="["

         +"{'name':'kim', 'address':'busan','phone':'1111-1111-111'}

         +"{'name':'lee', 'address':'seoul','phone':'2222-2222-222'}

         +"]"

 

2.자바스크립트에서 JSON 생성하기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>JSON 활용하기</h1>
</body>
<script>
let person=[
{"name":"kim","address":"busan","phone":"1111-1111-111"},
{"name":"lee","address":"seoul","phone":"2222-2222-222"}
];
console.log(person[0].name+" "+person[0].address+" "+person[0].phone);
for(let ps of person){
console.log("------멤버-----");
console.log(ps.name);
console.log(ps.address);
console.log(ps.phone);
}
</script>
</html>

 

3.JSON을 위한 환경설정

 

step1-1: pom.xml 작성하기

 

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springmvc</groupId>
<artifactId>json</artifactId>
<name>BookMarket</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>17</java-version>
<org.springframework-version>5.3.19</org.springframework-version>
<org.aspectj-version>1.9.9.1</org.aspectj-version>
<org.slf4j-version>1.7.36</org.slf4j-version>
<security.version>5.6.3</security.version>
<commons-fileupload-version>1.4</commons-fileupload-version>
<commons-io-version>2.11.0</commons-io-version>
</properties>
<dependencies>


<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>


<!-- JSON-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20230227</version>
</dependency>


</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-eclipse-plugin</artifactId>
<version>2.9</version>
<configuration>
<additionalProjectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalProjectnatures>
<additionalBuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalBuildcommands>
<downloadSources>true</downloadSources>
<downloadJavadocs>true</downloadJavadocs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.5.1</version>
<configuration>
<source>17</source>
<target>17</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>org.test.int1.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>

 

step1-2: web.xml 작성하기

 

web.xml

<web-app id="servlet-2_5" version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>



<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

</web-app>

 

step1-3: servlet-context.xml 작성하기

 

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!-- 핸들러매핑 객체를 자동으로 생성한다. -->
<annotation-driven />

<!-- 뷰리졸브 객체를 설정 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>

<!-- 자동으로 객체를 스캔하여 생성 -->
<context:component-scan base-package="com.springmvc.*" />

<annotation-driven/>

<!-- 리소스파일은 MVC 처리하지 않음 -->
<resources mapping="/resources/**" location="/resources/" />



</beans:beans>

 

step2: 도메인 클래스 작성하기

 

book.java

package com.springmvc.domain;


public class book {
private String title;
private int price;
private String company;
private int page;


public book() {}


public book(String title, int price, String company, int page) {
super();
this.title = title;
this.price = price;
this.company = company;
this.page = page;
}


public String getTitle() {
return title;
}


public void setTitle(String title) {
this.title = title;
}


public int getPrice() {
return price;
}


public void setPrice(int price) {
this.price = price;
}


public String getCompany() {
return company;
}


public void setCompany(String company) {
this.company = company;
}


public int getPage() {
return page;
}


public void setPage(int page) {
this.page = page;
}



}

 

step3: 컨트롤러 클래스 작성하기

 

JsonController.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;


import org.json.JSONObject;
import com.google.gson.JsonObject;


@Controller
@RequestMapping("/js")
public class JsonController {

@GetMapping("/createjson")
public String createjson(Model model) {
System.out.println("createjson");
JSONObject book1 = new JSONObject(); // {"key" : "value"}
book1.put("title", " 스프링1"); // {"title" : "스프링1"}
book1.put("price", 10000); // {"title" : " 스프링1", "price" : 10000}
book1.put("page", 100); // {"title" : " 스프링1", "price" : 10000, "page" : 100}
System.out.println(book1.toString());

return "ajax";
}
}

 

 

step4: 뷰 페이지 작성하기

 

ajax.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Ajax요청페이지</title>
</head>
<body>
<%String json = (String)request.getAttribute("json"); %>
<h1>결과값을 출력합니다</h1>
전달된 결과값: <%=json %><br>
<a href="/JSON/json/Objtojson">도메인객체로 json으로 변환하기</a><br>
<a href="/JSON/json/jsontoObj">json을 도메인객체로 변환하기</a><br>
<a href="/JSON/json/arrtojson">ArrayList를 JSON으로 변환하기</a><br>
<a href="/JSON/json/jsontoarr">JSON배열을 ArrayList로 변환하기</a><br>
</body>
</html>

 

실행 결과

http://localhost:8080/json/js/createjson

 

4.자바에서 JSON객체 생성하기

 

step1: json 객체 생성과 배열생성하기

 

JsonController.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.json.JSONArray;
import org.json.JSONObject;
import com.google.gson.JsonObject;


@Controller
@RequestMapping("/js")
public class JsonController {

@GetMapping("/createjson")
public String createjson(Model model) {
System.out.println("createjson");
JSONObject book1 = new JSONObject(); // {"key" : "value"}
book1.put("title", " 스프링1"); // {"title" : "스프링1"}
book1.put("price", 10000); // {"title" : " 스프링1", "price" : 10000}
book1.put("page", 100); // {"title" : " 스프링1", "price" : 10000, "page" : 100}
System.out.println(book1.toString());


JSONObject book2 = new JSONObject(); // {"key" : "value"}
book2.put("title", " 스프링2"); // {"title" : "스프링2"}
book2.put("price", 20000); // {"title" : " 스프링2", "price" : 20000}
book2.put("page", 200); // {"title" : " 스프링2", "price" : 20000, "page" : 200}
System.out.println(book2.toString());

JSONArray books = new JSONArray();
books.put(book1);
books.put(book2);
System.out.println(books.toString());

return "ajax";
}
}

 

실행 결과

http://localhost:8080/json/js/createjson

 

*묶는 방법

1.배열

2.ArrayList

 

5.자바에서 JSON 변환하기

 

step1: 도메인객체를 JSON으로 변환하기

JsonController.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.json.JSONArray;
import org.json.JSONObject;


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.springmvc.domain.book;


@Controller
@RequestMapping("/js")
public class JsonController {


Gson gson = null;

@GetMapping("/createjson")
public String createjson(Model model) {
System.out.println("createjson");
JSONObject book1 = new JSONObject(); // {"key" : "value"}
book1.put("title", " 스프링1"); // {"title" : "스프링1"}
book1.put("price", 10000); // {"title" : " 스프링1", "price" : 10000}
book1.put("page", 100); // {"title" : " 스프링1", "price" : 10000, "page" : 100}
System.out.println(book1.toString());


JSONObject book2 = new JSONObject(); // {"key" : "value"}
book2.put("title", " 스프링2"); // {"title" : "스프링2"}
book2.put("price", 20000); // {"title" : " 스프링2", "price" : 20000}
book2.put("page", 200); // {"title" : " 스프링2", "price" : 20000, "page" : 200}
System.out.println(book2.toString());

JSONArray books = new JSONArray();
books.put(book1);
books.put(book2);
System.out.println(books.toString());

return "ajax";
}

@GetMapping("DTJ")
public String DTOtoJSON() {
book dto = new book("자바", 21000, "아이티에듀넷", 670);
gson = new Gson();
String json = gson.toJson(dto);
System.out.println(json);

return "ajax";
}

}

 

실행 결과

http://localhost:8080/json/js/DTJ

 

step2: JSON을 도메인객체로 변환하기

 

JsonController.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.json.JSONArray;
import org.json.JSONObject;


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.springmvc.domain.book;


@Controller
@RequestMapping("/js")
public class JsonController {


Gson gson = null;

@GetMapping("/createjson")
public String createjson(Model model) {
System.out.println("createjson");
JSONObject book1 = new JSONObject(); // {"key" : "value"}
book1.put("title", " 스프링1"); // {"title" : "스프링1"}
book1.put("price", 10000); // {"title" : " 스프링1", "price" : 10000}
book1.put("page", 100); // {"title" : " 스프링1", "price" : 10000, "page" : 100}
System.out.println(book1.toString());


JSONObject book2 = new JSONObject(); // {"key" : "value"}
book2.put("title", " 스프링2"); // {"title" : "스프링2"}
book2.put("price", 20000); // {"title" : " 스프링2", "price" : 20000}
book2.put("page", 200); // {"title" : " 스프링2", "price" : 20000, "page" : 200}
System.out.println(book2.toString());

JSONArray books = new JSONArray();
books.put(book1);
books.put(book2);
System.out.println(books.toString());

return "ajax";
}
String json = null;
@GetMapping("DTJ")
public String DTOtoJSON() {
book dto = new book("자바", 21000, "아이티에듀넷", 670);
gson = new Gson();
json = gson.toJson(dto);
System.out.println(json);

return "ajax";
}

@GetMapping("JTD")
public String JSONtoDTO() {
gson = new Gson();
book newdto = gson.fromJson(json, book.class);
System.out.println(newdto.toString());
//{"title":"자바","price":21000,"company":"아이티에듀넷","page":670}
//book [title=자바, price=21000, company=아이티에듀넷, page=670]

return "ajax";
}

}

 

실행 결과

http://localhost:8080/json/js/DTJ

http://localhost:8080/json/js/JTD

 

step3: ArrayList<book> 객체를 JSON을 변환하기

 

JsonController.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;


import java.util.ArrayList;


import org.json.JSONArray;
import org.json.JSONObject;


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.springmvc.domain.book;


@Controller
@RequestMapping("/js")
public class JsonController {


Gson gson = null;

@GetMapping("/createjson")
public String createjson(Model model) {
System.out.println("createjson");
JSONObject book1 = new JSONObject(); // {"key" : "value"}
book1.put("title", " 스프링1"); // {"title" : "스프링1"}
book1.put("price", 10000); // {"title" : " 스프링1", "price" : 10000}
book1.put("page", 100); // {"title" : " 스프링1", "price" : 10000, "page" : 100}
System.out.println(book1.toString());


JSONObject book2 = new JSONObject(); // {"key" : "value"}
book2.put("title", " 스프링2"); // {"title" : "스프링2"}
book2.put("price", 20000); // {"title" : " 스프링2", "price" : 20000}
book2.put("page", 200); // {"title" : " 스프링2", "price" : 20000, "page" : 200}
System.out.println(book2.toString());

JSONArray books = new JSONArray();
books.put(book1);
books.put(book2);
System.out.println(books.toString());

return "ajax";
}
String json = null;
@GetMapping("DTJ")
public String DTOtoJSON() {
book dto = new book("자바", 21000, "아이티에듀넷", 670);
gson = new Gson();
json = gson.toJson(dto);
System.out.println(json);

return "ajax";
}

@GetMapping("JTD")
public String JSONtoDTO() {
gson = new Gson();
book newdto = gson.fromJson(json, book.class);
System.out.println(newdto.toString());
//{"title":"자바","price":21000,"company":"아이티에듀넷","page":670}
//book [title=자바, price=21000, company=아이티에듀넷, page=670]

return "ajax";
}

@GetMapping("ATJ")
public String ArraytoJson() {
gson = new Gson();

ArrayList<book> arr = new ArrayList<book>();
book dto1 = new book("자바", 21000, "아이티에듀넷", 671);
book dto2 = new book("자바", 21000, "아이티에듀넷", 672);
book dto3 = new book("자바", 21000, "아이티에듀넷", 673);
arr.add(dto1);
arr.add(dto2);
arr.add(dto3);
//[book [title=자바, price=21000, company=아이티에듀넷, page=671], book [title=자바, price=21000, company=아이티에듀넷, page=672], book [title=자바, price=21000, company=아이티에듀넷, page=673]]

System.out.println("ArrayList 출력");
System.out.println(arr.toString());
System.out.println("--------------------");

String listjson = gson.toJson(arr);
System.out.println("json 출력");
System.out.println(listjson);
//[{"title":"자바","price":21000,"company":"아이티에듀넷","page":671},
// {"title":"자바","price":21000,"company":"아이티에듀넷","page":672},
// {"title":"자바","price":21000,"company":"아이티에듀넷","page":673}]

return "ajax";
}

}

 

실행 결과

http://localhost:8080/json/js/ATJ

 

 

6.공공데이터 이용하기

-포털 사이트에서 공공데이터라고 검색하면 다음의 사이트가 검색됨

-사이트 주소: Data.go.kr

https://www.data.go.kr/

 

공공데이터 포털

국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase

www.data.go.kr

 

-국가에서 보유하고 있는 다양한 분야의 데이터를 활용할 수 있음

-공공데이터를 사용하기 위해서는 다음과 같은 절차가 필요함

 

1)회원가입

2)필요 데이터 검색

3)데이터 활용신청

 

-"한국도로교통공단_무단횡단 교통사고 다발지역 정보"라고 검색하고 오픈 API  탭 클릭 -> 활용신청 버튼을 클릭하여 데이터 활용 신청을 할 수 있음

-일반인증키를 사용하여 데이터를 요청할 수 있음(복사하여 붙여넣기)

-type 부분에 json으로 입력하기

 

-미리보기를 통하여 전달되는 데이터를 미리볼 수 있음

-샘플데이터는 요청 URL을 만들때 사용되는 값이며 이 값을 이용하여 특정 위치의 값을 얻을 수 있음

-페이지 위쪽에 상세설명을 클릭하면 API의 파라미터 관련된 정보를 알 수 있음

cf) <html>                       Controller

        ↓                                  요청     server → server

       <a> → server

       <form>

 

-검색창에 json viwer 검색 -> 미리보기를 선택하면 위의 화면처럼 데이터가 나타남

https://jsonviewer.stack.hu/

 

Online JSON Viewer and Formatter

 

jsonviewer.stack.hu

 

-데이터를 복사하여 viwer 창에 입력

 

* {   } : 객체

    ↓

배열, 객체{}, "key" : "value"

ex) {"items" : {    }  }

          key    value

 

step1: API JSON 요청하기

 

JsonController.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;


import org.json.JSONArray;
import org.json.JSONObject;


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.springmvc.domain.book;


@Controller
@RequestMapping("/js")
public class JsonController {


Gson gson = null;

@GetMapping("/createjson")
public String createjson(Model model) {
System.out.println("createjson");
JSONObject book1 = new JSONObject(); // {"key" : "value"}
book1.put("title", " 스프링1"); // {"title" : "스프링1"}
book1.put("price", 10000); // {"title" : " 스프링1", "price" : 10000}
book1.put("page", 100); // {"title" : " 스프링1", "price" : 10000, "page" : 100}
System.out.println(book1.toString());


JSONObject book2 = new JSONObject(); // {"key" : "value"}
book2.put("title", " 스프링2"); // {"title" : "스프링2"}
book2.put("price", 20000); // {"title" : " 스프링2", "price" : 20000}
book2.put("page", 200); // {"title" : " 스프링2", "price" : 20000, "page" : 200}
System.out.println(book2.toString());

JSONArray books = new JSONArray();
books.put(book1);
books.put(book2);
System.out.println(books.toString());

return "ajax";
}
String json = null;
@GetMapping("DTJ")
public String DTOtoJSON() {
book dto = new book("자바", 21000, "아이티에듀넷", 670);
gson = new Gson();
json = gson.toJson(dto);
System.out.println(json);

return "ajax";
}

@GetMapping("JTD")
public String JSONtoDTO() {
gson = new Gson();
book newdto = gson.fromJson(json, book.class);
System.out.println(newdto.toString());
//{"title":"자바","price":21000,"company":"아이티에듀넷","page":670}
//book [title=자바, price=21000, company=아이티에듀넷, page=670]

return "ajax";
}

@GetMapping("ATJ")
public String ArraytoJson() {
gson = new Gson();

ArrayList<book> arr = new ArrayList<book>();
book dto1 = new book("자바", 21000, "아이티에듀넷", 671);
book dto2 = new book("자바", 21000, "아이티에듀넷", 672);
book dto3 = new book("자바", 21000, "아이티에듀넷", 673);
arr.add(dto1);
arr.add(dto2);
arr.add(dto3);
//[book [title=자바, price=21000, company=아이티에듀넷, page=671], book [title=자바, price=21000, company=아이티에듀넷, page=672], book [title=자바, price=21000, company=아이티에듀넷, page=673]]

System.out.println("ArrayList 출력");
System.out.println(arr.toString());
System.out.println("--------------------");

String listjson = gson.toJson(arr);
System.out.println("json 출력");
System.out.println(listjson);
//[{"title":"자바","price":21000,"company":"아이티에듀넷","page":671},
// {"title":"자바","price":21000,"company":"아이티에듀넷","page":672},
// {"title":"자바","price":21000,"company":"아이티에듀넷","page":673}]
JAT(listjson);
return "ajax";
}

public String JAT(String json) {
ArrayList<book> list = gson.fromJson(json,
new TypeToken<ArrayList<book>>(){}.getType());
System.out.println("JAT 출력" + json);
return "ajax";
}

@GetMapping("/apijson")
public String api(Model model) {

//Step1 : 요청할 url을 문자열로 작성
String urlstr = "https://apis.data.go.kr/B552061/jaywalking/getRestJaywalking"
+ "?serviceKey=WU1ZyX6E5dmcDOHFVtUOBXU9iKyQM7IE8Xjbb%2F3h4wQ4QXMymuE0B5TvUJVyW%2FtL9ZvH0omcSly3E3497LgHtg%3D%3D&searchYearCd=2015&"
+ "siDo=11&"
+ "guGun=320&"
+ "type=json&"
+ "numOfRows=5&"
+ "pageNo=1";
// Step2 : 요청발생 객체 생성
try {
URL url = new URL(urlstr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-type", "application/json");
System.out.println("응답코드:" + conn.getResponseCode());
// Step3 : 데이터 수신
InputStreamReader is = new InputStreamReader(conn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(is);
// Strp4 : 문자열전환
String sb1 = new String();
StringBuilder sb2 = new StringBuilder();
// sb1 != null
while((sb1 = br.readLine()) != null) {
sb2.append(sb1);
}
System.out.println(sb2.toString());

}catch(Exception e) {}


return "ajax";

}

}

 

실행 결과

 

 

서버프로그램 개발: REST API

 

NAVER CLOUD PLATFORM

 

-회원가입하기 -> 로그인 -> 콘솔 탭 클릭 -> Services -> AI·NAVER API  -> Application 등록하기 -> Static Map, Geocoding  , Reverse Geocoding  체크 ->   서비스 환경 등록 -> API 가이드

-Application key: 확보하기(보안 주의!)

 

API

https://www.ncloud.com/

 

NAVER CLOUD PLATFORM

cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification

www.ncloud.com

 

1.위도와 경도 값 얻어오기: Geocoding

 

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<body>
<h2>Hello World!</h2>
<form action="js/naver" method="GET">
주소 : <input type="text" name="addr" />
<input type="submit" value="전송">
</form>
</body>
</html>

 

controller.java 

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;


import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.springmvc.domain.book;


@Controller
@RequestMapping("/js")
public class JsonController {


@GetMapping("/naver")
public String geo(@RequestParam String addr) {
String client_id = "Client ID";
String client_secret = "Client Secret";


//Step2: 요청발생 객체 생성
try {
// Step 1 : 주소 URL 인코딩
String encodedAddr = URLEncoder.encode(addr, "UTF-8");
//Step1 : url작성
String urlstr = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query="+encodedAddr;

URL url = new URL(urlstr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-api-key-id", client_id);
conn.setRequestProperty("x-ncp-apigw-api-key", client_secret);

//Step3 : 데이터 수신
int responsecode = conn.getResponseCode();
System.out.println(responsecode);
InputStreamReader is = new InputStreamReader(conn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(is);
//Step4 : 문자열전환
String line = null;
StringBuffer sb = new StringBuffer();
//line != null
while((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());

br.close();

// -------------------------------------- json객체를 데이터로 변환
//토큰은 데이터의 길이를 판단 및 인식하는 객체다. 즉, {}를 인식한다
JSONTokener tokener = new JSONTokener(sb.toString());
JSONObject obj = new JSONObject(tokener);
//System.out.println(obj.get("status"));
//JSONObject meta = obj.getJSONObject("meta");
//System.out.println(meta.get("page"));
JSONArray arr = obj.getJSONArray("addresses");
String x;
String y;
JSONObject temp = null;
//temp = (JSONObjecct) arr.getJSONObjecct(0);
for(int i=0; i<arr.length(); i++) {
temp = (JSONObject) arr.get(i);
}
x = (String)temp.get("x");
y = (String)temp.get("y");
System.out.println("위도:"+x);
System.out.println("경도:"+y);

map(x, y);

}catch(Exception e) {}

return "ajax";
}

catch(Exception e) {
}
}
}

 

실행 결과

 

 

 

2.지도 이미지 생성하기: Static Map

 

controller.java

package com.springmvc.controller;


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;


import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Date;


import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;


import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import com.springmvc.domain.book;


@Controller
@RequestMapping("/js")
public class JsonController {

@GetMapping("/naver")
public String geo(@RequestParam String addr) {
String client_id = "Client ID";
String client_secret = "Client Secret";


//Step2: 요청발생 객체 생성
try {
// Step 1 : 주소 URL 인코딩
String encodedAddr = URLEncoder.encode(addr, "UTF-8");
// Step 2 : URL 작성
String urlstr = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query="+encodedAddr;

// Step 3 : 연결 객체 생성
URL url = new URL(urlstr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("x-ncp-apigw-api-key-id", client_id);
conn.setRequestProperty("x-ncp-apigw-api-key", client_secret);


// Step 4 : 응답 코드 확인
int responseCode = conn.getResponseCode();
System.out.println("응답 코드: " + responseCode);

// Step 5 : 응답 읽기
InputStreamReader is = new InputStreamReader(conn.getInputStream(), "UTF-8");
BufferedReader br = new BufferedReader(is);

//Step4 : 문자열전환
String line = null;
StringBuffer sb = new StringBuffer();
//line != null
while((line = br.readLine()) != null) {
sb.append(line);
}
System.out.println(sb.toString());

br.close();

// -------------------------------------- json객체를 데이터로 변환
//토큰은 데이터의 길이를 판단 및 인식하는 객체다. 즉, {}를 인식한다
JSONTokener tokener = new JSONTokener(sb.toString());
JSONObject obj = new JSONObject(tokener);
//System.out.println(obj.get("status"));
//JSONObject meta = obj.getJSONObject("meta");
//System.out.println(meta.get("page"));
JSONArray arr = obj.getJSONArray("addresses");
String x;
String y;
JSONObject temp = null;
//temp = (JSONObjecct) arr.getJSONObjecct(0);
for(int i=0; i<arr.length(); i++) {
temp = (JSONObject) arr.get(i);
}
x = (String)temp.get("x");
y = (String)temp.get("y");
System.out.println("위도:"+x);
System.out.println("경도:"+y);

map(x, y, addr);

}catch(Exception e) {}

return "ajax";
}
public void map(String x, String y, String address){
String urlstr = "https://naveropenapi.apigw.ntruss.com/map-static/v2/raster?";
try {
String pos=URLEncoder.encode(x+" "+y,"UTF-8");
String url = urlstr;
url += "center=" + x + "," + y;
url += "&level=16&w=700&h=500"; // level: 확대, w,h: 크기
url += "&markers=type:t|size:mid|pos:"+pos+"|label:"+URLEncoder.encode(address, "UTF-8"); //상자 mid, pos 위치, label: 주소 검색 이름

String client_id = "Client ID";
String client_secret = "Client Secret";

URL urls = new URL(url);
HttpURLConnection conn = (HttpURLConnection) urls.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("X-NCP-APIGW-API-KEY-ID", client_id);
conn.setRequestProperty("X-NCP-APIGW-API-KEY", client_secret);


int responseCode = conn.getResponseCode();

InputStream is = conn.getInputStream();
int read = 0;
byte[] bytes = new byte[1024];


String tempName = Long.valueOf(new Date().getTime()).toString();
System.out.println("파일 이름:" + tempName);

File f = new File(tempName+".jpg");
f.createNewFile();
FileOutputStream ot = new FileOutputStream(f);


while((read=is.read(bytes)) != -1) {
ot.write(bytes,0,read);
}
ot.close();
is.close();

}
catch(Exception e) {
}
}
}

 

실행 결과

 

1742372608672.jpg