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
![]() |
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
-국가에서 보유하고 있는 다양한 분야의 데이터를 활용할 수 있음
-공공데이터를 사용하기 위해서는 다음과 같은 절차가 필요함
1)회원가입
2)필요 데이터 검색
3)데이터 활용신청
-"한국도로교통공단_무단횡단 교통사고 다발지역 정보"라고 검색하고 오픈 API 탭 클릭 -> 활용신청 버튼을 클릭하여 데이터 활용 신청을 할 수 있음
-일반인증키를 사용하여 데이터를 요청할 수 있음(복사하여 붙여넣기)
-type 부분에 json으로 입력하기
![]() |
-미리보기를 통하여 전달되는 데이터를 미리볼 수 있음
-샘플데이터는 요청 URL을 만들때 사용되는 값이며 이 값을 이용하여 특정 위치의 값을 얻을 수 있음
-페이지 위쪽에 상세설명을 클릭하면 API의 파라미터 관련된 정보를 알 수 있음
cf) <html> Controller
↓ 요청 server → server
<a> → server
<form>
![]() |
-검색창에 json viwer 검색 -> 미리보기를 선택하면 위의 화면처럼 데이터가 나타남
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
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
![]() |
'벡엔드 웹프로그래밍 > Spring' 카테고리의 다른 글
Spring 웹 프로그래밍 93일차 (25/3/31) (0) | 2025.03.31 |
---|---|
Spring 웹 프로그래밍 89일차 (25/3/25) (0) | 2025.03.25 |
Spring 웹 프로그래밍 87일차 (25/3/21) (0) | 2025.03.21 |
Spring 웹 프로그래밍 84일차 (25/3/18) (0) | 2025.03.18 |
Spring 웹 프로그래밍 77일차 (25/3/7) (0) | 2025.03.07 |