본문 바로가기

전체 글151

[10] HTTP 메세지 전송방법 (단순,압축,분할,범위) 1. 단순 전송 Content-length 를 통해 보낼 데이터의 길이를 명시하며 한번에 보내고 한번에 받는다. ex) 1) 웹 브라우저가 서버에 GET /orderList 요청 2) 서버는 200 OK 와 Content-length: 3042 를 담고 메세지 본문에 { .... ... .... } HTML 을 담아서 웹 브라우저로 보냄. 2. 압축 전송 단순 전송과 비슷함. 다만 Content-Length 와 함께 Content-Encoding: gzip 을 헤더에 명시하고 본문에 압축된 메세지를 응답으로서 웹브라우저에 보낸다. Content-Encoding: gzip 은 예시 이며 gzip 외에도 다양한 압축 방식이 있다. 3. 분할 전송 Content-length 가 없다. 대신에 Transfer-.. 2021. 3. 29.
[9] HTTP content Negotiation (협상) HTTP 프로토콜은 웹 브라우저가 선호하는 내용을 가져오기 위해 서버와 협상할 수 있다. 서버에서 제공하는 컨텐츠가 브라우저에 지원하지 않는다면 클라이언트 입장에서 불편할 수 밖에없다. 따라서 서버에서 클라이언트가 선호하는 컨텐츠를 바탕으로 협상할 수 있는 메커니즘을 지원한다. 대표적으로 Accept 라는 이름이 붙은 HTTP Request가 해당한다. 요청시에만 사용! 1) Accept : 클라이언트가 선호하는 미디어 타입 2) Accept-Charset : 클라이언트가 선호하는 문자 인코딩 3) Accept-Encoding : 클라이언트가 선호하는 압축 인코딩 4) Accept-Language : 클라이언트가 선호하는 언어 Accept-Language를 사용하여 요청헤더 예시 GET /event Ac.. 2021. 3. 29.
[8] HTTP Redirection (3xx) - 리다이렉션 HTTP 상태코드가 3XX인 응답을 웹 브라우저에서 받는다. 응답된 메세지 헤더에 Location이 존재한다면 Location 위치로 자동 이동한다. "이동한다"의 뜻은 Location 을 다시 서버에 요청하여 해당 페이지로 이동한다는 의미다. - 영구 리다이렉션 (Permanent Redirection) 301 Moved Permanently - 원래 쓰던 uri 가 아닌 새로운 uri로 영구적으로 바뀌었을 때 사용한다. 1) GET /event 요청 2) 서버에서 301 Moved Permanently 와 Location: /new-event 를 클라이언트로 전송 3) 클라리언트에서는 GET /new-event 로 다시 서버에 요청 ( 이때 만약 본문이 존재했다면 제거될 확률 높음) 4.. 2021. 3. 29.
[7] 클라이언트에서 서버로 HTTP 데이터 전송 4가지 1. 정적 데이터 조회 쿼리 파라미터를 사용하지 않고 단순히 정적 데이터를 GET 메서드를 통해 조회 할 수 있다. 보통 정적 데이터 조회는 캐시를 사용하여 좀 더 효율적으로 조회할 수 있다. ex) GET /index.html 2. 동적 데이터 조회 쿼리 파라미터를 사용하여 클라이언트에서 원하는 정보를 조회할 수 있다. 주로 검색할 때 정렬필터를 쿼리파라미터로 사용한다. POST로 조회한다면 바디에 정렬필터를 포함하여 요청할 수 있으나 주로 GET을 사용한다. ex) GET /search?q=hello&hl=ko 3. HTML Form 을 통한 데이터 전송 Enter your name: Enter your email: 만약 POST로 데이터를 전송한다면 아래와 같은 HTTP 메세지가 생성된다. POST.. 2021. 3. 29.
[6] HTTP 메서드 - GET,POST,PUT - GET 출처 : developer.mozilla.org/en-US/docs/Web/HTTP/Methods/GET GET - HTTP | MDN GET The HTTP GET method requests a representation of the specified resource. Requests using GET should only be used to request data (they shouldn't include data). Note: Sending body/payload in a GET request may cause some existing implementations to reject developer.mozilla.org 1) get 메서드는 리소스 조회를 위한 용도로 사용된다. 2) 쿼.. 2021. 3. 29.
[5] HTTP 구조 위 그림은 클라이언트나 서버에서 HTTP/1.x 메세지로 생성하고 1.1 버전을 2버전으로 이진 바이너리 프레임으로 나뉘는 과정을 보여준다. 웹개발자가 손수 HTTP 메세지를 작성하지는 않기 때문에 브라우저나 서버 설정파일이 알아서 HTTP메세지를 작성해 준다. HTTP 요청과 응답의 구조는 서로 매우 닮았다. 그리고 엄청 심플해서 확장성도 좋다. 1. 시작라인 -요청 HTTP 메서드가 온다 ( GET, POST , PUT , .... ) HTTP 버전을 명시한다. 요청 대상의 URL을 명시한다. -응답 HTTP 버전 HTTP 상태코드 (200, 400, 500 등) 간단한 이유문구가 온다. 2. 헤더 헤더에 들어가는 내용은 아래의 템플릿을 따른다. field-name: OWS field-value OW.. 2021. 3. 20.
[4] HTTP 의 주요 특징 1. 거의 모든것을 전송 - HTTP 는 처음에 HTML을 전송하기 위해 고안한 프로토콜이였으나 이제는 모든 것을 전송할 수 있다. HTML,TEXT,IMAGE,영상등 거의 모든 형태의 데이터를 전송 할 수 있다. 2. HTTP 버전 = HTTP/1.1 , HTTP/2 , HTTP/3 1997년에 개발한 1.1 버전이 가장 많이 쓰인다고는 하나 구글이나 네이버는 1.1 프로토콜은 보이지 않는다. 실제 구글에 BTS를 검색했을 때 h3가 HTTP/3 이며 html 뿐만 아니라 스크립트,gif,png,font등 많은 데이터들이 HTTP3 프로토콜을 이용하여 전송되었다. HTTP/2 는 1.1버전의 성능을 좀더 업그레이드 한것이며 3버전은 UDP기반에서 HTTP프로토콜이 움직인다. 훨씬 빠르다. 네이버는 HT.. 2021. 3. 20.
[JAVA] XOR 연산자 ^ 에 대해 ( feat. 백준 - XOR (12844번)) XOR 연산이란? - XOR 연산이란 쉽게 말해 다르면 참을 반환한다. - 아래 예시를 보자. (1 = 참 , 0 = 거짓) 0 XOR 0 = 0 0 XOR 1 = 1 1 XOR 0 = 1 1 XOR 1 = 0 - 연산자로 표시하면 0^0 = 0 0^1 = 1 1^0 = 1 1^1 = 1 - 이진수의 하나의 비트가 아닌 여러비트로 예시를 들어보자. 십진수 13 과 십진수 8은 각각 이진수로 1101 과 1000 로 나타낼수 있다. 1 1 0 1 1 0 0 0 -------- 0 1 0 1 = 5 따라서 13 ^ 8 = 5 이다. XOR 연산 성질 ko.wikipedia.org/wiki/XOR_%EA%B5%90%EC%B2%B4_%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 XOR 교체 .. 2021. 3. 20.
[Kafka & Zookeeper 일지] Subscriber 에서 생기는 하나의 테이블에 같은 객체 쓰기(write)에 대한 동시 접근 제어 만약 FOO라는 객체에 속성이 A부터 D까지 4가지가 있다. 빨간 박스인 A가 primaryKey 이다. 먼저 카프카 클러스터에는 2개의 브로커가 떠있고 Subscriber가 2개의 토픽을 구독하고 있는 상황이다. topic1 에서 읽은 메세지인 Foo의 pk 인 A와 topic2 에서 읽은 메세지인 Foo의 pk인 A 가 다르다면 문제 되지 않는다. 하지만 pk가 같은 객체에 똑같이 쓰기를 한다면 다음과 같이 생각할 것이다. 1. topic1에서 읽어 드린 메세지에서 똑같은 pk를 가진 객체가 DB에 있는지 검사후 없다면 DB에 생성한다. 1-1. 똑같은 pk를 가진 객체가 DB에 있다면 B,C 속성을 업데이트한다. 2. topic2에서 읽어 드린 메세지에서 똑같은 pk를 가진 객체가 DB에 있는지 검.. 2021. 3. 16.