목록분류 전체보기 (131)
세리프 따라잡기
HTTP & HTTPS HTTP(HyperText Transfer Protocol)인터넷 상에서 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재하는데, 이런 보안 문제를 해결해주는 프로토콜이 'HTTPS' HTTPS(HyperText Transfer Protocol Secure)인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 쓰는 통신 규약 HTTPS는 텍스트를 암호화한다. (공개키 암호화 방식으로!) : 공개키 설명 HTTPS 통신 흐름 애플리케이션 서버(A)를 만드는 기업은 HTTPS를 적용하기 위해 공개키와 개인키를 만든다. 신뢰할 수 있는 ..
※ 책에서 모르는 단어 정리 및 보충 설명 11.1 클라이언트-서버 프로그래밍 모델 클라이언트 서버 모델(client–server model)은 서비스 요청자인 클라이언트와 서비스 자원의 제공자인 서버 간에 작업을 분리해주는 분산 애플리케이션 구조이자 네트워크 아키텍처를 나타낸다. 웹 시스템도 확장된 '클라이언트 서버 시스템'으로 분류되나, 일반적으로는 클라이언트 서버 시스템이라고 하면 웹 시스템이 나오기 이전의, 사용자 PC에는 클라이언트가 설치되어 화면을 처리하고 서버에서는 자료를 처리하는 시스템을 일컫는다. #위키 클라이언트 = 서비스를 사용하는 사용자 또는 사용자이 단말기를 가리킴 서버 = 서비스르르 제공하는 컴퓨터, 다수의 클라이언트를 위해 존재하기에 일반적으로 매우 큰 용량과 성능을 가지고 있..
#참고한 강의 1. 두 대의 컴퓨터가 통신하려면? 모든 파일과 프로그램은 0과 1의 나열, 결국 0과 1만 주고 받으면 ok 1 = +5v의 전기를 전선으로, 0 = -5v의 전기를 전선으로 흘려보내면 0과 1의 전송이 가능할 것 - 물리 계층(physical layer)이란? = 0과 1의 나열을 아날로그 신호로 바꾸어 전선으로 흘려 보내고(encoding), 아날로그 신호가 들어오면 0과 1의 나열로 해석하여(decoding), 물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고받을 수 있게 해주는 모듈(module)을 말한다. [module은 우리가 프로그래밍을 할 때 만드는 함수와 같다고 생각하면 된다.] - 인코딩(encoding) / 디코딩(decoding) 0101 0101이란 데이터..
기본적인 파이썬의 for문은 다음과 같다. n = [1,2,3,4,5] for i in range(len(n)): print(i) #0,1,2,3,4 for ? in range가 기본적인 쓰임이다. for in 반복문은 iterable한 객체만 가능하다 == list, dictionary, set, string, tuple, bytes 알고리즘을 풀다보면 for문을 다음과 같이 사용하는 경우를 볼 수 있다. n = [1,2,3,4,5] for i in enumerate(n): print(i) #(0,1)(1,2)(2,3)(3,4)(4,5) for ? in enumerate 문법인데 enumerate는 인덱스 번호와 컬렉션의 원소를 tuple형태로 반환한다. n=[1,2,3,4,5] for i,v in e..
#전체적으로 참고한 사이트 - OSI 7 layer = #이전에 정리했던 포스터 참고! - TCP/IP 4계층 = #참고한 강의 인터넷 프로토콜 스위트(internet protocol suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 집합 → tcp/ip 4계층 모델 혹은 osi 7계층 모델로 설명한다. tcp/ip 4계층 모델 위주로 설명하자면, 네트워크에서 사용되는 통신 프로토콜의 집합으로 계층들은 프로토콜의 네트워킹 범위에 따라 네 개의 추상화 계층으로 구성 tcp/ip 계층은 4개의 계층을 갖고 있으며, osi 계층과 많이 비교한다 두 계층의 다른 점은 그림처럼, TCP/IP 계층과 달리 OSI 계층은 애플리케이션 계층을 세 개로, 링크 계층을 데이터 링크 계층, 물리..
9.9.14 분리 가용 리스트(segregated free list) 단일 연결 블록 리스트를 사용하는 할당기는 한 개의 블록을 할당하는 데 가용 블록의 수에 비례하는 시간이 필요 → 시간을 줄이는 대표적인 방법인 "분리 저장장치(segregated storage)"는 다수의 가용 리스트를 유지하며, 각 리스트는 거의 동일한 크기의 블록들을 저장. 기본 아이디어는 모든 가능한 블록 크기를 크기 클래스(size class)라고 하는 동일 클래스의 집합으로 분리하는 것 ※크기 클래스 정의하는 방법 1. 블록 크기를 2의 제곱으로 나누기 2. 크기가 작은 블록들은 자신의 크기 클래스에 할당, 큰 블록들은 2의 제곱으로 분리 할당기는 가용 리스트의 배열을 관리, 크기 클래스마다 크기가 증가하는 순서로 한 개의 ..
9.9.13 명시적 가용 리스트 블록 할당 시간이 전체 힙 블록의 수에 비례하기 때문에 '묵시적 가용 리스트'는 범용 할당기에는 적합하지 않다. (비록 힙 블록의 수가 사전에 알려져 있고, 작고 특수한 경우에는 좋을 수도 있으나) → 이보다 더 좋은 방법은 가용 블록들을 일종의 명시적 자료구조로 구성하는 것. 가용 블록의 본체는 프로그램에서 필요하지 않기에 이 자료구조를 구현하는 포인터들은 가용 블록의 본체 내에 저장될 수 있음. ex. 힙은 그림처럼 가용 블록 내에 pred(이전)와 succ(다음) 포인터를 포함하는 이중 연결 가용 리스트로 구성될 수 있음. 묵시적 가용 리스트 대신 이중 연결 리스트를 사용하면 first fit 할당 시간을 전체 블록 수에 비례하는 것에서 가용 블록의 수에 비례하는 것..
heap list에서 first word를 unused padding으로 하는 이유(pdf 880) (1 word=4bytes 전제) implicit free list에서 prologue block이 1 word-size header와 1 word-size footer로 총 2 words를 차지한다. 만약 그 다음 블록이 온다면, 1 word-size header가 오게 돼서 실제 payload 앞에 3 words만 존재하게 된다. 그러면 payload를 가리키는 pointer의 주소값 12가 되어 8의 배수가 될 수 없다. 이걸 맞춰주기 위해서 1 word size unused padding이 heap의 맨 앞에 붙게 되는 것이다. #참고한 블로그 즉, 경계가 헤더와 풋터 사이에 있어야 하는데, 헤더와..
9.9 동적 메모리 할당 가상 메모리 영역을 저수준의 mmap & munmap함수를 이용해 생성/삭제할 수 있지만, 추가적인 가상메모리를 런타임에 획득할 필요가 있을 때, "동적 메모리 할당기를 사용하는 것을 좀 더 편리하고 호환성이 좋다고 생각" 동적 메모리 할당기는 힙(heap) 프로세스의 가상메모리 영역을 관리. → 일반화의 오류를 범하지 않는 한도에서 힙이 미초기화된 데이터 영역 직후에 시작해서 위쪽(높은 주소 방향)으로 커지는 무요구 메모리 영역이라고 가정 → 커널은 힙의 꼭대기를 가리키는 변수 brk(break)를 사용 할당기는 두 개의 기본 유형이 가능. 두 유형 모두 응용이 명시적으로 블록을 할당하도록 요구하며, 어떤 엔트리가 할당된 블록을 반환하기 위해 무엇이 사용되어야 하는지에 차이가 ..
류석영 교수님의 코드리뷰 강의 간단 정리 [중요하다고 생각하는 부분만!] 1. 코드 리뷰가 필요한 이유 - 다른 사람이 읽기 쉽게 코드를 개선할 수 있다. - 리뷰어가 남긴 의견으로부터 배울 수 있다. - 결함을 줄일 수 있다. - coding decision에 대한 개발 역사를 보관할 수 있다. 새로 들어온 사람이 커밋을 보고 이해할 수 있게 된다. - 일관적인 코딩 스타일을 유지할 수 있게 되면서 refactoring과 debugging에 큰 도움이 된다. - 협력심을 기를 수 있다. ∴ 제일 좋은 코드 리뷰 "이 코드는 ~한 이유로 ~하게 바꾸는 게 좋습니다." + 참고한 링크 2. 코드 리뷰의 단점 - 거칠고 무례한 의견으로 인해 의지를 떨어뜨릴 수 있다. - 리뷰가 늦어지면 개발 기간이 늦춰진다..