Study in SSAFY/면접을 위한 CS 전공지식 노트
[네트워크] Blocking, Non-blocking / Synchronous, Asynchronous
I/O 작업이란? 주로 파일의 입출력을 다룰 때 흔히 볼 수 있다. 네트워크에서도 흔히 볼 수 있는데, 소켓의 read와 send가 그 예시이다. 두 대 이상의 컴퓨터끼리 네트워크 통신을 할 때, 한 쪽에서 send하고 다른 쪽에서 read하는 과정을 통해 통신한다. I/O 작업은 User 레벨에서 직접 수행할 수 없고 실제 I/O 작업을 수행하는 위치는 Kernel(운영체제)에서만 가능하다. 유저 프로세스는 커널에게 요청을 하고, 작업 완료 후 커널에 반환하는 결과를 기다린다. 소켓(Socket)이란? 네트워크 상에서 동작하는 프로그램 간 통신의 종착점이다. 간단히 말해, 특정 문자들을 조합하여 만든 네트워크 주소이다. 소켓은 프로세스가 네트워크를 통해 데이터를 보내거나 받기 위한 창구 역할을 한다. ..
[네트워크] IP 주소와 IPv4
IP 주소 인터넷 계층의 IP 프로토콜은 IP 주소를 사용하여 호스트나 네트워크 장비를 식별한다. 1. 인터넷에 접속한 컴퓨터와 라우터에 고유한 IP 주소를 할당한다. 2. 그 IP 주소를 사용해서 컴퓨터를 특정하거나 통신 상대방으로 지정한다. 따라서, 인터넷에 연결된 모든 컴퓨터나 라우터의 IP 주소는 유일해야 한다. 이는 전세계의 인터넷 주소를 관리하는 인터넷 할당번호 관리기관(IANA, Internet Assigned Numbers Autority)에서 관리한다. IP 프로토콜에서는 현재 IPv4의 주소체계를 사용하고 있다. 일반적으로 IP 주소라 하면 IPv4를 의미한다. 하지만 스마트폰, 사물 인터넷 등 IP 주소를 사용하는 기기가 폭발적으로 증가하면서 IPv4 보다 월등히 많은 IP 주소를 할..
[네트워크] TCP / UDP 의 header 분석
TCP / UDP 란? 전송계층에서 사용하는 프로토콜입니다. 사용하는 목적은, 목적지 장비까지 전송한 패킷을 상위의 특정 응용 프로토콜에 전달하는 것입니다. TCP(Transmission Control Protocol) TCP는 수신한 세그먼트에 에러가 발생하면 재전송을 요구하여 에러를 복구합니다. 이러한 기능을 가진 프로토콜을 '신뢰성 있는 프로토콜'이라고 합니다. 따라서 에러 확인 및 복구를 위한 정보를 확인해야 하므로 처리 속도가 느립니다. UDP(User Datagram Protocol) UDP는 에러가 발생한 세그먼트는 폐기시킵니다. 이처럼 에러 복구 기능이 없는 프로토콜을 '신뢰성 없는 프로토콜' 이라고 합니다. 따라서 에러 확인 및 복구를 위한 절차가 불필요하므로 처리 속도가 빠릅니다. TC..
[프로그래밍 패러다임] 선언형과 함수형 / 객체지향 / 절차형
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 1.2 프로그래밍 패러다임 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다. 어떤 언어는 특정 패러다임을 지원하기도 하는데, 대표적으로 jdk 1.8 이전의 JAVA가 객체지향 프로그래밍, 하스켈은 함수형 프로그래밍을 지원한다. C++, 파이썬, 자바스크립트는 여러 패러다임을 지원한다. 프로그래밍 패러다임은 크게 선언형과 명령형으로 나뉜다. 선언형은 함수형이라는 하위 집합을 갖고, 명령형은 객체지향, 절차지향으로 나눌 수 있다. 1) 선언형과 함수형 프로그래밍 선언형 프로그래밍은 '무엇을' 풀어내는가에 집중하는 패러다임이다. 함수형 프로그래밍은 선언형 패러다임의 일종으로, 작은 순수 함수들을 블록..
[디자인 패턴] MVC 패턴 / MVP 패턴 / MVVM 패턴
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 1.1 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을, 객체 간의 상호 관계를 이용하여 해결할 수 있도록 '규약' 형태로 만든 것이다. 1) MVC 패턴 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴이다. 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발 가능하다. 재사용성과 확장성이 용이하고, 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해진다. 모델 모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신한다. 뷰 inpu..
[디자인 패턴] 프록시 패턴 / 이터레이터 패턴 / 노출모듈 패턴
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 1.1 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을, 객체 간의 상호 관계를 이용하여 해결할 수 있도록 '규약' 형태로 만든 것이다. 1) 프록시 패턴 대상 객체에 접근하기 전, 그 접근에 대한 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다. 이를 통해 객체의 속성, 변환 등을 보완할 수 있고 보안, 캐싱, 로깅, 데이터 검증에 사용한다. - 프록시 서버 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템 혹은 응용 프로그램이다. 2) 이터레이터 패턴 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴이다. 순회 가..
[디자인 패턴] 싱글톤 패턴 / 팩토리 패턴 / 전략 패턴 / 옵저버 패턴
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 1.1 디자인 패턴 프로그램을 설계할 때 발생했던 문제점들을, 객체 간의 상호 관계를 이용하여 해결할 수 있도록 '규약' 형태로 만든 것이다. 1) 싱글톤 패턴 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이다. 보통 데이터베이스 연결 모듈에 많이 활용된다. 하나의 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에, 인스턴스를 생성할 때 드는 비용이 줄어드는 장점이 있다. 하지만 의존성이 높아진다는 단점이 있다. 싱글톤 패턴은 TDD(Test Driven Developmenet)를 할 때 문제가 된다. TDD를 할 때 단위 테스트를 주로 하는데, 단위 테스트는 서로 독립적이어야 하며 어떤 순서로든 실행할 수 있어야 한..
[자료구조] 5.3. 비선형 자료 구조
본 포스팅은 [면접을 위한 CS 전공지식 노트]의 내용을 참고하여 작성하였습니다. 5.3. 비선형 자료 구조 비선형 자료 구조란 일렬로 나열하지 않고, 자료 순서나 관계가 복잡한 구조를 말한다. 1) 그래프 그래프는 정점과 간선으로 이루어진 자료 구조를 말한다. 정점과 간선 ' 어떠한 곳에서 어떠한 곳으로 무언가를 통해 간다. ' 위에서 '어떠한 곳'은 정점(vertex)이고, '무언가'는 간선(edge)이 된다. 이와 같이 정점과 간선으로 이루어진 집합을 '그래프(graph)'라고 한다. 정점으로 나가는 간선을 해당 정점의 outdegree라고 하며, 들어오는 간선을 해당 정점의 indegree라고 한다. 또한, 간선과 정점 사이에 드는 비용을 '가중치'라고 한다. 2) 트리 트리는 그래프 중 하나로 ..