1. OSI 7계층 '슬랙'에 빗대어 설명
1계층, 물리계층(Physical Layer): 허브, 케이블, 리피터 등등이 이에 속함. 데이터를 0과1로 만들어놨다면 encoding으로 전기 신호로 바꿔주어 보내고 decoding으로 다시 기계어로 바꾸는 행위와 전기적 전송, 증폭이 이 계층에서 담당함. (단위: 비트)
슬랙 서버에서 데이터가 랜선을 타기 전 후와, 탄 상태로 보면 됨.
아래는 물리계층의 간략 심화학습
물리계층의 한 담당으로는 비트형식으로 전기신호를 보내면 0110이라는 비트를 보내면, 010인지 0110인지 0111111111110인지 구분이 잘 안됨.
Sine등의 형식으로 신호를 바꾸어 부호화 및 레벨링을 하면, 비트(0,1) 구분과 전송 비트량이 많아 질수 있도록 해줌.
- 핵심 키워드 -
• 회선구성: 두 스테이션 사이를 어떻게 연결할 것인가에 대한 규정으로서 점 대 점 방식과 점 대 다중점 방식이 있으며 또한 전송회선의 공유 여부에 대한 결정도 여기에 포함된다.
• 데이터 전송 방식: 연결된 두 스테이션 사이의 데이터 전송 방식들, 즉 단방향 방식, 반이중 방식, 전이중 방식들 중에서 하나를 선택한다.
• 접속 형태: 네트워크 스테이션들의 배열 방식 등에 관한 네트워크 토폴로지(계층형, 버스형, 성형, 원형, 그물형) 등을 규정한다.
• 신호: 단극형, 극형, 양극형과 같은 신호의 종류를 결정한다.
• 부호화: 비트 0과 비트 1을 표현하는 신호 시스템을 정의한다.
• 전송매체: 유선과 무선으로 크게 양분되며 유선에는 트위스트 페어, 동축케이블, 광케이블 등이 있다.
• 인터페이스: 인접한 두 장치 간에 효율적인 전송을 위한 정보 공유 방법과 전달 방법 등을 규정한다.
• 기타: 커넥터의 종류와 크기 등의 상세 규격, 전송 매체의 굵기 및 재질 등을 규정한다.
2계층, 데이터링크 계층(Datalink Layer): Switch, Bridge등이 이에 속함.시스템 간에 신뢰성 있는 정보를 전송하는 기능을 제공(단위: 프레임)
일반적으로 전송 과정에서 데이터 오류가 발생할 수 있는데 데이터링크 계층은 이러한 오류를 검출하여 복구시킴으로써 신뢰성 있는 데이터 송수신을 보장. 또한 흐름 제어를 수행함으로써 데이터 링크의 효율을 향상시키는 역할.
데이터가 비트 스트림으로 보이지만 데이터링크에서는 비트 스트림들 중에서 헤더(header)와 트레일러(trailer)를 덧붙여서 패킷의 처음과 끝을 알 수 있게 되어 있다.
슬랙 서버에서 1계층과 달리 물리주소(MAC 주소)를 보고 어디로 보낼지를 결정함.
이때 주소는 슬랙 서버에서, 슬랙 회사에 있는 공유기 정도로 보면 됨.
아래는 데이터링크 계층의 간략 심화학습
헤더와 트레일러로 데이터스트림을 만드는 역할과(3계층 -> 2계층) 프레이밍으로 비트를 프레임으로 만듦(1계층->2계층)
헤더와 트레일러의 내용은 네트워크 유형에 따라 다르지만, 일반적으로 헤더에는 프레임의 시작을 알리는 플래그(flag)를 시작으로 목적지의 주소가 포함되며, 트레일러 부분에는 에러 검출을 위한 체크섬(checksum)과 패킷의 끝을 알리는 플래그 등으로 구성된다.
데이터통신에서 링크는 근접해 있는 통신 노드 사이를 의미한다. 예를 들어서 통신 노드(컴퓨터, 교환기, 라우터 등) 세 개가 직렬로 연결되어 있을 때에 링크 개수는 2개가 된다.
• 프레이밍: Physical Layer를 통해 받은 신호를 조합해 Frame 단위의 데이터 유닛으로 만들어 처리한다.(1계층->2계층)
• 노드 대 노드 전달: 서로 인접한 노드 사이의 연결을 링크라고 하는데 데이터링크 계층은 하나의 링크 사이에서 데이터 전달을 담당한다.
• 주소 지정: 상위 계층에서 내려온 패킷에 헤더와 트레일러를 붙이며 헤더에는 현재 노드의 물리 주소와 다음 노드의 물리 주소를 포함시킨다.
• 접근제어: 두 개 이상의 노드들이 동일한 링크에 연결되어 있을 때에 충돌을 방지하기 위한 제어기능이 요구된다.
• 흐름 제어: 수신 노드로 전달되는 패킷의 양이 그 노드가 처리할 수 있는 양보다 많이 유입되는 것을 방지해 주기 위한 방법으로서 수신 노드는 송신 노드와의 통신을 통해 흐름 제어를 수행한다.
• 오류 제어: 데이터링크 계층은 일반적으로 오류가 발생한 프레임 전체를 재전송하는 방식을 사용하여 손상된 데이터를 복구한다.
→ACK송신 여부, GO BACK N검사 기법 등의 개념이 여기에 속함.
• 동기화: 송신 노드와 수신 노드 사이에는 클럭이 존재하고 이 클럭에 맞추어 데이터가 전송되는데 데이터가 언제 시작하는지를 수신 노드가 알 필요가 있다.
수신 노드에서 데이터 시작을 알 수 있도록 송신 노드가 헤더 부분이 시작되기 전에 일정한 비트 패턴을 첨가하는 것을 동기화라고 한다.
3계층, 네트워크 계층(Network Layer): IP, ICMP, ARP가 이에 속함. 전송할 데이터를 여러개의 경로를 거쳐 목적지에 전송함.(단위: 패킷)
미국에 있는 슬랙 서버에서 한국에 있는 내 클라이언트까지의 경로를 설정해줌.
물리주소(MAC주소): 각 기기들이 가지는 고유 주소
논리주소(IP주소): 단순히 말해 한 가정의 주소로 보면 됨.
즉, 집 IP주소로 데이터가 들어오면, 컴퓨터 물리주소든 스마트냉장고 물리주소든 보내는 것.
4계층, 전송 계층(Transport Layer): TCP, UDP등이 이에 속함. 전체 메시지의 전송을 책임지며, 송/수신 프로세스 간의 연결을 설정한 뒤 오류 복구나 흐름 제어를 통해 안전하게 전체 메시지가 전달될 수 있도록 지원(단위: 세그먼트, 데이터그램)
슬랙에서 메세지 전송은 TCP, 화면 공유는 UDP로 메세지는 오류가 없게, 화면공유는 중간에 누락 및 (화질 등이)깨져도 시간이 느려지지 않게끔 송수신 방법을 설정하는 구간.
5계층, 세션 계층(Session Layer): NetBIOS, TLS가 이에 속함. 데이터를 송수신하는 양쪽 종점 컴퓨터 내의 프로세스들 간의 통신 프로토콜(단위: 메세지) 동기화가 중점
내 컴퓨터 슬랙 클라이언트에서 "안녕하세요~?"를 치면 슬랙 서버에도 "안녕하세요~?"라고 도착했는지 확인함.
Physical Layer(1계층) ~ Transport Layer(4계층)의 주된 기능은 데이터를 전달하는 것. 5계층부턴 통신규약이라 보아도 무방함.
6계층, 표현 계층(Presentation Layer): ASCII, JPEG등이 이에 속함. 송/수신자가 서로 다른 문자를 사용하는 경우 번역해서 일관된 데이터 전송으로 인해 서로 이해할 수 있도록 돕는 역할(단위: 메세지)
내 컴퓨터 슬랙 클라이언트에서 "안녕하세요"라고 치면 unicode로 변환해서 컴퓨터 언어로 변환해줌
코드 변환(code conversion), 데이터 압축(data compression), 데이터 암호화(data encryption) 등을 담당
7계층 (Application Layer): HTTP, DNS, FTP, SMTP 등이 이에 속함. 사용자에게 직접 제공되는 서비스나 프로그램. 응용 애플리케이션이라고도 불리며 사용자의 명령에 따라 특정 작업을 수행하는 소프트웨어나 인터페이스를 제공하는 여러 프로토콜 등 다양한 범주에서 정보를 처리하는 역할을 수행(단위: 메세지)
전송된 메일, 사진, 동영상 등이 크롬이나 사파리 등의 응용프로그램을 통해 사용자가 눈으로 확인할 수 있는 과정
슬랙에서 "안녕하세요~?"를 입력하면 슬랙에 들어와 있는 다른 클라이언트에게도 "안녕하세요~?"가 보임
아래는 응용 계층 간략 심화학습
응용 계층의 주요 기능은 다음과 같다.
• 네트워크 가상 터미널: 로컬에서 원격 호스트에 로그온이 가능하게 해 준다.
• 파일 접근, 전송 및 관리: 로컬 컴퓨터에서 원격 컴퓨터의 파일을 관리하거나 제어함으로써 효율적인 파일 접근이 가능하다.
• 우편 서비스: 전자우편의 발송과 저장 기능을 제공한다.
• 디렉터리 서비스: 광역적인 정보 접근을 통하여 분산 데이터베이스의 다양한 자원들을 이용할 수 있도록 해 준다.
• HTTP: Application Layer의 프로토콜. 응용 프로그램인 웹이나 브라우저에 필요한 데이터를 송수신할 때 사용한다.
• FTP: 파일 전송 프로토콜. 서버와 클라이언트 사이의 파일을 주고 받을 때 사용한다.
요약해서 보는 OSI 7계층
총 흐름
이메일을 보내는 과정
- 작성된 메세지는 Application 계층(7계층)에서 Presentation 계층(6계층)으로 전달하게 된다.
- Presentation 계층(6계층)에서는 전달된 메세지를 데이터로 변환 하거나, 암호화 또는 압축을 수행한다. 이렇게 변한된 데이터는 Session 계층(5계층)으로 전달되게 된다.
- Session 계층(5계층)으로 전달된 데이터는 동기화를 위하여 주기적으로 동기점(sync)을 삽입하여 Transport 계층(4계층)으로 데이터를 전달하게 된다.
- Transport 계층(4계층)에서는 발신지와 목적지를 정하고 연결 방식을 연결성, 비연결성 방식으로 설정하여, 흐름 제어와 오류 제어 기능을 한다. 데이터 단위를 Segment 또는 Datagram으로 나눈다. 만약에 악성코드가 있을 경우 방화벽이 작동을 해서 걸러준다.
- Network 계층(3계층)에서 라우팅에 필요한 논리 주소를 설정하고, 패킷에 대한 라우팅 정보를 삽입한다.
- Data Link 계층(2계층)에는 우선 Frame 단위로 데이터를 나눈다. 그리고 MAC 주소로 지정을 하고 속도 차이를 원할히 메꾸기 위해서 흐름 제어를 한다.
- Physical 계층(1계층)에는 전송 매체가 일반 케이블인지 광케이블인지 메체의 길이를 설정한다. 그리고 데이터를 회선으로 보내기 위해 전기적인 변환을 담당한다.
2. 객체지향 프로그래밍과 절차지향 프로그래밍(경험에 빗대어 서술)
학사때 절차지향 언어의 대표격인 C언어나 어셈블리어 등으로 짤 때와 객체지향 언어인 자바로 프로그램을 짤 때의 경험으로 설명하자면, 절차지향은 프로젝트 사이즈가 작고 라이브러리나 함수 정의 및 사용 자체가 어려울 경우에 적합했고, 객체지향 언어는 보다 코드가 잘 정돈되어 있고, 찾고자 하는 기능을 잘 찾을 수 있었으며, 이미 구현된 기능을 이식하기에도 편했습니다. 결국 어떤 방식의 코드를 짜야하는지에 따라 방법이 달라질 뿐, 우열을 가리는 것은 불필요함을 느꼈습니다.
또한 이분법으로 프로젝트 사이즈가 크니 객체지향으로만 작성해야 된다는 식이 아닌, 객체의 한 모듈에서 절차지향 프로그래밍의 기법을 섞어서 작성하는 등. 상황과 기호에 맞게 프로그래밍 하는 것이 필요하다 느꼈습니다.
객체지향 프로그래밍:
- 캡슐화: 데이터와 함수들을 객체 안에 넣어서 묶음
- 정보 은닉: 객체 내부 구현의 세부사항은 외부 세계로 부터 감춰짐
- 상속과 다형성: 자식 클래스는 부모 클래스를 물려받으며 확장 가능하며 기존의 코드를 재사용하는 것이 가능
- 쉬운 디버깅: 절차지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있고, 객체지향 프로그램에서는 100개의 클래스와 각 클래스당 10개의 멤버함수를 가지고 있다고 가정하면, 프로그램에 문제가 생겼을 시 클래스 안에 10개의 멤버함수를 검사하는 편이 1000개의 함수를 검사하는 것보다 훨씬 나음.
다양한 요구사항을 수용할 수 있는 '유연성'이 핵심 키워드
캡슐화
데이터와 함수들을 객체 안에 넣어서 묶는다.
캡슐화된 객체들은 다른 프로그래머가 사용하기 편리하다.
또한 수많은 테스트와 디버그를 마쳤기 때문에 안심하고 사용 가능한다.
정보 은닉
객체 간의 모든 통신은 함수 호출을 통해야 하며 객체의 함수를 가지고 상호작용 함으로써 객체 내부 구현의 세부사항은 외부 세계로 부터 감춰진다.
내부 데이터가 숨겨져 있다는 것은 프로그램의 다른 부분에 영향을 미치지 않고 쉽게 변경될 수 있음을 의미한다.
상속과 다형성
자식 클래스는 부모 클래스를 물려받으며 확장 가능하며 기존의 코드를 재사용하는 것이 가능하다.
서로 다른 타입에 속하는 객체들이 같은 이름의 멤버 함수에 응답하여 서로 다른 동작을 보여주는 것이 가능하다.
쉬운 디버깅
절차지향 프로그램에서 하나의 변수를 1000개의 함수가 사용하고 있고, 객체지향 프로그램에서는 100개의 클래스와 각 클래스당 10개의 멤버함수를 가지고 있다고 가정해보자.
프로그램에 문제가 생겼을 시 클래스 안에 10개의 멤버함수를 검사하는 편이 1000개의 함수를 검사하는 것보다 훨씬 낫다.
객체지향과 절차지향의 차이
절차지향: 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수를 설계하는 방식
객체지향: 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행 순서와 흐름을 짜는 방식
'CS' 카테고리의 다른 글
OpenAI의 Chat Completions response format (0) | 2024.09.26 |
---|---|
MTV 패턴(Django) (0) | 2024.08.09 |
전반적인 용어정리 (0) | 2024.07.31 |
02. CPU의 스케쥴링 및 메모리 심화 (1) | 2024.07.29 |
01. 컴퓨터의 네가지 핵심 부품 (1) | 2024.07.26 |