먼저 공공데이터 사이트에서 위와같이 설정하고 미리보기를 한다

미리보기 창이 뜨면 해당 주소를 모두 복사한다

주소 맨뒤에  &_type=json을 붙이고 검색해본다

 

코드 이용꿀팁

해당 코드들을

http://json.parser.online.fr/

사이트에 붙여넣어본다

 

같은 코드를 아래 사이트에도 붙여넣기하여

http://www.jsonschema2pojo.org/

package이름을 설정하고

class이름도 설정한다

나머지 설정도 아래와 같이하고

preview를 누른다

 

아래와 같이 뜨면

Air.java / Body.java 등의 파일을 만들어서 각각 붙여넣는다

 

아래와 같이 생성하고 붙여넣으면된다

 

 

Item.java파일에서 몇가지를 수정한다

 

gson이용하기

클래스 생성은 끝났다
Json자료를 gson을 이용하여 클래스에 자료를 집어 넣어서 인스턴스를 생성한다

"여기에 주소를넣으세요" 부분에 &_type=json을 붙인 주소를 넣는다

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를넣으세요");

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

HTTPURL 스트림을 연결한다

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를넣으세요");
			
			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

버퍼를 연결한다

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를넣으세요");
			
			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

StStringBuilder를 넣는다 StringBuilder는 String을 배열로 저장하여 나중에 한번에 출력하게 해준다

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를넣으세요");
			
			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
			// 4번 StringBuilder는 ArrayList<String>과 비슷하다
			// append로 String을 저장한뒤 호출하면 쭉 읽는다
			StringBuilder sb = new StringBuilder();
			String input = "";
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

while문으로 StringBuilder타입의 sb에 데이터를 넣는다

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를넣으세요");
			
			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
			// 4번 StringBuilder는 ArrayList<String>과 비슷하다
			// append로 String을 저장한뒤 호출하면 쭉 읽는다
			StringBuilder sb = new StringBuilder();
			String input = "";
			
			while ((input = br.readLine()) != null) {
				sb.append(input);
			}
			System.out.println(sb.toString());
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

gson을 이용하여 Air타입의 인스턴스 만들기

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를넣으세요");
			
			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
			// 4번 StringBuilder는 ArrayList<String>과 비슷하다
			// append로 String을 저장한뒤 호출하면 쭉 읽는다
			StringBuilder sb = new StringBuilder();
			String input = "";
			
			while ((input = br.readLine()) != null) {
				sb.append(input);
			}
			System.out.println(sb.toString());
			
			// gson을 이용하여 Air타입의 인스턴스 만들기
			Gson gson = new Gson();
			
			Air air1 = gson.fromJson(sb.toString(), Air.class);
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

아래와 같이 뜨면 성공

 

테스트

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import com.google.gson.Gson;

public class NetworkEx0201 {
	
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("여기에 주소를 입력하세요");
			
			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
			// 4번 StringBuilder는 ArrayList<String>과 비슷하다
			// append로 String을 저장한뒤 호출하면 쭉 읽는다
			StringBuilder sb = new StringBuilder();
			String input = "";
			
			while ((input = br.readLine()) != null) {
				sb.append(input);
			}
			System.out.println(sb.toString());

			// gson을 이용하여 Air타입의 인스턴스 만들기
			Gson gson = new Gson();
			
			Air air1 = gson.fromJson(sb.toString(), Air.class);
			
