일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 타입 챌린지
- HTTP
- BFS
- 알고리즘
- 수학
- TCP
- 타입스크립트
- 소켓
- 프로그래머스
- 쉬운 문제
- 자바스크립트
- Nestjs
- 레벨 1
- Crawling
- 크롤링
- 그래프
- Node.js
- HTTP 완벽 가이드
- 가천대
- 백준
- dp
- typescript
- socket
- Algorithm
- dfs
- 문자열
- javascript
- ip
- type challenge
- 프로그래머스 레벨 2
- Today
- Total
목록전체 글 (499)
kakasoo
이 글은 성공과 실패를 결정하는 1%의 네트워크 원리를 읽고, 스터디한 결과를 토대로 작성했다. 1장의 내용은 브라우저에 URL을 검색하게 될 때 URL을 해독하는 것부터 시작된다. 이 책의 내용은 브라우저에 검색을 했을 때, 네트워크가 어떻게 동작하는지를 실제 순서대로 담고 있다. 나중에 이 순서에 대해 자세히 설명할 수 있는지 스스로 물어보자. HTTP 리퀘스트 메시지를 작성한다. 웹 서버의 IP 주소를 DNS 서버에 조회한다. 전 세계의 DNS 서버가 연대한다. 프로토콜 스택에 미시지 송신을 의뢰한다. 01. HTTP 리퀘스트 메시지를 작성한다 1. 탐험 여행은 URL 입력부터 시작한다. 브라우저는 몇 개의 클라이언트 기능을 겸비한 복합적인 클라이언트 소프트웨어 ⇒ 어떤 기능을 사용하여 데이터에 접..
콘텐츠 리소스를 저장, 중개, 관리하는 일을 통틀어 웹 호스팅이라고 한다. 호스팅은 웹 서버의 가장 중요한 기능으로, 콘텐츠를 저장해서 제공하고 관련 로그에 접근하거나 관리하는 데에는 모두 서버가 필요하다. 하드웨어나 소프트웨어를 직접 관리하기 어렵다면 호스팅 서비스나 호스팅 업체가 필요할 것이다. 18.1 호스팅 서비스 각 개인이 자체 컴퓨터 하드웨어를 구매하고 망을 구축하는 비용이 크기 때문에, 전문적으로 호스팅만 해주는 사업이 생겨났다. 18.1.1 간단한 예 : 전용 호스팅 ( 생략 ) 18.2 가상 호스팅 대부분의 시간동안 놀고 있을 사이트를 위해 전용 웹 서버를 가지는 것은 낭비기 때문에, 많은 웹 호스팅 업자는 컴퓨터 한 대를 여러 고객이 공유하게 해서 저렴한 호스팅 서비스를 제공한다. 이를..
예를 들어 우리 사이트의 주 고객이 영어 사용자와 프랑스어 사용자 양측이 존재한다면, 우리는 사용자에 맞게 콘텐츠를 제공해줘야 한다. HTTP는 이런 판단이 가능하게 내용협상이란 방법을 제공한다. 이 방법은 하나의 URL이 여러 가지 리소스 중 적합한 것을 제공하도록 할 수 있다. 여기서는 서로 다른 버전을 배리언트( Variant ) 라고 부른다. 17.1 내용 협상 기법 서버가 클라이언트에게 맞는 리소스인지 판단하는 세 가지 방법이 있다. 다음 단에서 클라이언트 주도 기법과 서버 주도 기법에 대해 자세히 설명하고, 여기에는 투명 하나를 간략히 설명한다. 투명 주로 프락시 캐시와 같이 투명한 중간 장치를 거쳐 대신 협상한다. 속도는 위 두 가지의 중간 쯤 되지만, 투명 협상의 경우 어떻게 하는지에 대한..
HTTP는 여러 언어와 문자로 된 국제 문서들의 처리 및 전송을 지원해야 한다. 16.1 국제적인 콘텐츠를 다루기 위한 HTTP 지원 엔터티 본문은 그저 비트일 뿐이다. 이 비트들을 어떻게 해석할 것인지를 서버와 클라이언트가 의사소통해야 한다. 서버는 클라이언트에게 HTTP Content-Type charset 매개변수와 Content-Language 헤더를 통해서 알려준다. 클라이언트는 서버에게 Accept-Charset과 Accept-Language 헤더를 보내서 자신이 해석 가능한 언어를 말한다. Charset은 iso 인코딩을 말하는 것이고, Language는 인간의 언어를 의미하는데, 콜론으로 구분하여 q=0.8과 같이 선호도를 표현할 수 있다. 16.2 문자집합과 HTTP 16.2.1 차셋(C..
HTTP는 다음을 보장한다. 객체는 올바르게 식별된다. ( Content-Type, Content-Language 등 헤더를 이용한다. ) 객체는 올바르게 압축이 풀린다. ( Content-Length, Content-Encoding 등 헤더를 이용한다. ) 객체는 항상 최신이다. ( 엔터티 검사, 캐시 만료 제어 ) 사용자의 요구를 만족한다. ( 내용 협상을 위한 Accept 관련 헤더를 이용한다. ) 네트워크 사이를 빠르고 효율적으로 이동한다. 조작되지 않고 온전하게 ( 안전하게 ) 도착할 것이다. 15.1 메시지는 컨테이너, 엔터티는 화물 HTTP를 컨테이너라고 한다면 HTTP 엔터티는 메시지의 실질적인 화물이다. 엔터티는 엔터티 헤더와 엔터티 본문으로 나뉜다. HTTP/1.1의 10가지 주요 엔터..
14.1 HTTP를 안전하게 만들기 HTTP 보안 버전은 효율적이고 이식성이 좋아야 하고 관리가 쉬워야 하며 현실 세계의 변화에 대한 적응력이 좋아야 한다. ⇒ 이를 위해서 아래의 것이 필요하다. 서버 인증 : 클라이언트가 상대 서버가 진짜임을 인식할 수 있어야 한다. 클라이언트 인증 : 서버가 상대 클라이언트가 진짜임을 인식할 수 있어야 한다. 무결성 : 클라이언트와 서버는 그들의 데이터가 위조되는 것으로부터 안전해야 한다. 암호화 : 클라이언트와 서버는 도청에 대한 걱정 없이 서로 대화할 수 있어야 한다. ( SSL ) 효율 : 저렴한 클라이언트나 서버도 이용할 수 있도록 알고리즘은 충분히 빨라야 한다. 편재성 : 프로토콜은 거의 모든 클라이언트와 서버에서 지원되어야 한다. 관리상 확장성 : 누구든 ..
12.1 인증 인증은 당신이 누구인지 증명하는 것이다. 완벽한 인증은 없다. 다만 인증을 통해 당신이 누군지 판단하는 도움은 될 수 있다. 12.1.1 HTTP의 인증요구/응답 프레임워크 HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다. 순서는 요청, 인증요구, 인가, 성공의 단계로 이루어진다. 맨 처음 요청은, 클라이언트가 서버 측에 정보를 요청한다는 의미이다. 이 때에는 아무런 헤더도 필요없고, 그저 GET 메서드를 했다는 의미이다. 다음부터가 인증 요구이다. 인증 요구는 서버가 사용자에게 사용자 이름과 비밀번호를 제공하라는 지시다. 이 때, 401 Unauthorized 상태 정보와 함께 요청을 반려한다. 이 때 WWW-Authenticate 헤더에 각 영역에 대..
프로그래밍 언어의 구분 컴파일 : 소스코드를 실행하기에 앞서 기계어로 번역하는 행위 컴파일러 : 컴파일을 수행하는 소프트웨어 인터프리터 언어 : 프로그램을 한 줄 마다 기계어로 번역하는 프로그래밍 언어 인터프리터 : 프로그램을 번역해서 실행시키는 소프트웨어 프로그래밍 언어의 유형 절차식 언어 : 절차를 순서대로 작성하는 언어 객체지향 언어 : 처리와 관련된 데이터를 하나로 묶어 객체 단위로 관리하는 언어 함수형 언어 : 프로그램을 함수를 조합하여 구현하는 언어 논리형 언어 : 데이터 사이의 관계와 논리를 설명해나가는 언어 자바스크립트의 특징 인터프리터 언어 웹 브라우저에는 자바스크립트 코드를 해석하는 JIT (Just In Time)컴파일러가 내장되어있다. 동적 프로토타입 기반 객체지향 언어이다. → 클..
웹 서버는 서로 다른 수천 개의 클라이언트와 동시에 통신한다. 서버는 모든 요청을 처리할 뿐만 아니라, 특정 클라이언트를 추적해야 할 수도 있다. 이 장은 서버가 통신 대상을 식별하는 기술에 대해 설명한다. 11.1 개별 접촉 HTTP는 익명으로 사용한다. 또한 연결에 대한 정보를 가지지 않으며 매 요청이 일회성에 독립적이다. 즉 무상태성을 지닌다. 다만 웹 서버는, 이런 HTTP 속에서도 약간의 정보를 이용할 수가 있다. 현대의 웹 사이트들은 개인화된 서비스를 제공하고 싶어 한다. 네트워크로 연결된 사용자에 대해 더 많은 것을 알고 싶어하고 사용자의 정보를 저장해두려고 한다. 개별 인사 개개인에게 맞춰져 있는 것 같은 느낌을 주기 위해 사용자에게 특화된 환영 메시지나 페이지를 만든다. 사용자 맞춤 추천..
아무래도 멤버십은 글을 쓰는 게 조심스러워서 이제야 올린다. 우리 팀은 자유 프로젝트였기 때문에, 우리가 직접 주제를 정하고 프로젝트를 시작했다. 그래서 이 주제에 대해서는, 굳이 부스트캠프의 허가가 없어도 글을 써도 될 거 같다. 우리가 어떤 프로젝트를 했고, 그 과정이 어땠는지 말해보고 싶다. 나중에는 기술적인 내용까지 전부 다 이야기해보고 싶다. 1. 공부해서 나 준다 우리는 사실 벤딩머신 팀이었다. 나는 미리 팀원들을 초대하고, 사람들과 이야기를 나눌 준비를 했다. 빨리 친해질수록, 더 자연스럽게 이야기가 가능할수록 능률이 높아질 거란 생각이었다. 그리고 월요일이 되고, 멘토링 전에 팀 빌딩을 시작했다. 아직 우리 주제에 대한 자세한 소개를 듣지는 못했지만, 미리 준비하면 분명 도움이 될 거란 생..
3주가 모두 끝난 오늘, 이제 서로의 회고만을 남긴 시점에 혼자서 글을 쓴다. 3주는 짧았지만, 그럼에도 충분히 여러 가지를 배울 수 있을 만큼 긴 시간이었다, 데일리 회고를 하지 않은 게 아쉬울 정도이다. 내가 이 시간동안 배운 게 뭐가 있는지, 나중에 전체적인 회고를 해볼 생각이지만, 위의 이유로 인해 중간 회고를 작성해본다. 1. 협업은 어떻게 하는가 (with iOS) iOS와 협업을 해야 했다. 그래서 iOS가 필요로 하는 API를 만드는 데에 매우 많은 시간을 투자했다. API가 뭐지 하던 시간들은 이제 끝났다. 지금까지는 내가 필요한 걸 만드는 시간이었다. 내가 필요해서 내가 만드는 것을 API라고 부르기엔 너무 해야 할 게 많았다. API는 개발을 용이하게 하고, 또 사용자를 편리하게 하기..
7.7 캐시 처리 단계 HTTP GET 메시지를 하나 보내면 캐시 처리는 일곱 가지 절차에 따라 이루어진다. 요청 받기 : 캐시는 요청 메시지를 읽는다. 파싱 : 캐시는 메시지를 파싱하여 URL과 헤더들을 추출한다. 검색 : 캐시는 로컬 복사본이 있는지 검사하고, 사본이 없다면 사본을 받아온다. 신선도 검사 : 캐시된 사본을 찾았다면 최신의 것이 맞는지 검사한다. 아니라면 서버로부터 변경사항을 확인한다. 응답 생성 : 응답을 생성한다. 발송 : 클라이언트에게 응답을 돌려준다. 로깅 : 선택적으로 로그 파일에 트랜잭션을 서술한 로그를 남긴다. 7.7.1 단계 1 : 요청 받기 캐시는 네트워크 커넥션에서의 활동을 감지, 데이터를 읽는다. 고성능 캐시는 동시에 여러 커넥션으로부터 데이터를 읽고 메시지 전체가 ..