본문 바로가기

KOSTA : 클라우드 네이티브 애플리케이션 개발 전문가 양성과정

05/14 23일차 JSONParse, JDBC

728x90

1.전날 Summurize

- MVN에서 라이브러리 다운받음

- 외부 라이브러리 설치

- Java build Path에 등록하기

- 프로젝트를 MVN 프로젝트로 바꾸기

- MVN 프로젝트에서는 pom.xml에서 외부 라이브러리를 관리함 --> 이것이 스프링 레거시입니다.

- 스프링 부트로 가면 jdk와 라이브러리 호환성을 자동으로 맞춰줍니다.

 

- VO(Value Object) 만들기 

- 변수는 private으로 메서드는 public으로

- 변수는 property라고 부릅니다. 룸북을 쓰게 되면 property만 남게 됩니다(이건 나중에 계속)

- 이것이 entity class라고 부릅니다.

- 생성자로 한번에 집어넣고, toString을 오버라이디하여 한번에 값을 확인합니다.

 

- JSON 외부 라이브러리를 이용하였습니다.

- java에는 {키 = 값} JSON은 {"키" : "값"} 표기법이 다릅니다.

- REST에 통신규격이 http입니다. web에서만 가능합니다. 남의 데이터를 사용한다면 거의 XML, JSON 형식으로 받게 됩니다. JSON은 키값만 안바뀌었다면 빼서 쓸 수 있습니다. 

- REST는 남의 서비스를 갖다쓰는것입니다. web에서 데이터를 담을 수 있는 것이 java에서 중요합니다. json을 자바객체로 변경하기 위해 외부 라이브러리를 이용합니다.

 

- 스프링에서는 Jackson 라이브러리를 사용합니다.

- 스프링은 중앙관리로 이루어진다. 데이터형태를 팩토리타입으로 관리합니다. 팩토리 개념으로 레퍼런스를 자바타입 형태로 관리를 하므로 스프링에서 사용합니다.

- 스프링 3.0이후로 메세지 컨버터로

- 스프링 4.0이후로 타입 레퍼런스를 이용해서 JSON을 인식하여 JSON 컨버팅을 자동적으로 합니다.

 

- POJO는 Plan of Java Object입니다.

- JSON을 객체로..객체를 글자로 바꾸는 연습을 하였습니다.

- 글자를 객체로 객체를 글자로 시간이 남으면  Factory config...JavaType

 

2.Jackson 팩토리 개념

 

 

3.REST API 이용하기 

 

JSONParseKakao

- json-simple-1.1.1. jar 사용

/*
-------------------------------------------------
Kakao REST : nickname, id, count 파싱
   - ref : https://cocoabba.tistory.com/16
-------------------------------------------------
{  "elements":[{"profile_nickname":"사랑하는 아내♥",    
				"profile_thumbnail_image":"",    
				"id":"149..xxx...378",    
				"uuid":"Q3JAcU..xxxxxx.Up6T3sd",    
				"favorite":true
				} ],  
	"total_count":1,  
	"after_url":null,
	"result_id":"zbnYtN-...xxxxx...pdPgCA",
	"favorite_count":1
} 
*/

public class JSONParseKakao{
	public static void main(String[] args){
    
    // --------------------------------------------------------------
		// JSON  <--> JAVA객체 변환 API
		//  - json-simple-1.1.1.jar (google)	
		//--------------------------------------------------------------
    
    
    	String str = "{\"elements\":[{\"profile_nickname\":\"사랑하는 아내♥\",
        				\"profile_thumbnail_image\":\"\",
                        \"id\":\"149..xxx...378\",
                        \"uuid\":\"Q3JAcU..xxxxxx.Up6T3sd\",
                        \"favorite\":true}],
                        \"total_count\":1,
                        \"after_url\":null,
                        \"result_id\":\"zbnYtN-...xxxxx...pdPgCA\",
                        \"favorite_count\":1}";
        JSONParser p = new JSONParser();
        try{
        	JSONObject obj = (JSONObject)p.parse(jsonstr);
            JSONArray elementsArray = (JSONArray) obj.get("elements");
            JSONObject elementMap = (JSONObject)elementsArray.get(0);
            
            String nick = (String)elementMap.get("profile_nickname");
            String id = (String)elementMap.get("id");
            String uuid = (String)elementMap.get("uuid");
            long totalCount = (long)obj.get("total_count");
        } catch(ParseException e){
        	System.out.println("str--->map convert 에러");
            e.printStackTrace();
        }            
                        
    }
}

 

