37. http 프로토콜 통신

Jan 12, 2024
37. http 프로토콜 통신
 

웹에서 파일 다운로드

💡
네트워크에서 데이터를 읽는 방법도 스트림을 네트워크에 연결하여 데이터를 읽는다. 자바에서 네트워크 프로그래밍을 위한 패키지는 java.net이다 이 패키지의 클래스 중에서 java.net.URL 클래스가 있는데 이 클래스는 우리의 프로그램과 인터넷 상의 원격 컴퓨터가 가지고 있는 자원을 연결한다. 물론 원격 컴퓨터가 자우너에 접급하는 것을 허락한다는 전제하에다. URL 객체를 생성하였다고 해서 바로 원격 컴퓨터와 연결되는 것은 아니다. URLConnection클래스를 사용하여서 URL과 응용 프로그램 사이의 통신 링크를 생성해야됨. URLConnection클래스가 성공적으로 생성되면 URL이 지정하는 자원에서 데이터를 읽고 쓸 수 있다. 만약 원격 파일을 읽을 필요가 있으면 파일에 연결된 스트림을 열어야한다.
예제
package ex17; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; //HTTP연결을 통하여 인터넷에서 파일 읽기 public class URLConnectionReader { public static void main(String[] args) throws IOException { //URL 클래스의 객체 생성 URL site = new URL("https://www.naver.com/"); //URL 객채를 이용해서 연결하기 위하여 URLConnection 객체 생성 URLConnection url = site.openConnection(); //URLConnection 객체의 getInputStream()메소드를 호출하여서 입력 스트림을 얻기 BufferedReader in = new BufferedReader( new InputStreamReader(url.getInputStream()) ); String inLine; //스트림에서 데이터 읽기 while ((inLine = in.readLine()) != null) System.out.println(inLine); in.close(); } }
 
 
프로토콜
프로토콜
💡
여러 단체가 모여 거대한 하나의 단체로 뭉쳐 질 때는 한 기업의 프로토콜이 기준점이 되어서 바디에 확장자 내용이 담김 마임타입은 http바디가 있을 때 의미가있다. 주는 데이터를 서버쪽에서 적어줘야지 클라이언트쪽에서 제데로 파싱한다.
 
💡
마임타입 종류
application/json
 
appication/x-www-from-urlencoded
notion image
 
text/html
 
text/plain
 
💡
java script object 표기법 = json
notion image
json 생김 { "name": "홍길동", "email": "honggildong@example.com", "age": 30, "isMember": true, "hobbies": ["독서", "여행", "음악감상"], "address": { "city": "서울", "country": "대한민국" } }
중괄호({})는 객체를 나타냅니다.
대괄호([])는 배열을 나타냅니다.
배열 안에는 여러 값이 들어갈 수 있습니다.콜론(:)은 키와 값의 구분자로 사용됩니다.
각 키-값 쌍은 쉼표(,)로 구분됩니다.
문자열은 쌍따옴표("")로 둘러싸입니다.
백틱은 여러개의 문자열 앞에 백틱을 붙이는데,
오브젝트가 아니기 때문에 컴퓨터가 파싱을 못한다.
무조건 통신에서는 문자열이 전송 되는것이다.
모든 언어는 자기만에 오브젝트 문법을 가지고있다.
자바는 문법이 class다.
자바 스크립트는 let을쓴다.
자바 스크립트가 자바로 데이터 전송을 하게 되면 문자열로 출력이 된다.
즉 파싱을 하지 못한다.
 

컴퓨터 통신에서 발생 하는 문제

💡
파싱 할때 2가지 문제
1.자바 스크립트끼리 통신할때 문자열이 교환 되니까 오브젝트로 변환을 시켜야 된다.
2.자바랑 자바 스크립트끼리 즉 다른 언어 끼리 통신할 때 데이터를 이해하지 못하는데 문법이 다르기 때문이다. 이 2가지 문제를 해결해 주는 것이 json 라이브러리 이다.
 
제이슨 라이브러리 문법
제이슨 오브젝트를 자바로 옮겨 줄때 디폴트 생성자를 만든다.(디폴트 생성자는 만들지 않으면 자바에서 저절로 만들어 놓음 눈에보이지 않을 뿐)
 
예제
package com.metacoding.myhttp; import com.fasterxml.jackson.databind.ObjectMapper; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class MyApp2 { public static void main(String[] args) { try { URL url = new URL("https://jsonplaceholder.typicode.com/posts/1"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); BufferedReader br = new BufferedReader( new InputStreamReader(conn.getInputStream()) ); String download = ""; while (true) { String line = br.readLine(); if (line == null) break; download = download + line; } // System.out.println(download); ObjectMapper om = new ObjectMapper();//제이슨 라이브러리 Post post = om.readValue(download, Post.class); System.out.println(post.getTitle()); } catch (IOException e) { throw new RuntimeException(e); } } }
package com.metacoding.myhttp; public class Post { private int userId; private int id; private String title; private String body; public Post(){ } public Post(int userId, int id, String title, String body) { this.userId = userId; this.id = id; this.title = title; this.body = body; } public int getUserId() { return userId; } public int getId() { return id; } public String getTitle() { return title; } public String getBody() { return body; } }
 
MYAPP2 만들기 호스트 만들어서 데이터 옮기기

 
 
💡
json 공용어를 자기의 타입을 바꿔주는 역할을 해주는 것이 json이다. sml도 json역할을 해주는 아이로 써 json이전에 사용했는데 json으로 바뀐 이유는 경량이 제일 가볍기 때문에 용량이 제일 적게 든다.(모든 언어의 object를 하나) json을 내 오브젝트로 바꾸는것(파싱)
class User { int id = 1; String username = "ssar"; //자바 } <user> <id>1</id> <username>"ssar"</username> // sml </user> { "id":1, "username":"ssar" //제이슨 }
 
 
Share article
RSSPowered by inblog