본문 바로가기
개발/TIL

23.10.11_TIL

by 욤냠냠냠 2023. 10. 12.

산지 5개월이 지난 새 책 HTTP 완벽 가이드 1장을 드디어 다 읽엇다...

공부 내용

웹 서버는 HTTP 프로토콜로 의사소통 하기때문에 HTTP 서버라고도 불린다.

클라이언트가 요청을 보내면 서버가 응답을 해줌.

웹 서버는 웹 리소스를 관리 하고, 웹 리소스는 웹 콘텐츠의 원천이다.

웹 서버는 모든 HTTP 객체 데이터에 MIME 타입이라는 데이터 포맷 라벨을 붙인다.

웹 브라우저는 서버로 부터 객체를 돌려받을때 MIME 타입을 확인하여 다룰 수 있는 데이터인지 확인한다.

 

웹 서버 리소스는 각자 이름을 가지고 있다. 그래서 클라이언트는 관심있는 리소스를 지목할 수 있다.

서버 리소스 이름은 자원 식별자 (URI) 로 불린다. 인터넷의 우편물 주소.

URL은 통합 자원 식별자라고 한다.리소스 식별자의 가장 흔한 형태이다.

URL은 특정 서버의 한 리소스에 대한 구체적인 위치를 나타낸다. 

https:// <- 스킴이라고 하고 리소스에 접근하기 위해 사용되는 프로토콜을 뜻한다.

www.naver.com< - 서버의 인터넷 주소.

/blog/abcd < - 웹 서버의 리소스를 가르킨다.

 

HTTP는 HTTP 메서드라는 여러 가지 종류의 요청 명령을 지원. ( POST, GET, PUT, DELETE, HEAD)

요청 메시지는 하나 이상의 메서드를 가진다.

HTTP 응답 메시지는 상태 코도와 함꼐 반환된다. (200, 302 ,404)

 

HTTP 는 애플리케이션 계층 프로토콜 이다. 네트워크 통신의 핵심적인 세부사항에 대해서는 신경쓰지 않고

인터넷 전송 프로토콜인 TCP/IP 에게 맡긴다.

1. 오류 없는 데이터 전송

2. 보낸 데이터 순서대로 도착.

3. 조각나지 않는 데이터 스트림(언제든 어느크기든 보낼 수 있다)

 

TCP/IP는 각 네트워크와 하드웨어 특성을 숨기고 어떤 종류의 컴퓨터나 네트워크든 서로 신뢰성 있는 의사소통 가능케함.

 

HTTP가 서버에 요청 메시지를 보내기전에 서버와 클라이언트 사이에 TCP/IP 커넥션이 맺어져야 한다.

1. 웹 브라우저가 서버의 URL에서 호스트명 추출

2. 추출된 호스트명을 IP로 변환(DNS)

3. URL 에서 포트번호 추출

4. 웹 브라우저와 서버 커넥션을 맺음

5. 웹 브라우저가 서버에 요청

6. 서버는 응답.

7. 커넥션이 닫히면 , 웹 브라우저는 문서를 보여준다.

 

웹의 구성요소에는 프락시, 캐시, 게이트웨이, 터널, 에이전트 가 있다.

 

프락시 - 서버와 클라이언트 사이에서 클라이언트의 모든 HTTP 요청을 받아 대신 서버에 전달.(프락시는 클라이언트와 서버 사이에서 트래픽 전달)

 

캐시 - 웹 캐시와 프락시 캐시는 자신을 거쳐가는 문서중 자주 찾는것의 사본을 저장. 클라이언트가 다음에 같은 문서를 찾으면 그 캐시가 갖고 있는 사본을 준다. 서버보다 가까운 근처의 캐시에서 전달하기때문에 빠르게 다운받는다.

 

게이트 웨이 - 다른 서버들의 중개자 역할. 주로 HTTP 트랙픽을 다른 프로토콜로 변환하기 위해 사용.

HTTP 클라이언트 <- HTTP -> HTTP/FTP 게이트 웨이 <- FTP -> FTP 서버

게이트 웨이는 자신이 리소스를 가지고 있는 진짜 서버인척 하기 떄문에 클라이언트는 게이트웨이인지 모름.

 

터널 - 두 커넥션 사이에서 raw 데이터를 열어보지 않고 그대로 전달.

대표적인 예로 암호화된 SSL 트래픽을 HTTP 커넥션으로 전송함으로서 웹 트래픽만 허용가능한 사내 방화벽을 통과 시키는 것.

 

에이전트 - 사용자를 위해 HTTP 요청을 만들어주는 클라이언트 프로그램. 웹 요청을 만드는 애플리케이션은 뭐든 HTTP 에이전트이다.

 

BufferedReader 와 BufferedWriter의 사용법

사용시 보조스트림과 함께 선언해줘야 함.

BufferedReader br = new BufferedReader(InputSteamReader(System.in);

BufferedWriter br = new BufferedWriter(OutputSteamWriter(System.out);

 

br.readLine()은 리턴값의 타입이 String으로 고정. 그리고 한 행을 기준으로 데이터 출력.

bw.write()는 System.out.println()과 비슷하지만 자동 줄 바꿈기능이 없다.

BufferedWrite는 출력후 버퍼에 남아있는 모든 데이터를 출력하는 bw.flush()를 실행하고 

bw.close() 를 이용해 버퍼를 닫아야 한다. 

'개발 > TIL' 카테고리의 다른 글

23.03.25_TIL  (0) 2023.03.27
23.03.23_TIL  (0) 2023.03.23
23.03.22_TIL  (0) 2023.03.23
23.03.20_TIL  (0) 2023.03.21