- jackson-databind-2.1.x.jar (Apache2.0)

// --------------------------------------------------------------
		// JSON  <--> JAVA객체 변환 API
		//  - jackson-databind-2.1.x.jar (Apache2.0)	
		//--------------------------------------------------------------
/*
{  "elements":[{"profile_nickname":"사랑하는 아내♥",    
				"profile_thumbnail_image":"",    
				"id":"149..xxx...378",    
				"uuid":"Q3JAcU..xxxxxx.Up6T3sd",    
				"favorite":true
				} ],  
	"total_count":1,  
	"after_url":null,
	"result_id":"zbnYtN-...xxxxx...pdPgCA",
	"favorite_count":1
} 
*/

public JsonparseTest{
	public static void main(String[] args){
    	String jsonStr = "{\"elements\":[{\"profile_nickname\":\"사랑하는 아내♥\",
        								  \"profile_thumbnail_image\":\"\",
                                          \"id\":\"149..xxx...378\",
                                          \"uuid\":\"Q3JAcU..xxxxxx.Up6T3sd\",
                                          \"favorite\":true}],
                                          \"total_count\":1,
                                          \"after_url\":null,
                                          \"result_id\":\"zbnYtN-...xxxxx...pdPgCA\",
                                          \"favorite_count\":1}";
                                          
       ObjectMapper mapper = new ObjectMapper();
       try{
       
       	HashMap map = mapper.readValue(jsonStr, HashMap.class);
        ArrayList<HashMap<String,object>> elementList = (ArrayList<HashMap<String,Object>>) map.get("elements");
        
        String nick = (String)elementList.get(0).get("profile_nickname");
        String id = (String)elementList.get(0).get("id");
        String uuid = (String)elementList.get(0).get("uuid");
        Integer totalCount = (Integer)map.get("total_count");
       } catch(JsonMappingException e){
       	e.printStackTrace();
       } catch(JsonProcessingException e){
       	e.printStackTrace();
       }
    }
}

 

- jackson + Entity

// --------------------------------------------------------------
// jackson + Entity
// --------------------------------------------------------------

public class JacksonParseTest{
	public static void main(String[] args){
    	
        String jsonStr = "{\"elements\":[{\"profile_nickname\":\"사랑하는 아내♥\",
        								  \"profile_thumbnail_image\":\"\",
                                          \"id\":\"149..xxx...378\",
                                          \"uuid\":\"Q3JAcU..xxxxxx.Up6T3sd\",
                                          \"favorite\":true}],
                                          \"total_count\":1,
                                          \"after_url\":null,
                                          \"result_id\":\"zbnYtN-...xxxxx...pdPgCA\",
                                          \"favorite_count\":1}";
        
        ObjectMapper mapper = new ObjectMapper();
        
        try{
        	Dava dvo = mapper.readValue(jsonStr, DataVO.class);
            Element[] elements = dvo.getElenets();
            for(element e: elements){
            	String nick = e.getProfile_nickname();
                String uuid = e.getUuid();
                String id = e. getId();
                int total = e.getTotal();
            }
        } catch(JsonMappingException e){
        	e.printStackTrace();
        } catch(JsonProcessingException e){
        	e.printStackTrace();
        }
        
    }
}

class dataVO{
	private Element[] elements;
    private int total;
    private String afterUrl;
    private String resultId;
    private int favoriteCount;
    
    dataVO(Element[] elements, int total, String afterUrl, String resultId, int favoriteCount){
    	this.elements = elements;
        this.total = total;
        this.afterUrl = afterUrl;
        this.resultId = resultId;
        this favoriteCount = favoriteCount;
    }
    
}

class Element{
	private String profile_nickname;
    private String profile_image;
    private String id;
    private String uuid;
    private boolean favorite;
    
    Element(String nick, String img, String id, String uuid, boolean favor){
    	this.profile_nickname = nick;
        this.profile_image = img;
        this.id = id;
        this.uuid = uuid;
        this.favorite = favor;
    }
}

 

