Operation/Network 19

Network - HTTP 1.0과 HTTP 1.1의 차이 (지속성, 파이프라이닝, ...)

HTTP(Hyper Text Transfer Protocol)는 인터넷에서 주로 사용하는 데이터를 송수신하기 위한 프로토콜이다. HTTP의 변환점 중 가장 큰 부분이 HTTP 1.0 -> HTTP 1.1과 HTTP 1.1 -> HTTP 2.0로의 발전이다. 해당 포스팅에서는 HTTP 1.0과 HTTP 1.1의 차이에 대해서 알아보자. 1. 지속성 HTTP 1.0과 HTTP 1.1의 가장 큰 차이점은 지속성이다. 그렇다. 바로 Connection: Keep-alive 속성이다. HTTP 1.0에서 요청하고 수신할 때마다 새로운 TCP 세션을 맺어야 한다. 반면, HTTP 1.1부터는 TCP 세션을 한 번만 맺으면 여러 개의 요청을 보내고 응답을 수신할 수 있다. 결과적으로 TCP 세션을 처리하는 비용을 줄..

Operation/Network 2022.09.29

CORS 총정리!! (+ Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true 해결)

SOP (Same-Origin Policy) SOP는 같은 출처에서만 리소스를 공유할 수 있다는 정책이다. 개발을 하다가 HTTP HTTPS 간 통신에만 CORS 에러가 나는 경험이 많이 있었는데 그 이유가 SOP 정책 때문이다. 출처를 비교할 때는 URL의 구성요소 중 Protocol, Host, Port 3가지가 모두 동일해야 한다. https://www.honey.com/로 요청을 보낸다고 가정하자. https://www.honey.com/resources -> 가능 https://www.honey.com/resources?query=상품 -> 가능 http://www.honey.com/ -> 불가능 (프로토콜이 다르다) https://www.bee.com/ -> 불가능 (호스트가 다르다) 그렇다면..

Operation/Network 2022.04.22

DNS round robin 방식 장/단점과 해결방안!

DNS Load Balancing DNS 로드밸런싱은 별도의 하드웨어 장비나, 소프트웨어 없이 사용자가 DNS를 이용하여 도메인 정보를 조회하는 시점에서 트래픽을 분산하는 기법이다. DNS Load Balancing 기법 중에 Round robin 방식은 부하 분산의 대표적인 알고리즘인데, 순서대로 돌아가면서 (보통 시간 단위) 각각의 서버로 트래픽을 분산시켜서 처리하는 알고리즘이다. 즉, 사용자가 도메인 주소를 브라우저에 입력하게되면 DNS가 여러개의 IP 리스트 중에서 랜덤으로 IP를 하나 알려준다. 장단점 장점 중간 장비(로드밸런서 등) 없이도 서비스가 가능하다. 간편하다. 단점 서버의 수 만큼 공인 IP 주소가 필요하다. 서버에 장애가 발생해도 감지하지 않고 부하를 분산시킨다. 일반적인 로드밸런싱..

Operation/Network 2022.04.21

API - CSV(엑셀 파일) 내보내기 성능 개선 및 부하 테스트

Export CSV 지난 주 회사에서 CSV 형태로 친구목록을 내보내는 API를 추가하는 작업이 있었습니다. 작업 내용은 아래와 같습니다. Response Header를 명시한다. -> (Content-type: application/csv) List를 하나 생성한다. List에 CSV의 헤더(첫 행)을 삽입한다. 친구 목록 테이블이 5개의 다른 테이블과 LEFT JOIN해서 결과를 받는다. 조회 결과를 record 단위로 순회하면서 CSV에 맞는 스펙으로 변환하고 List에 삽입한다. 결과를 반환한다. 중요한 점은 개발해야 하는 CSV 구조 Tables 구조가 많이 달라서 데이터 가공 작업을 했어야 했습니다. 예를 들면, 아래와 같은 CSV 스펙이 필요하다고 가정합시다. 집 주소 회사 주소 배송 주소 ..

Operation/Network 2022.04.16

HTTP - 청크 인코딩(Transfer-encoding: chunked) [Size가 큰 테이블, 이미지 등 내려주기]

Transfer-encoding: chunked Chunked 인코딩 전송방식은 HTTP 1.1에서 사용가능한 스트리밍 데이터 전송 방식입니다. 청크 전송 방식의 특징은 아래와 같습니다. 데이터를 여러 개의 청크 단위로 쪼개서 순차적으로 전송 각 청크는 독립적으로 송수신 됨 각 청크의 앞에는 해당 청크의 Size(16진수)를 설정해서 보냄 길이가 0인 청크가 수신되면 전송이 종료됨 청크 전송 방식의 장점 큰 데이터 전송에도 HTTP 연결이 중간에 끊어지지 않게 유지할 수 있음. Content-Length가 필요 없음 -> 크기가 가변적인 데이터 전송에 유리 전체 컨텐츠를 생성할 때까지 대기하지 않음 HTTP 1.1부터는 기본적으로 연결 유지(Connection: keep-alive)가 활성화되어있습니다...

