전체 글 59

[네트워크] HTTP와 HTTPS

HTTP (HyperText Transfer Protocol) 인터넷 상에서 하이퍼텍스트를 교환하기 위한 통신 규약 특징 80번 포트 사용 Application 레벨의 프로토콜 상태를 가지도 있지 않은 stateless 프로토콜 보안 이슈: 암호화가 되지 않은 텍스트를 전송하는 프로토콜이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈 존재 -> HTTPS 등장 HTTPS (HyperText Transfer Protocol Secure) HTTP에 데이터 암호화가 추가된 프로토콜로, 인터넷 상에서 정보를 암호화하는 SSL 프로토콜을 사용하여 클라이언트와 서버가 자원을 주고받을 때 사용하는 통신 규약 특징 433번 포트 사용 공개키 암호화 방식 지원 : 네트워크 상 중간에 제3자가 정보..

[네트워크] 대칭키와 공개키

대칭키 (Symmetric Key) 암호화와 복호화에 같은 대칭키(암호키)를 사용하는 알고리즘 장점 : 공개키 암호화 방식에 비해 암호화 및 복호화 속도가 빠르다. 비교적 간편하다. 단점 : 암호화 통신을 하는 사용자끼리 같은 대칭키를 공유해야만 한다. 물리적으로 직접 만나서 전달하지 않는 한, 대칭키를 전달하는 과정에서 해킹의 위험에 노출될 수 있다. 관리해야 할 키의 개수가 방대해진다. 대표 알고리즘 : DES, 3DES, AES, SEED, ARIA 등 대칭키 암호화 시나리오 A는 사전에 공유된 대칭키로 데이터를 암호화하여 B에게 전송한다. B는 같은 대칭키로 데이터를 복호화 한다. 공개키 (Public Key) 암호화와 복호화에 사용하는 암호키를 분리한 알고리즘 (공개키 + 비밀키) 공개키(Pub..

[네트워크] TCP/IP 흐름제어와 혼잡제어

TCP/IP 란? 컴퓨터와 컴퓨터 간의 LAN 혹은 WAN에서 원활한 통신을 가능하도록 하기 위한 통신 규약 TCP 통신은 네트워크 통신에서 신뢰적인 연결 방식이며, 가장 큰 특성이 신뢰성이다. 신뢰성이란 중간에 데이터가 유실되지 않는 것을 뜻하는데 이러한 신뢰성을 구성하는 대표적인 방법으로 흐름 제어, 혼잡 제어가 있는 것이다. 흐름 제어 (End to End) 송신 측과 수신 측의 데이터 처리 속도를 일치시키는 기법 수신 측이 송신 측보다 속도가 빠른 것은 문제가 되지 않지만 송신 측이 수신 측보다 빠를 때 문제가 발생하게 된다. 정지-대기 (Stop and Wait) 데이터를 담아 패킷을 보낼 때마다 확인 응답(ACK)을 받아야만 그다음 패킷을 전송할 수 있다. 장점: 구현방법이 단순하고 송신 측 ..

[네트워크] TCP 3-way & 4-way Handshake

3-way Handshake 장치들 사이에 논리적인 접속을 성립(establish) 하기 위해 탄생했다. 진행 과정 클라이언트가 서버에게 SYN 패킷을 보낸다. (sequence : x) 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보낸다. (sequence : y, ACK : x + 1) 클라이언트가 ACK(y+1)를 서버로 보내고 연결이 이루어진다. SYN: synchronize sequence numbers ACK: acknowledgment 4-way Handshake 세션을 종료하기 위해 탄생했다. 진행 과정 클라이언트가 서버에게 연결을 종료한다는 FIN 플래그를 보낸다. 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 ..

[네트워크] UDP와 TCP

앞서 OSI 7 계층에 대해 살펴보았다. 이번 시간에는 그중 전송계층 프로토콜인 UDP와 TCP에 대해 알아보도록 하자. UDP와 TCP의 탄생 배경 IP의 역할은 host to host 만을 지원하는데 host에서 host 이동은 IP로 가능하지만 하나의 장비 안에서 수많은 프로그램들이 통신하는 것은 IP 만으로 한계가 있었다. (같은 IP 주소를 사용하니까!) IP에서 오류가 발생한다면 ICMP에서 알려주기만 할 뿐 대처를 못하기 때문에 IP보다 윗단에서 처리해줘야 했다. 따라서 1번을 해결하기 위해 port 번호가 탄생하였고, 2번을 해결하기 위해 TCP & UDP가 탄생하였다. UDP vs TCP UDP (User Datagram Protocol) 데이터를 데이터 그램 단위로 처리하는 프로토콜 U..

[네트워크] OSI 7계층

OSI 7 계층이란? 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것 계층을 나누는 이유 처음 네트워크에 대한 표준이 없을 땐, 장비 간 호환이 잘 되지 않는 문제점이 있었다. (ex. LG 장비랑 SAMSUNG 장비랑 같이 못 쓰는 경우) 그래서 네트워크를 7 계층으로 분리하면서 표준을 만들게 됐는데, 이게 바로 OSI 7 계층이다. 간략하게 말하면 서로 통신할 수 있게 규칙을 만든 것! 보내는 쪽에서는 데이터를 안전하고, 정확하고, 신속하게 규격화 즉 포장하는 방법이 필요하고, 받는 쪽에서는 그 데이터를 안전하고 정확하고 신속하게 해석하는 방법이 필요한 것이다. OSI 7 계층 구조 위 그림을 보면, 응용계층에서 내려온 데이터부터 시작해서 계속 헤더가 붙는 것을 알 수 있다. 헤더..

Axios Authorization 헤더를 읽지 못할 때

헤더의 Authorization 부분에 JWT 토큰을 넣었는데 백에서 읽지 못하였다. 해답은 역시 stackoverflow에서 찾을 수 있었다. Passing headers with axios POST request I have written an Axios POST request as recommended from the npm package documentation like: var data = { 'key1': 'val1', 'key2': 'val2' } axios.post(Helper.getUserAPI(), data) .then(( stackoverflow.com axios.post(Helper.getUserAPI(), { headers: { 'Content-Type': 'application/..

삽질기록 2021.10.04

[백준] 11723 - 집합 (python)

11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net 👩🏻‍💻 코드 import sys M = int(sys.stdin.readline().rstrip()) S = set() for i in range(M): line = sys.stdin.readline().rstrip().split() command = line[0] if command == 'all': S = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20} elif command == 'empty': S = set()..

Algorithm/백준 2021.10.04

[백준] 9465 - 스티커 (python)

9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 👩🏻‍💻 코드 import sys T = int(sys.stdin.readline().rstrip()) for _ in range(T): n = int(sys.stdin.readline().rstrip()) dp = [[0 for col in range(n + 1)] for row in range(2)] possible = [[True for col in range(n + 1)] for row in range(2)] num = [list(map(int..

Algorithm/백준 2021.10.04

[프로그래머스] n진수 게임 (python)

코딩테스트 연습 - [3차] n진수 게임 N진수 게임 튜브가 활동하는 코딩 동아리에서는 전통적으로 해오는 게임이 있다. 이 게임은 여러 사람이 둥글게 앉아서 숫자를 하나씩 차례대로 말하는 게임인데, 규칙은 다음과 같다. 숫자를 0 programmers.co.kr 👩🏻‍💻 코드 def convert(n, base): T = "0123456789ABCDEF" q, r = divmod(n, base) if q == 0: return T[r] else: return convert(q, base) + T[r] def solution(n, t, m, p): MAX = t * m + 1 num_list = [] for i in range(MAX): if len(convert(i, n)) > 1: num_list +=..