			// 테스트해본다
			System.out.println("항공사 : " + air1.getResponse().getBody().getItems().getItem().get(0).getAirlineNm());
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

 

 

 

 

1번 주소 객체 만들기

2번 스트림 연결

IMalformedURLException 은 IOException의 자식
IOException 은 Exception의 자식이기때문에 catch매개변수의 타입을 바꿔준다(나중에도)

 

 

3번 버퍼연결

4번 StringBuilder

package ch15;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class NetworkEx01 {
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("https://www.naver.com");

			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
			// 파일에 스트림 연결하기
			// 파일 작성기 인스턴스
			// 생성하는 순간 html 파일이 생성된다
			FileWriter fw = new FileWriter("C:\\utils\\test.html");
			
			// 4번 StringBuilder는 ArrayList<String>과 비슷하다
			// append로 String을 저장한뒤 호출하면 쭉 읽는다
			StringBuilder sb = new StringBuilder();
			String input = "";

			while ((input = br.readLine()) != null) {
				System.out.println(input);
				sb.append(input);
			}
			
			
			// toString() 모든데이터를 문자화 함
			fw.write(sb.toString());

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

네이버의 html 내용이 출력된다

 

웹서버 : 정보를 가지고 있는 컴퓨터의 특정 폴더

A가 서버고 B가 요청자면

A는 가만히 있고

B가 파일을 가져간다(A가 주는 것이 아님)

B - request

A- response
(파일이 아니라 서버 상태, 요청의 가능 불가능 여부)

정상적 request - 정상적 response 가 되는 것을 세션이 연결 되었다고 함 (인증이 된 것)
세션이 연결되어야 자료를 주고 받을 수 있다

정상적이지 않으면 세션이 아님

아이피로 접속 해당 컴퓨터에 접근이 되고 (웹서버)응용프로그램을 선택하는 것은 포트

포트는 논리적 개수는 2바이트(65536개)

포트간의 통신 - 소켓 통신 (소켓(포트)을 양쪽 끝에 달고 통신한다)

 

웹서버를 찾을때 필요한 것 : 아이피주소 + 포트

http프로토콜 :
1. 문서(.html)를 교환하겠다는 프로토콜
2. stateless (연결이 끊인다) - 부하를 줄이기 위해

소켓통신은 OS가 제공해준다 (쉘 명령어 - cmd 등의 명령어)
- stateful(연결이 끊이지 않는다) - 부하가 크다

 

OSI 7계층 : request, response 의 과정

https://blog.naver.com/ithopenanum/221502748148

 

컴퓨터 네트워크 상식! : OSI7계층 알아보기

안녕하십니까, 나셀프 입니다.인터넷이 너무도 당연하게 사용되는 우리의 삶에서한번쯤, 우리가 사용하는 ...

blog.naver.com

응용->물리 - 직렬화 - 시리얼라이제이션

물리->응용 - 역직렬화 - 역시리얼라이제이션

 

아래의 직렬화 과정은 헤더를 만들어 가는 과정

7.응용 - 프로그램 (크롬 브라우저 등) - 정보 입력 및 출력
6.표현 - 압축 및 인코딩
5.세션 - 동기화(세션 연결 여부 결정)
4.트랜스포트(전송) - 전송 방식을 설정
   - TCP-컴퓨터가 이해해야 하는 데이터라 완벽해야함 - 응답(ACK)을 받아야되서 느리다
   - UDP-데이터를 손대지않고 통과(전화 등 유실이 되도 큰문제가 없는 데이터)) - 빠르다
3.네트워크 - IP를 통해 논리적인 길을 만든다 - 통신 경로 여러 곳을 테스트해보고 빠른 길을 찾는다

(7~3)은 WAN영역(Wide Area Network)

2.데이터링크 - 인터넷에서 온 데이터가 집에 도착했을 때 어떤기기인지 찾는 것
    - 공유기가 없이 다이렉트로 랜선연결하면 필요없으나
    - 허브나 공유기가 있다면 기기마다 분배
1.물리 - 01010101010로 바뀐 데이터를 구리나 광케이블 등을 통해 흘러 나가는 것

(2~1)은 LAN영역(Local Area Network)

 

L4장비 
- 웹서버에서 접속자를 받을때
- 1~3계층을 모두 클리어하고 4계층을 가기전에 기계로 분배
- 로드밸런싱 - 서버에 접속자가 많을경우 복제된 다른서버로 접속자를 보내기

- 서버를 복제해서 다른 컴퓨터를 쓰려면 비용이 많이 드니 클라우드를 이용한다
IAAS, PAAS, SAAS 

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

well-known-port = 0~1023번

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

서킷 스위칭 - 데이터를 쪼개서 보낼 필요가 없다. / 선이 무한정 늘어난다

패킷 스위칭 - 데이터를 쪼개서 보낸다(패킷) / 쪼갠 데이터를 동시에 보낼 수 있다 / 헤더

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

헤더분석 - 파싱

-----------------------------------
사설아이피
10
192
172

 

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

MalformedURLException -> http://인데 htt 등 완성되지 않은 URL로 인한 에러

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

크롬

주소를 쳐서 네이버서버에서 html파일을 받아오고
관련된 css / js파일도 받고
연결시킨뒤 실행

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

공공데이터

api end point - > http://openapi.tago.go.kr/openapi/service/

end point + 상세주소

(부산시 진구 중앙대로 708 = 엔드포인트)
(4층 000호 = 상세주소)

?뒤의 모든 것들을 쿼리스트링이라고한다
조건을 붙이고 여러 조건을 붙이려면 &를 이용한다

주소마지막에 &_type=json

 

package ch15;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class NetworkEx02 {
	public static void main(String[] args) {

		try {
			// 1번 주소 객체 만들기
			URL url = new URL("api주소");

			// 2번 스트림 연결
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			
			// 3번 버퍼연결(문자열)
			BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
			
			// 4번 StringBuilder는 ArrayList<String>과 비슷하다
			// append로 String을 저장한뒤 호출하면 쭉 읽는다
			StringBuilder sb = new StringBuilder();
			String input = "";

			while ((input = br.readLine()) != null) {
				
				sb.append(input);
			}
			System.out.println(sb);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}
}

 

 

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

 

'낙서장' 카테고리의 다른 글

uefi로 윈도우 설치했을경우 gpt  (0) 2020.04.16
200410  (0) 2020.04.10
200406 // 접근지정자, 스트림, 버퍼, 헤더  (0) 2020.04.06
트렐로 trello  (0) 2020.03.23
200320  (0) 2020.03.20

 

 

 

일반

활용목적 - 참고자료

자료 3가지 모두체크

 

JSON 자바 컨버터

 

 

 

 

 

제이슨데이터 원형을 클래스파일 만들기

*주의* key이름을 영어로 만들어야함 (이름 -> name)

 

 

 

 

 

InputStream

여러개 입력해도 하나만 입력됨 (다 받으려면 while등을 이용해야함)

char로 캐스팅하여 출력

 

문자 스트림 (가변적이지 않다 - 길이를 미리 정해야함)

 

 

 

접근 지정자

public : 공용 ( 다른패키지 등 어디에서든지 접근 가능)

default : 같은 패키지에서만 접근 가능

private : 같은 클래스 안에서만 접근 가능 (게터 세터 등의 메서드로 접근)

protected : 같은 클래스나 자식 클래스에서만 찾을 수 있다 (상속을 받아야만 사용 가능)

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

접근 지정자

public : 공용 ( 다른패키지 등 어디에서든지 접근 가능)

default : 같은 패키지에서만 접근 가능

private : 같은 클래스 안에서만 접근 가능 (게터 세터 등의 메서드로 접근)

protected : 같은 클래스나 자식 클래스에서만 찾을 수 있다 (상속을 받아야만 사용 가능)

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

package는 꼭붙이자

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

반도체는 시그널을 받을 수 있다

같은 신호가 동시에 오면 1이 한번온건지 두번온건지구분이 안되기때문에

보레이트(시간쪼개기)를 이용해서 몇번 온지 확인

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

스트림 - 데이터를 입출력 할 때 시간으로 쪼개서 받는다

스트림은 단방향으로만 갈 수 있다

스트림은 논리적인 길(물리적인 노드가 바쁠 수 있기 때문에) 돌아서 갈 수 있다

순서가 꼬일 수 있다 -> 그것을 잡아 주는 것이 헤더

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

버퍼 - 작업 리스트

버퍼가 꽉차면 추가 리스트가 들어오는것을 기다리는 것이 버퍼링

버퍼는 꽉차면 보내진다 (자동 flush)

수동으로도 보낼 수 있다(꽉차지 않아도 보낼 수 있음)

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

헤더

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

통신 공용어  JSON

 

 

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

 

 

 

 

 

'낙서장' 카테고리의 다른 글

200410  (0) 2020.04.10
200407 // 웹서버, OSI 7계층, L4장비, 서킷 패킷 스위칭, 사설아이피, 공공데이터  (0) 2020.04.07
트렐로 trello  (0) 2020.03.23
200320  (0) 2020.03.20
200319  (0) 2020.03.19

 

메뉴내용 클래스를 만든다 
(String, int 를 같이 넣기위해서 클래스 자료형생성)

package coffeeshop;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data   // getter, setter 자동생성 (눈에 보이지 않음)
@NoArgsConstructor // 디폴트 생성자
@AllArgsConstructor // 모든 매개변수를 가진 생성자
public class MenuItem {
	private String name;
	private int price;
}

 

커피 클래스를 만든다
(String, int 를 가지기 때문에 클래스 자료형)

package coffeeshop;

import lombok.Data;

@Data // getter, setter 자동생성
public class Coffee {
	private String name;
	private int price;
	
	public Coffee(MenuItem menuItem) {
		this.name = menuItem.getName();
		this.price = menuItem.getPrice();
	}
}

 

바리스타 생성

바리스타는 메뉴내용을 입력받아서 해당 커피를 생성한다

package coffeeshop;


// 책임 : 커피생성
public class Barista {
	public Coffee 커피생성(MenuItem menuItem) {
		return new Coffee(menuItem);
	}
}

 

메뉴판 클래스를 생성

메뉴내용을 저장하고

메뉴판은 메뉴가 있는지 찾아 준다

package coffeeshop;

import java.util.ArrayList;

import lombok.Data;

// 책임 : 메뉴 선택
@Data
public class Menu {

	// 메뉴 아이템들 (컬렉션)
	private ArrayList<MenuItem> menuItems;

	public Menu(ArrayList<MenuItem> menuItems) {
		this.menuItems = menuItems;
	}

	
	// 메뉴판에 메뉴가 있는지 찾는 코드
	public MenuItem 메뉴선택(String menuName) {
		for (MenuItem menuItem : menuItems) { // foreach문은 : 뒤에 배열이 들어가고 배열의 길이만큼 돈다
			if (menuItem.getName().equals(menuName)) {
				
				// menuItems 리스트 안에 menuName와 같은 이름의 커피가 있다면 리턴
				//(리턴하면 함수를 빠져나간다)
				return menuItem;
			}
		}
		return null;
	}

}

 

소비자 생성

소비자는 가게에서 주문을 한다

-메뉴판에서 내가 고를 메뉴내용을 선택하고

-바리스타에게 커피를 만들어달라고 한다

package coffeeshop;

import lombok.Data;

// 책임 : 주문
@Data
public class Comsumer {

	public void 주문(String menuName, Menu menu, Barista barista) {
		
		// 손님 -> 메뉴판에 메시지를 보낸다 (메뉴 선택해줘)
		MenuItem menuItem = menu.메뉴선택(menuName);

		if (menuItem == null) {
			System.out.println(menuName + "은 우리 커피숍에 없습니다.");
		} else {

			// 손님 -> 바리스타에게 메시지를 보낸다 (커피 생성해줘)
			Coffee coffee = barista.커피생성(menuItem);
			System.out.println("커피를 받았습니다.");
			System.out.println(coffee.getName());
			System.out.println(coffee.getPrice());
		}
	}
}

 

메인

메인에서는 바리스타, 손님, 메뉴판을 생성한다

그리고 손님이 주문하면 모든 일들이 진행된다

package coffeeshop;

import java.util.ArrayList;

public class CoffeeApp {
	public static void main(String[] args) {

		// 바리스타, 손님
		Comsumer comsumer = new Comsumer();
		Barista barista = new Barista();
		

		// 메뉴 생성과 메뉴판 리스트에 자료를 넣는 것은 바리스타의 일이지만
		// 간략하게 하기위해서 메인에서 작성한다
		
		// 개별 메뉴 생성
		MenuItem m1 = new MenuItem("아메리카노", 1500);
		MenuItem m2 = new MenuItem("카페라떼", 2500);
		MenuItem m3 = new MenuItem("카푸치노", 4000);

		// 어레이 리스트에 자료 입력 .add
		ArrayList<MenuItem> menuItems = new ArrayList<>();
		menuItems.add(m1);
		menuItems.add(m2);
		menuItems.add(m3);

		// 어레이리스트 자료를 출력할때 .get
		System.out.println(menuItems.get(1).getName());
		System.out.println();
		
		
		// 메뉴 생성
		Menu menu = new Menu(menuItems);
		
		comsumer.주문("아메리카노", menu, barista);
	}
}

 

 

 

+ Recent posts