Operation 59

'배민 프론트 서버의 사실과 오해' 정리! (MSA, SAP, DIP, 도메인 설계, ... 등)

해당 포스팅은 [우아콘2020] 배민 프론트서버의 사실과 오해 라는 아주 멋진 강연을 해석하는 것에 중점을 둔다. Link: https://www.youtube.com/watch?v=38cmd_fYwQk 프론트 서버 프론트 서버란 사용자 전면에서 요청을 처리하는 서버를 말한다. 즉, 이렇게 앱과 통신을 직접적으로 하는 서버를 말한다. 수많은 외부 서비스의 실시간 상태가 필요 프론트 서버에서 1개의 가게를 노출하는데 필요한 외부 요청 수가 13번이었다. 하나의 요청을 보내는 데 걸리는 시간은 50ms이지만, 13번이면 650ms로 사용자에게 느리게 느낄 수 있는 속도이다. 그래서 비동기 방식의 요청이 필요했다. 비동기 요청을 하면 13개의 요청 중에서 가장 늦게 처리되는 요청의 수행 시간이 전체 요청 시간..

Network - 캐시 우회 전략 설계하기!

대규모 웹 서비스에서 캐시는 반드시 필요하다. 만약 정적 파일(HTML, CSS, Image, JavaScript, ...)을 캐시에 저장하고자 한다. 그런데 해당 파일들이 캐싱된다면 새로운 버전의 파일들을 배포했을 때 캐싱된 이전 버전의 파일을 불러오게 되지는 않을까..? 이는 어떻게 처리해야 할까? Cache-Control 토스 프론트엔드 챕터에서는 Cache-Control을 s-maxage=31536000, max-age=0로 설정한다고 한다. 왜냐하면 max-age는 브라우저 캐시의 유효 기간을 설정한다. 브라우저 캐시가 발급되면 유효 시간동안 서버에 요청을 보내지 않고 캐싱된 자원만 사용한다. 해당 브라우저 캐시는 서버 측에서 어떤 작업을 해도 지우기가 어렵다. 그래서 s-maxage만 1년으로..

Operation/Network 2022.11.05

Network - OSI 7 Layer 제대로 이해하기! (심화)

