티스토리 뷰
자료구조 & 알고리즘 특강 (강창민 튜터님)
스택
- LIFO(Last In First Out)의 성격을 가진 선형 자료구조
- 반복문에서 종료 조건을 지정하지 않거나 잘못된 종료조건을 지정하여 무한 루프가 발생하면 메모리의 스택영역이 쌓이고 쌓이다 터짐 → StackOverflow
- 역순의 성질을 사용해야될 때 유용한 구조
- 대표적인 기능: 픽(peek), 푸시(push), 팝(pop)
큐
- FIFO(First In First Out)의 성격을 가진 선형 자료구조
- 대표적인 기능: 픽(peek), 삽입(enqueue), 뽑기(dequeue)
버블 정렬
- 첫 번째 자료와 두 번째 자료를, 두 번째 자료와 세 번째 자료를, 세 번째와 네 번째를, … 이런 식으로 (n-1)번째 자료와 n번째 자료를 비교하여 교환하면서 자료를 정렬
- 시간 복잡도는 O(N^2)
def bubble_sort(array):
n = len(array)
for i in range(n):
for j in range(n - i - 1):
if array[j] > array[j + 1]:
array[j], array[j + 1] = array[j + 1], array[j]
return array
*파이썬의 swap 기능 (a, b = b, a)은 매우 편리하니 잘 알아두자.
선택 정렬
- index 하나마다 위치할 원소를 결정하고 그 다음 index로 넘어가는 방식으로 정렬
- 시간 복잡도는 O(N^2)
def selection_sort(array):
n = len(array)
for i in range(n - 1):
min_index = i
for j in range(n - i):
if array[i + j] < array[min_index]:
min_index = i + j
array[i], array[min_index] = array[min_index], array[i]
return array
삽입 정렬
- 전체에서 하나씩 올바른 위치에 "삽입" 하는 방식으로 정렬 → 필요할 때만 위치를 변경하므로 선택 정렬보다 효율적
- 시간 복잡도는 O(N^2), 최선의 경우엔 Ω(N)
def insertion_sort(array):
n = len(array)
for i in range(1, n):
for j in range(i):
if array[i - j - 1] > array[i - j]:
array[i - j - 1], array[i - j] = array[i - j], array[i - j - 1]
else:
break
return array
더 공부할 것들
- 정렬: 머지 정렬/힙 정렬/퀵 정렬/셸 정렬/기수 정렬
- 자료구조: 트리/트라이/그래프/해시 테이블
재귀 함수
- 재귀함수에서 가장 중요한 것: 종료 조건(Terminal condition)
- 자료구조, 알고리즘 원격 강의 2주차 숙제 '더하거나 빼거나' 문제를 재귀함수가 아닌 반복문으로 풀어보기 ↓
numbers = [1, 1, 1, 1, 1]
target_number = 3
sums = []
def get_all_combinations(numbers):
num_of_operator = 2 # +, -만 지원
for i in range(num_of_operator ** len(numbers)):
binary_value = '{:05b}'.format(i) # 0 ~ 31 => 00000 ~ 11111
operators = [int(el) for el in list(binary_value)] # *list comprehension
curr_sums = numbers[0] if operators[0] == 1 else -numbers[0]
for j in range(1, len(operators)):
if operators[j] == 1:
curr_sums += numbers[j]
else:
curr_sums -= numbers[j]
sums.append(curr_sums)
get_all_combinations(numbers)
print('sums:', sums)
print(len(sums))
*list comprehension을 잘 익히고 활용하기
*문제 푸는 법은 여러 가지가 있을 수 있음을 알기
HTTP/HTTPS 특강 (박민수 튜터님)
HTTP를 배우기 위한 기본 개념들
- IP 주소(Internet Protocol Address)
- 인터넷에 연결되어 있는 모든 장치들을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소
- 전세계적으로 보편화되어 사용되는 IP 버전은 4(IPv4)이며, 확장성과 용량 면에서 한계를 보이는 IPv4를 버전 6(IPv6) 로 대체될 것
- 도메인 네임 시스템(DNS, Domain Name System)
- 도메인 네임은 IP 주소를 사람들이 이해하기 쉽게 문자로 표현한 것을 의미
- 컴퓨터가 이해할 수 없는 도메인 네임을 IP 주소에 할당하고 이를 관리하는 시스템을 DNS라고 함
- 포트(port)
- 운영 체제 통신에서의 종단점을 의미: 목적지 호스트까지 도달한 후 어떤 프로세스(Process)에서 데이터를 받을 것인지 를 알아야 하는데 쓰이는 것이 포트번호
- 회선 통신
- 회선의 트래픽이나 이동 효율을 전혀 고려하지 않은 채 미리 정하는 회선 교환(Circuit Switching) 방식
- 데이터를 전송하는 시점의 트래픽, 혼잡도 등의 요인에 따라 효율이 달라진다는 큰 단점을 가짐
- 패킷 통신
- 미리 이동 경로를 정하지 않고, 데이터를 패킷 (Packet) 이라는 작은 단위로 나누어 전송하는 방식
- 전송 당시 가장 효율적인 경로를 설정하여 최종 목적지까지 이동
- TCP/IP
- IP: 패킷들을 가장 효율적인 방법으로 최종 목적지로 전송하기 위해 필요한 프로토콜, 패킷 전달 여부&순서 보장X
- TCP: 패킷을 안전하게 전달해주는 전송 프로토콜
- TCP/IP: IP + TCP = 인터넷 프로토콜 + 전송 제어 프로토콜
- TCP를 기반으로 한(신뢰성 통신을 하는) HTTP,FTP,SMTP 등 수 많은 프로토콜들이 IP 위에서 동작하기에 묶어서 TCP/IP라고 함
- 효율적으로 빠르게(IP) 보내면서 안전하게(TCP) 전달해주려는 목적
HTTP(HyperText Transfer Protocol)란?
- 클라이언트와 서버 간의 자원을 교환하기 위한 TCP/IP 기반 통신 프로토콜
- 단뱡향성: 서버가 먼저 응답을 보낼 수 없고 클라이언트가 요청을 보내야만 응답할 수 있음
- 비연결성: 클라이언트의 요청으로 서버와 연결된 후, 요청에 대한 응답의 데이터를 전송하면 연결을 종료
- 도청, 위장, 변조가 가능함 → HTTPS의 등장
HTTP 메소드 (Method)
주요 메소드
- GET: 보통 리소스를 조회할 때 사용하며, 서버에 전달하고 싶은 데이터는 query를 통해서 전달한다.
- POST: 주로 리소스를 새롭게 생성할 때 사용하며, 서버에 전달하고 싶은 데이터는 메시지 바디를 통해 전달한다.
- PUT: 리소스가 있으면 대체하고 리소스가 없으면 생성한다. 즉, 데이터를 덮어쓴다.
- PATCH : PUT과 마찬가지로 리소스를 수정할 때 사용하지만, PATCH는 리소스를 일부분만 변경할 때 사용한다.
- DELETE: 리소스를 제거할때 사용한다.
메소드 속성
- 안전(Safe Methods): 계속 호출해도 리소스를 변경하지 않는 특성
- 멱등(Idempotent Methods): 동일한 요청을 여러 번 보내도 한 번 보내는 것과 똑같은 결과를 갖는 것
- 캐시가능(Cacheable Methods): 응답 결과를 서버에 캐시 해서 사용해도 되는 메소드
HTTP 상태코드 (Status code)
- 1xx (Informational): 요청이 수신되어 처리중
- 2xx (Successful): 요청 정상 처리
- 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 (보통 리다이렉션처리)
- 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
- 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함
**HTTP 통신흐름 (면접 단골 주제)
- 웹 브라우저에 URL 주소 입력
- 도메인 네임 부분이 DNS 서버에 검색되어 해당하는 IP주소를 찾아옴
- HTTP 프로토콜을 사용하여 HTTP 요청 메세지를 생성하고, 생성된 메세지는 TCP 프로토콜을 사용하여 인터넷 망을 통해 해당 IP주소의 컴퓨터로 전송
- HTTP 요청 메세지를 받은 컴퓨터(서버)는 웹 페이지 URL 정보 중 PATH와 HTTP Method에 맞는 액션을 취함
- 생성된 응답 데이터는 또 다시 HTTP 프로토콜을 사용하여 HTTP 응답 메세지로 만들어지고 TCP 프로토콜을 사용하여 인터넷 망을 통해 요청했던 컴퓨터(클라이언트)로 전송
- 도착한 HTTP 응답 메세지는 웹 브라우저에 의해 브라우저 렌더링 과정을 거쳐 화면에 출력되어 사용자가 볼 수 있게 됨
HTTPS란?
- 중요 개념
- 암호화: 평문 → 암호문 / 복호화: 암호문 → 평문
- 대칭키 방식: 암호화와 복호화에 필요한 키가 동일하여 비용은 적게 들지만, 키를 전달하기가 쉽지 않다.
- 비대칭키 방식: 공개 키로 암호화하면 개인 키로만 복호화가 가능하고, 개인 키로 암호화하면 공개 키로만 복호화 할 수 있다. 보안성이 매우 뛰어나지만, 구현하기 어렵고 속도가 느리다. ex) 전자서명
- HTTPS: HTTP(HyperText Transfer Protocol)의 보안(Secured)버전, SSL/TLS 프로토콜을 사용해 HTTP를 암호화하여 주고 받을 때 쓰는 통신 프로토콜
- SSL/TLS Handshake
- 서비스를 서빙하는 서버가 CA(certificate authority, 인증 기관)로부터 CA 인증서를 발급받는다. [인증서 기간 만료까지 1회성]
- 서비스를 서빙하는 서버는 CA에 자신의 도메인 정보와 서버 측 공개 키를 보낸다.
- 인증기관은 받은 두 데이터를 자신의 개인키로 암호화한 CA 인증서를 서버로 보낸다.
- 브라우저에서 도메인을 쳐서 요청을 보내 클라이언트(브라우저)와 서버가 TCP 연결을 맺는다.
- 서버는 브라우저가 보내준 Cipher Suite 중 하나를 고르고, 자신의 SSL/TLS 프로토콜 버전을 브라우저에게 알리면서, 서버 자신의 도메인에 대한 CA 인증서를 보낸다.
- 브라우저는 브라우저에 내장된 CA의 공개 키를 이용하여 CA 인증서를 복호화하여 인증서가 유효한지 검증한 후, 서버 측의 공개 키를 얻는다.
- 브라우저는 앞으로 서버와 통신하는데 있어 암호화를 위해 사용할 대칭 키를 만들고, 그 대칭 키를 사이트 공개 키로 암호화하여 서버로 보낸다.
- 서버는 자신의 개인 키를 사용하여 암호화된 것을 복호화하여 사용자 대칭 키를 얻어 낸다.
- 이렇게 얻은 대칭 키를 활용하여 서버와 클라이언트가 서로 데이터를 안전하게 암/복호화 하면서 통신할 수 있게 된다.
'What I Learned > SpartaCodingClub' 카테고리의 다른 글
[내일배움캠프] 2022-11-28 TIL (0) | 2022.11.28 |
---|---|
[내일배움캠프] 2022.11.21. ~ 2022.11.27. WIL (0) | 2022.11.26 |
[내일배움캠프] 2022-11-24 TIL (0) | 2022.11.24 |
[내일배움캠프] 2022-11-23 TIL (0) | 2022.11.23 |
[내일배움캠프] 2022-11-22 TIL (0) | 2022.11.22 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MySQL
- 항해 플러스
- programmer
- 5597
- 25501
- 2738
- 2903
- 13241
- 2587
- 항해+
- 1269
- 20920
- 25192
- Wil
- 벡준
- SQL
- 4134
- Python
- 10807
- til
- 코육대
- 24313
- 13909
- 백준
- 24723
- 24060
- 17103
- Programmers
- 2053
- 26069
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함