Operation/Network 2022.03.28

메일 서비스 작동 원리 (with 구글, 네이버 등)

메일 작동 원리메일을 전송하고 전송 받을 때 사용하는 프로토콜은 크게 3가지로 나눌 수 있습니다.SMTP: 메일을 송신할 때 사용하는 프로토콜TCP/IP 호스트 사이의 메일을 전달할 때 사용됨POP3: 메일을 전송받을 때 사용하는 프로토콜POP3는 로컬에서 수정, 삭제를 해도 메일 서버에는 변화가 없음.메일을 수신할 때는 주로 POP3, IMAP을 사용.IMAP: 메일을 전송받을 때 사용되는 또 하나의 프로토콜IMAP은 POP3의 단점의 비동기성을 보완하기 위한 방식각 로컬마다 데이터가 다르지 않고 어떤 디바이스에서 메일을 열든 동일하게 동기화하는 방식복잡하다는 단점이 있음.기본 메일 서버의 동작 구조는 아래와 같습니다. abc@abc.com 사용자가 메일서버에게 MUA(Mail user agent ex..

Operation/Network 2022.03.05

Docker Apache에 HTTPS(SSL) 적용하기 [+HTTP, HTTPS 간 쿠키 전송안될 때]

상황 로컬(Docker)에 올린 기존 시스템에서 다른 API(다른 도메인)로 Request 시 withCredential을 true로 설정해줘야 함 이후, 요청은 성공을 했지만 Cookie(세션 정보)가 전달이 안되는 현상이 발생했음. 로컬에 올린 시스템은 HTTP고 요청을 받는 API는 HTTPS이기 때문에 발생 -> 규정 변경으로 HTTP, HTTPS 간 통신은 쿠키를 전송할 수 없음 (원래는 HTTPS -> HTTP만 안됬음) 따라서, 로컬의 Apache에 인증서를 설치해줘야 했음. 소개 이번 포스팅에서 사용하는 방법은 자가 서명된 인증서를 발급해서 사용하기 때문에 도메인으로 등록하지 않아도 상관없고, 로컬(개발) 환경이어도 상관없습니다. 컨테이너를 생성할 때도 포트를 HTTP, HTTPS 두 개 ..

Operation/Network 2022.03.02

DNS (Domain Name System) 동작 원리, 과정

DNS 란? DNS는 브라우저의 주소창에 도메인 네임 (예를 들면, www.naver.com)을 입력하고 접속을 할때, 그 도메인 네임을 이용해서 주소를 가져오는 것을 DNS라고 합니다. 그래서 DNS를 이용해서 특정한 사이트 네임으로 우리가 접근하면, 해당 주소를 가져와서 그 주소에 있는 문서에 편리하게 접근할 수 있습니다. 그럼 DNS는 어떤식으로 동작할까요? DNS 동작 원리 1. 브라우저(크롬 등)의 DNS 캐시를 확인해서, www.naver.com 의 정보가 있는지 확인 2. 해당 정보가 있으면 가져옴. 없으면 다음 단계 3. hosts 파일에 www.naver.com 의 정보가 있는지 확인 4. 해당 정보가 있으면 가져옴. 없으면 다음 단계 5. PC에 저장된 Local DNS가 url에 입력..

Operation/Network 2021.09.15

L4 / L7 로드밸런서 차이 (Load balancer)

로드밸런서는 트래픽을 받아서 여러 대의 서버에 분산시키는 하드웨어 또는 소프트웨어 입니다. 부하 분산에는 L4 Load Balancer와 L7 Load Balancer가 많이 사용됩니다. L4부터 Port를 다룰 수 있기 때문입니다. 한 대의 서버의 각각의 포트에 여러개의 서비스들을 운영하기 위해서 L4 Layer 위에서 작동하는 Load Balancer가 필요해진 것입니다. 이전에는 비싼 L4 하드웨어 장비를 주로 사용했지만, 현재는 MSA의 등장 등으로 L7 로드밸런싱도 많이 사용하고, AWS ELB, NginX, HaProxy등 다양한 소프트웨어를 사용하고 있습니다. 그렇다면 L4 Load Balancer와 L7 Load Balancer는 어떤 차이점이 있을까요? L4 Load Balancer는 I..

Operation/Network 2021.08.28