본문 바로가기

[네트워크]HTTP 헤더 HTTP 헤더 From 사용자의 이메일 주소(사용자 식별 가능) 악의적인 서버가 스팸메일을 보내는 경우가 있어 보통 브라우저는 포함하지 않지만 로봇이나 스파이더는 이메일 주소를 포함시킴 User-agent 브라우저의 이름과 버전 정보, 종종 운영체제 Referer 사용자가 현재 페이지로 유입하게 한 웹페이지의 URL을 가르킴 Authorization 사용자의 이름과 비밀번호(식별을 위함) Client-ip 같은 사용자가 다른 컴퓨터를 사용하는 경우 식별 불가 NAT 장비 사용시 식별 불가. 프록시 사용시 식별 불가 ISP가 동적으로 IP를 할당하기 때문에 IP로 식별이 어려움 X-Forwarded-For 프록시 사용 등의 경우 원본 IP주소를 보존하려는 시도 Cookie 브라우저 요청->서버 Set-co..
[네트워크] 라우팅(Routing)과 라우터(router) 줄글 요약 네트워크 통신을 위해서는 MAC주소와 IP주소가 필요합니다. 상대방의 IP주소는 DNS서버를 통해 얻어오겠지만 MAC주소는 어떻게 알아올까요? LAN에서는 브로드캐스트를 이용해 ARP로 알아낼 수 있습니다. 따라서 스위치와 허브로만 통신이 가능합니다. 하지만 WAN에서는 무작정 브로드캐스트로 통신을 하면 비효율적이기 때문에 라우터(네트워크간 패킷을 전달)를 통해 라우팅(라우터를 거치며 최종 목적지를 찾아가는 것)과정이 필요합니다. 이때 라우터는 라우팅테이블에 수신처의 네트워크, 중계지점 등에 대한 정보를 저장해놓고 라우터끼리의 통신을 통해 정보를 최신화합니다. 라우팅테이블에 정보가 없는 경우 디폴트 라우터에게 네트워크 정보를 물어보게됩니다. 따라서 상대방 IP주소는 고정되어 있지만 MAC주소의..
[보안]공통키, 공개키, 대칭키, 비밀키, 전자서명, 전자인증서 공통키(대칭 암호) A(요청), B(응답) 암호화와 복호화에 같은 키를 사용하는 방식 문제점 : 공통키 전달 과정에서 해커 X가 키를 훔쳐볼수 있음(키 배송의 문제), 키관리문제(각각 요청마다 공통키를 만들어야함) 공개키(비대칭 암호) A(요청), B(응답) 암호화와 복호화에 다른 키를 사용한느 방식 암호화(공개키)와 복호화(비밀키)로 구분 장점 : 공개키는 인터넷 상에 공개해도 되기 때문에 불특정 다수와 데이터를 교환하기 좋음 단점 1: 공개키의 신뢰도 문제(해커 X가 B가 A에게 공개키를 보낼 때 자신이 만든 X-공개키로 바꿔치기함 -> A가 X-공개키로 암호화한 데이터를 B에게 보낼때 다시 가로채 X-비밀키로 복호화 -> B의 공개키로 암호화 해서 B로 전송), man in the middle 공격..
버블정렬, 선택정렬, 삽입정렬, 힙정렬, 퀵정렬, 병합정렬 버블 정렬 햔 방향으로 인접한 두 개의 숫자를 비교해서 교환하는 작업을 반복 시간 복잡도 O(n2), 공간 복잡도 O(n) def insert_sort(x): for i in range(1, len(x)): j = i - 1 key = x[i] while x[j] > key and j >= 0: x[j+1] = x[j] j = j - 1 x[j+1] = key return x선택 정렬 수열 중에서 최솟값을 검색해서 왼쪽 끝에 있는 숫자와 교체하는 작업 반복 시간 복잡도 O(n2), 공간 복잡도 O(n) def selectionSort(x): length = len(x) for i in range(length-1): indexMin = i for j in range(i+1, length): if x[ind..
[최단경로]플로이드 와샬, 다익스트라, 최소 신장트리(프림, 크루스칼) 그래프, 경로, 최단경로 그래프 : 정점과 간선으로 이루어진 자료구조 경로 : 간선들을 순서대로 나열한 것 최단경로 : 시작 정점부터 목표 정점까지의 가중치의 합이 최소가 되는 경로 다익스트라 알고리즘 양의 가중치를 가진 최단 경로 탐색에서 사용하는 알고리즘 각 지점에서 최단 경로를 찾아가는 그리디한 방법이자 최단 경로의 부분경로 역시 최단 경로인 DP 기반의 알고리즘 음의 가중치가 있는 경우 그리디한 접근으로 무한루프에 빠질 가능성이 있어 이때는 플로이드 와샬 사용 한 정점에서 모든 정점으로의 최단 경로를 구할 때 예시, 프로그래머스 배달 문제 import heapq from collections import defaultdict def di(dic, start, N, K) : cnt = 0 dista..
원격 접속 SSH와 VNC 차이 아무 생각없이 SSH와 VNC를 썼는데 기술 용어였다. 간단히 정리 SSH(secure shell) 원격지의 컴퓨터를 명령어로 제어하기 위한 프로토콜 명령 프롬프트에서 명령을 내리면 그 내용을 그대로 서버로 전달, 명령에 대한 결과가 다시 텍스트로 표시됨 서버에서 작업하는 것과 같이 작업할 수 있음 패스워드 인증 클라이언트 접속요청, 서버 공개키 전송 난수를 사용한 공유키 생성, 공유키를 공개키로 암호화하여 서버에 전송 서버는 개인키로 복호화 클라이언트는 공유키로 암호화한 패스워드 전달, 서버는 사용자 인증 사용자가 인증되면 통신 공개 키 인증 클라이언트 측에서 공개 키를 만든 후에 그 키를 미리 접속할 서버에 등록해 두어 인증에 사용 클라이언트 접속 요청, 서버에서 난수를 이용한 공유 키 생성, 공유키..
유닉스의 탄생 유닉스의 탄생 누군가의 추천으로 읽게되었는데 생각보다 재미있었다. 유닉스, MAC OS, 우분투, 리눅스의 차이가 뭔지 대충만 알고 잘 몰랐는데 멀틱스부터 시작하는 유닉스의 탄생기를 보고나니 어느정도 이해가 됐다. 간단한 미니쉘을 만드는 프로젝트를 진행중인데 파이프와 리다이렉션을 같이 구현하는 것도 생각보다 어렵다. 나야 있는 명령어를 따라 구현하는거지만 처음 명령어를 개발할 때는 없는 개념을 코드로 구현했던 것일텐데 새삼 유닉스의 개발자가 대단해 보인다. 유닉스의 네이밍이나 awk 명령어의 유래(개발자 세 명의 이니셜) 등도 재미있다. 유닉스의 파일시스템 관리의 특징 중 하나가 계층적 파일시스템이라고 하는데 지금 우리에게는 너무도 당연하지만 예전에는 깊이를 제한하는 경우도 있었다고 한다. 예를들면 폴더..
[CS] 웹 페이지를 빠르게 로딩하는 방법-작성중 내용 추가 필요(210710) 웹 페이지 로딩 보통 스크린은 1초에 화면을 60번 그림, 60fps(frame per second)인 것인데 따라서 브라우저 역시 60fps를 유지해야 웹페이지가 매끄럽게 보임 만약 브라우저가 1초에 60프레임을 그려내지 못하게 되면, 웹페이지에서 스크롤을 내린다거나 드래그를 할 때 버벅이는 현상 발생(Jank) 최적화(Optimization)가 필요 네트워크 요청에 빠르게 응답하자 리다이렉션을 피할 것 : 응답 시간이 지연됨 meta-refresh 사용금지 ?? CDN(content delivery network)을 사용할 것 ?? 동시 커넥션 수를 최소화 할 것 ?? 커넥션을 재활용할 것(Connection : keep alive) 자원을 최소한의 크기로 내려받자 gz..