OSI7 Layer는 어떠한 의미를 가질까..? 제대로 이해해보자. 7계층으로 왜 나눌까? 책임을 분산시킬 수 있다. 특정한 곳에 이상이 생기면 해당 단계만 수정할 수 있다. 통신이 일어나는 과정을 단계별로 알 수 있다. OSI 7 계층 전체 구성도 OSI 7 계층의 전체 구성은 아래와 같다. 많은 분들은 OSI 7 계층이 책임을 분산하는 것에만 목적이 있다고 알고 있다. 하지만 각 계층은 서로 독립적인 것이 아니다. 해당 구성을 보면 1 계층으로 갈 수록 전송하는 데이터가 많은 것을 알 수 있다. 그것이 어떠한 의미를 가지는 지 생각해보자. 각 단계의 역할 아래는 각 단계가 하는 역할을 그린 것이다. 해당 과정을 이해하기 위해 HTTP 요청을 예로 들어보자. 응용 계층 (application layer..

Operation/Network 2022.10.20

HTTP 메시지(message) 원문 분석해보기!

HTTP 원문이란? 아래와 같이 HTTP 메시지 전체를 의미한다. HTTP 메시지는 어떤 구조를 가지고 있는 지 알아보자. HTTP 메시지 구조 HTTP의 Message는 아래의 구조를 가진다. 1. 시작 라인 시작 라인(start-line)은 항상 HTTP Message의 첫 번째 줄에 위치한다. 시작 라인은 요청 메시지 / 응답 메시지 인지에 따라 아래의 정보를 포함한다. 요청 메시지 - HTTP Method, 요청 대상, HTTP Version (ex. GET /background.png HTTP1.1) 응답 메시지 - HTTP Version, HTTP Status Code, Http Status Text (ex. HTTP/1.1 404 Not Found.) 요청 메시지의 경우 추가로 아래의 형식으..

Operation/Network 2022.10.20

HTTP - Cache-Control 헤더 이해하기 (+ 웹캐시 적용하기!)

수신 확인 태그 API에 캐시를 적용하면서 공부한 것을 공유하겠습니다.이해를 위해 수신확인 태그를 먼저 설명드리겠습니다.메일 수신 확인 태그란 A가 B에게 메일을 보냈을 때 B가 메일을 확인 했는 지와 언제 확인했는 지 등을 확인할 수 있게 도와주는 기능입니다.메일을 보낼 때 발송 서버에서 수신 확인 태그를 형식으로 이미지 태그를 붙여서 발송해요해당 이미지 태그의 src는 수신 확인 태그의 end-point를 넣습니다.수신 확인 태그의 end-point는 DB에 해당 메일에 대해 읽음을 표시를 해주고 빈 이미지를 반환해줍니다.현재 MailArrival (수신 확인 요청)의 응답헤더는 아래와 같습니다. 캐시와 관련된 부분은 아래 2가지입니다.cache-control: 콘텐츠에 대한 캐싱 정책을 정의할 수..

Operation/Network 2022.10.12

Network - 대칭키, 공개키(비대칭키)란 무엇인가?!(+ SSL, HTTPS)

대칭키랑 공개키의 차이를 수도 없이 봤지만, 막상 설명해야 할 때 헷갈리는 경우가 많다. 대칭키의 장단점은 무엇이고, 어떠한 단점을 해결하기 위해 공개키가 등장하게 되었는지 등을 알아보자. 해당 포스팅에서 내용을 확실하게 정리하면서 다시는 헷갈리지 않도록 하자! 개요 대칭키 암호화 방식은 암복호화에 사용하는 키가 동일한 암호화 방식을 말한다. 공개키 암호화 방식은 암복호화에 사용하는 키가 서로 다른 암호화 방식을 말한다. (비대칭키 암호화라고도 한다.) 대칭키 대칭키는 암복호화키가 동일하므로 해당 키를 아는 사람이 문서를 복호화할 수 있게 된다. 대표적인 알고리즘은으로는 DES, 3DES, AES, SEED, ARIA 등이 있다. 공개키 암호화 방식에 비해 연산 속도가 빠르다는 장점이 있지만, 키를 교환..

Operation/Network 2022.10.12

Network - 주소 창에 www.naver.com을 치면 일어나는 일 (세분화!)

지난 포스팅에서는 DNS의 동작 원리와 과정만 다뤘습니다. https://jaehoney.tistory.com/74 이번 포스팅에서는 조금 더 상세히 세분화합니다. 세분화 주소 창에 www.naver.com을 치면 일어나는 일을 아래의 과정으로 세분화할 수 있습니다. 도메인 네임 조회 (Local) 라우팅 DNS에 도메인 정보를 질의 TCP 커넥션 HTTP 요청 컨텐츠 다운로드 브라우저 렌더링 1. 도메인 네임 조회 가장 먼저 하는 것은 해당 도메인에 대한 주소가 있는 지 검사하는 것입니다. DNS 서버에 질의하기 전에 브라우저의 DNS 캐시를 확인해서 www.naver.com에 대한 정보가 있는 지 확인합니다. 해당 캐시가 존재하지 않다면 로컬의 hosts 파일에 www.naver.com에 대한 정보가..

Operation/Network 2022.10.07

OS - 세마포어(Semaphore)와 뮤텍스(Mutex) (+ Race Condition)

공유 자원에 대해 여러 프로세스가 동시에 접근하면서, 결과값에 영향을 줄 수 있는 상태를 Race Condition(경쟁 상태)이라 한다. 공유 자원에 결함이 발생할 수 있음 Race Condition이 발생하는 경우와 해결 방법 커널 작업을 수행하는 중에 인터럽트 발생 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작하는 경우 해결법 : 커널모드에서 작업을 수행하는 동안, 인터럽트를 disable 시켜 CPU 제어권을 가져가지 못하도록 한다. 프로세스가 'System Call'을 하여 커널 모드로 진입하여 작업을 수행하는 도중 문맥 교환이 발생할 때 문제점 : 프로세스1이 커널모드에서 데이터를 조작하는 도중, 시간이 초과되어 CPU 제어권이 프로세스2로 ..

Operation/OS 2022.10.03

OS - Process의 생성과 제어를 위한 System Calls!

Process의 생성과 제어를 위한 4가지 SystemCall에 대해 알아보자. Fork Wait Exec Exit Fork 새로운 Process를 생성한다. #include #include #include int main(int argc, char *argv[]) { printf("pid : %d", (int) getpid()); // pid : 29146 int rc = fork(); // 주목 if (rc < 0) { exit(1); } // (1) fork 실패 else if (rc == 0) { // (2) child 인 경우 (fork 값이 0) printf("child (pid : %d)", (int) getpid()); } else { // (3) parent case printf("par..

Operation/OS 2022.10.03

Network - TCP 통신 이해하기!

TCP 통신이란? 네트워크 통신에서 신뢰적인 연결방식 Unreliable network에서 Reliable network를 보장할 수 있도록 하는 프로토콜 Network congestion avoidance algorithm(혼잡 방지 알고리즘)을 사용한다. Reliable network Reliable network를 보장한다는 것은 아래 4가지 문제를 해결한다는 것을 의미한다. 손실: Packet이 손실될 수 있다. 순서: packet의 순서가 바뀔 수 있다. 혼잡: 네트워크가 혼잡하다. 과부하: Receiver(수신자)가 과부하 될 수 있다. TCP는 이러한 문제를 흐름 제어와 혼잡 제어 2가지 기법으로 해결한다. 흐름 제어 흐름 제어에 대한 설명이다. 흐름 제어는 송신측과 수신측의 데이터 처리 속..

Operation/Network 2022.10.03