JSONParseGmap

public class JSONParseGmap{
	
    public static void main(String[] args){
    	
        String jsonStr = "{\r\n"
				+ "  \"name\": \"KOSTA\",\r\n"
				+ "  \"id\": \"u0001\",\r\n"
				+ "  \"displayName\": {\r\n"
				+ "  	\"desc\": \"this is kosta\",\r\n"
				+ "  	\"code\": \"g01\"\r\n"
				+ "  },\r\n"
				+ "  \"types\": [\"type1\",\"type2\"],\r\n"
				+ "  \"primaryType\": \"ptype\"\r\n"
				+ "}";
                
                
          ObjectMapper mapper = new ObjectMapper();
          
          try{
          	HashMap<String,Object> map = mapper.readValue(jsonStr,HashMap.class);
            String id = (String)map.get("id");
            ArrayList<String> type = (ArrayList<String>)map.get("type");
            
            HashMap<String,String> subMap = (HashMap<String,String>)map.get("displayName");
            String code = (String)subMap.get("code");
            
            GmapVO vo = mapper.readValue(jsonStr,GmapVO.class);
            
            String id = vo.getId();
            List<String> types = vo.getTypes();
            DisplayNameVO subVO = vo.getDisplayName();
            String code = subVO.getCode();
          }
        
    } catch(JsonMappingException e){
    	e.printStackTrace;
    } catch(JsonProcessingException e){
    	e.printStackTrace;
    }
    
}

class GmapVO {
	private String name;
    private String id;
    private DisplayNameVO displayName;
    private List<String> type;
    private String primaryType;
    
    GmapVO(){}
    
    GmapVO(String name, String id, DisplayNameVO displayName, List<String> type, String primaryType){
    	this.name = name;
        this.id = id;
        this.DisplayNameVO = DisplayNameVO;
        this.type = type;
        this.primaryType = primaryType;
    }
}

class DisplayNameVO{
	private String desc;
    private String code;
    
    DisplayNameVO(){}
    
    DisplayNameVO(String desc, String code){
    	this.desc = desc;
        this.code = code;
    }
}

 

왜 ClassCastException이 발생했을까?

 

 

4.웹프로그래밍 설계 및 실습

 

JDBC

- api 묶음이다. 그 안에 driver가 들어있다.

- 자바로 만들어진 데이터베이스 조작 인터페이스입니다.

- RDBMS를 위한 일관된 인터페이스를 제공하는 API 집합입니다.

- 프로그래머가 SQL 요구를 만드는데 사용할, 일련의 객체지향 프로그램의 클래스들을 정의합니다.

- 어떤 데이터베이스를 사용하더라도 JDBC 드라이버만 제공된다면 코드 수정 없이 바로 적용 가능합니다.

- java.sql 패키지를 씁니다. 

- 오라클에서 주는 드라이버를 이클립스에 집어넣습니다. 

 

JDBC Structure

- DB와 연결이 드라이버가 할 일입니다.

 

JDBC Driver Type

 

JDBC API IN Java

 

JDBC class workflow

 

JDBCTest

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement

public class JDBCTest{
	public static void main(String[] args){
    	// 객체사용후 close하기위해 지역변수로 선언
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        
        try{
        	// 오라클 드라이버를 사용하겠다는 의미
        	Class.forName("oracle.jdbc.driver.OracleDriver");
            // 자신의 주소값에 아이디와 비밀번호로 접속함
            conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","it","0000");
            
            stmt = conn.createStatement();
            //쿼리문 작성
            String sql = "SELECT * FROM emp";
            
            //SELECT문이니 executeQuery으로 사용
            rs = stmt.executeQuery(sql);
            
            while(rs.next()){
            	int empNo = rs.getInt("EMPNO");
                System.out.println(empNo);
            	}
            } catch(ClassNotFoundException e){
            	e.printStackTrace();
            } catch(SQLException e){
            	e.printStackTrace();
            } finally{
            	try{
                	rs.close();
                    stmt.close();
                    conn.close();
                } catch(SQLException e){
                	e.printStackTrace();
                }
            }
        }
    }
}