SW Academy

[CNU SW Academy] 20일차(22.12.28)

narlo 2023. 1. 1. 16:26

프로그래머스 - 프론트엔드 미니 데브코스

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