-
[TIL] 스파르타) CS 강의 수강 (OSI model), 프로젝트 복기 조금TIL-sparta 2024. 5. 9. 20:50
> 프로젝트 발표가 끝나고 여유 시간이 생겨서 강의를 수강했다. 또한 과제를 돌아보면서 떠오른 생각을 가볍게 적어보았다.
학습 키워드: OSI model, 7 Layers, this, context, call, apply, bind
1. OSI model
1) What is it?:
- OSI 7 계층(Layers)이라고 알려져있는 네트워크 구조 모델이다. L2 스위치와 L3 라우터 장비들을 조금 다뤄본 경험이 있는데, 전문 지식이 있던 것은 아니어서 알아보던 중에 OSI 7계층이라는 말을 처음 들어봤었다. Physical, Data Link, Network, Transport, Session, Presentation, Application으로 순서대로 1부터 7까지의 layer가 존재한다. 국제 표준화 기구 (ISO)에서 1970년대에 정립된 가이드라고 한다. L1 부터 L3 까지를 네트워크 지원 계층, L5~L7을 사용자 지원 계층이라고 한다.
2) How does it work?:
- Layer 1 (Physical, 물리 계층): 물리적인 연결과 전기 신호 변환을 담당한다. 다양한 하드웨어 기술이 접목되어 가장 복잡하다고 여겨지는 계층이라고 한다.
- Layer 2 (Data Link, 데이터 링크 계층): MAC주소를 이용하여 같은 네트워크 내 장비들이 통신할 수 있게 해준다. (Bridge, L2 스위치)
- Layer 3 (Network, 네트워크 계층): IP주소를 이용하여 서로 다른 네트워크 끼리의 통신을 담당한다. Packet(패킷)을 다루는 구간으로 routing, forwarding 등이 네트워크 계층에 해당하는 작업들이다. 패킷의 header를 확인하여 설정된 가장 가까운 route를 선택한다. CMD에서 ping을 사용하면 출력되는 TTL이라는 값이 있는데, 이 값을 통해 ping 대상이 된 장비의 종류를 어렴풋이 알 수 있다.
- Layer 4 (Transport, 전송 계층): Protocol(TCP, UDP)과 관련된 계층으로, 오류 복구 및 흐름 제어를 담당한다고 한다. 네트워크 지원 계층과 사용자 지원 계층을 이어주는 역할을 하는게 L4 전송계층이다. 네트워킹에서 port에 해당하는 부분으로, OS내부에 커널로 구현되어 있다고 한다. L4 스위치는 load balancer라고 하여 네트워크의 트래픽 부하를 분산하는 작업을 하는 장치라고 한다.
- Layer 5 (Session, 세션 계층): 세션을 여닫기도 하고 송 수신자 간의 동기화를 담당하는 layer라고 한다.
- Layer 6 (Presentation, 표현 계층): 데이터의 encoding/decoding (인코딩, 디코딩)이나 encryption/decryption (암호화, 복호화)을 담당한다. 이해한게 맞다면 L6은 통신 장비간의 인코딩 차이 등을 극복하기위해 어떤 방식을 사용해야 하는지(메타 정보)를 알려주는 기능을 한다.
- Layer 7 (Application, 응용 계층): 브라우저나 메일 시스템 등의 프로그램이 어느 프로토콜을 사용하여 데이터를 전송할지를 결정짓는 layer라고 한다. (Http, telnet, FTP, SMTP 등)
- 송신 측은 L7 부터 내려가면서 정보를 송신하고, 수신측은 L1 부터 차례대로 올라가며 데이터를 수신한다.
- 송신 시에는 양 끝 단(L1과 L7)을 제외한 나머지 계층에서 데이터의 맨 앞과 맨 끝단에 헤더나 트레일러 라는 형태로 정보를 추가해나간다. 이 작업을 캡슐화 한다고 표현한다. 수신 측에서 이 캡슐화된 정보를 받으면 차례대로 올라가면서 디캡슐화를 진행한다.
3) Why use it?:
- OSI model은 네트워킹이 기본적으로 어떤 흐름으로 진행되는지를 이해하기 위한 요소 중 하나다. 앞으로 배우게 될 게임 서버 개발 과정에서 TCP/IP를 자주 접하게 될텐데, 이 TCP/IP 구조가 바로 OSI 계층의 3(IP), 4(TCP, UDP) 레이어 구간을 기반으로 1, 2계층의 Ethernet과 WAN, LAN 등의 기술, 그리고 5-7 계층(TCP/IP에서는 5-7을 통합하여 L5 Application)의 HTTP, SMTP, FTP 등을 이어주는 다양한 프로토콜의 집합체다.
2. Call, Apply, Bind
1) What is it?:
- 이전에 작성했던 TIL(https://donkim0122.tistory.com/12)에서 call, apply, bind를 간단하게만 다루고 넘어갔었는데, 프로젝트 진행 중에 closure를 사용하다가 this의 context 문제로 해당 코드를 다른 형태로 바꿨었다. 이번 프로젝트 발표가 끝나고 나서 KPT를 작성하다가 문득 며칠전에 친구랑 얘기하던 이 call, apply, bind가 떠오르면서 연결고리가 보이는 것 같아서 기록용으로 작성하게 되었다.
2) Problem:
- 이전 TIL에 언급했다시피 이 세 가지 method는 어떤 함수의 this context를 임의로 지정해줄 수가 있다. 이번 프로젝트의 기능 중에 element의 toggle을 담당해주는 모듈이 있었는데, 이 모듈의 함수가 다른 여러 모듈에서 사용되기 때문에 assembler 모듈을 통해 함수를 넘겨주었다. 그런데 이 함수처럼 외부에서 받아서 쓰는 여러개의 함수들의 인자가 다 달라서 하나하나 값을 지정해 넣어주는 꼴이 어딘가 DI스럽지 못하고 부자연스러웠다.
3) Possible solution?:
- 고민하다가 딱히 해결책을 떠올리지 못하고 넘어갔는데, 오늘 문득 생각해보니 assembler 혹은 함수가 담긴 모듈이 자체적으로 해당 함수의 context를 bind()를 사용해서 미리 지정해주는 식으로 구성했으면 어땠을까 싶었다. CSS 클래스를 토글할 container가 여러개였어서 저렇게 딱 떨어지게 작성할 수는 없었겠지만, 무언가 해결의 실마리가 보이는 듯 하다. 정확한 사용은 추후 프로젝트를 진행하며 좀 더 연구하거나 시간날 때 TMDB 프로젝트를 자세히 들여다 봐야겠다.
--
REFERENCES:
> 강의 노트, 9강. OSI 7 계층
> TIL, 24-04-23
> Wikipedia, OSI 모형
728x90'TIL-sparta' 카테고리의 다른 글
[TIL] 스파르타) Node.js 강의 수강 (0) 2024.05.11 [TIL] 스파르타) CS 강의 수강 (TCP/IP, HTTP, HTTPS) (0) 2024.05.10 [TIL] CSS 기능들 (custom variable, transition) (0) 2024.05.08 [TIL] 스파르타) Project3 마무리 (Dependency Injection) (0) 2024.05.07 [TIL] 스파르타) CS 강의 수강 (HashMap, HashSet) (2) 2024.05.06