프로그래머스 - 프론트엔드 미니 데브코스
async, await
promise는 코드의 흐름과 실행 순서가 일치하지 않는다는 게 가독성을 어렵게 만듦
async, await를 이용하여 비동기 코드도 동기 코드처럼 보이게 짤 수 있다. (실행은 비동기로)
async function
async 키워드가 붙은 함수는 실행 결과를 Promise로 감싼다.
fetch
- 비동기 http 요청을 좀 더 쓰기 편하게 해주는 API
- XMLHTTPRequest를 대체한다.
- Promise 기반으로 동작한다.
response body를 json으로 바꿔주어야 함
혹은 text()로 불러와서 조회 시 JSON.parse()
blob은 이미지 처리하는 데 쓸 수 있다.
fetch api는 HTTP error가 발생하더라도 reject되지 않는다.
네트워크 에러나 요청이 완료되지 못한 경우에만 reject된다.
response의 status code나 ok를 체크해주는 것이 좋다.
fetch의 두번째 인자로 옵션을 줄 수 있다.
김기일 교수님 - 네트워크
Layering
계층 구조 : 각 임무들이 계층구조에서 주어진 순서대로 수행
- 하나의 계층은 자신의 고유 역할을 수행한다.
- 자신과 인접한 다른 계층에 무엇인가를 요청하거나 이에 응답한다.
=> 그 밖의 타 계층에 대해서는 신경 쓸 필요가 없다.
중간은 전송시스템
전송시스템은 7계층이 모두 다 필요 없다. 3개만 필요
Layering 장점
단순함
- 설계하기 쉬움
- 유지하기 쉬움
- 기능에 대한 중복정의 피함
- 표준화가 가능하기 때문에 여러 회사들의 장비의 호환이 가능해짐
- 새로운 기술이 들어왔을 때 추가하기가 쉽다.
OSI 7 Layer 모델
물리, 데이터링크, 네트워크, 전송, 세션, 표현, 응용 계층으로 이루어짐
7계층은 서로 간에 독립적이고, 어느 한 계층의 변경이 다른 계층에 영향을 미치지 않는다.
peer to peer(대등 대 대등) 프로세스
- 해당 계층에서 통신하는 각 시스템의 프로세스
- 시스템 간의 통신은 적절한 프로토콜을 사용하는 peer-to-peer 프로세스이다.
encapsulation / decapsulation
error check
물리 계층
- 데이터를 전송될 수 있는 형태(신호)로 변환
데이터링크 계층
- 이웃하고 있는 노드들 간의 데이터 전송
- 주소지정 : 다음 차례로 접근할 노드의 물리주소를 포함하는 기능
- 접근제어
- 흐름제어
- 오류제어
- 동기화
네트워크 계층
- 스위칭 & 라우팅
- IP주소를 가지고 목적지를 찾아가는 기능
전송 계층
- 포트번호
응용 계층
TCP/IP 프로토콜
네트워크, 인터넷, 전송, 응용의 4계층으로 구성된다.
TCP/IP의 응용 계층은 OSI의 응용 계층, 표현 계층, 세션 계층과 대응
어떤 프로토콜을 탑재하여 어떻게 쓸지를 정의
데이터링크 계층
- 같은 네트워크 안에 있는 이웃 노드들 간에 데이터를 보낼 수 있는 기능을 정의
- 이더넷
- WIFI
- 오류제어, 흐름제어, 접근제어의 역할
네트워크 계층
- 라우팅 기능
- IP 프로토콜 : 주소 체계를 관리하고, 데이터그램을 정의하며, 전송에 필요한 경로를 결정
- TCP/IP 프로토콜에는 IP와 ARP, ICMP, IGMP가 있다.
반드시 헤더에 주소를 붙여야 한다. 주소를 가지고 내건지 아닌지를 판단할 수 있기 때문
전송 계층
- TCP, UDP프로토콜 사용
- 두 호스트 간의 데이터 전송을 담당, 신뢰성 있는 전송 기능 제공
- TCP : 패킷이 절대 손실되지 않는다.
응용 계층
- FTP, SMTP, SNMP 등
TCP/IP의 주소
- 물리 주소(48bit)
- 인터넷 주소(32bit)
- 포트 주소
코딩테스트 - 트리 탐색
n = int(input())
tree = {}
root = 0
for i in range(n):
parent, left, right = input().split(" ")
tree[parent] = [left, right]
if i == 0:
root = parent
def preorder(root):
if root != '.':
print(root, end=' ')
if root in tree:
preorder(tree[root][0])
preorder(tree[root][1])
def inorder(root):
if root != '.':
if root in tree:
inorder(tree[root][0])
print(root, end=' ')
inorder(tree[root][1])
else:
print(root, end=' ')
def postorder(root):
if root != '.':
if root in tree:
postorder(tree[root][0])
postorder(tree[root][1])
print(root, end=' ')
preorder(root)
print()
inorder(root)
print()
postorder(root)
print()
'SW Academy' 카테고리의 다른 글
[CNU SW Academy] 22일차(22.12.30) (0) | 2023.01.01 |
---|---|
[CNU SW Academy] 21일차(22.12.29) (0) | 2023.01.01 |
[CNU SW Academy] 19일차(22.12.27) (0) | 2023.01.01 |
[CNU SW Academy] 18일차(22.12.26) (0) | 2022.12.26 |
[CNU SW Academy] 16일차(22.12.22) (0) | 2022.12.25 |