CS 45

[네트워크] TCP와 UDP의 차이

TCP와 UDP는 OSI 7 계층의 전송 계층에서 사용되는 프로토콜이다. TCP와 UDP는 데이터를 전달하는데 사용되지만 정확성을 추구하는 TCP와 신속성을 추구하는 UDP는 각각 방식이 다르다. 이번에 TCP와 UDP의 차이를 알아보고 UDP가 어디에 사용되는지 알아보자. TCP TCP는 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 연결 지향적 프로토콜이다. 연결을 위해서 3-way handshake를 사용하며 클라이언트가 연결 요청을 하면 서버는 연결을 수락한다. 서버가 연결을 수락했다면 고정적인 통신 선로가 생기고 이를 통해 데이터를 주고받을 수 있다. 이를 통해 TCP는 1:1 통신만 가능하다는 것을 알 수 있다. TCP는 신뢰성있는 데이터 전송을 하기 때문에 클라이언트가 전송하는 모든 ..

CS/네트워크 2021.09.30

[운영체제] 인터럽트가 무엇일까?

인터럽트는 끼어들기라고 생각하면 쉽게 이해할 수 있다. 이미 진행하고 있는 일을 중간에 끼어들어 가로채서 다른 사람이 그 일을 진행하는 것이라고 일단 생각해보자. 그리고 인터럽트의 정의와 종류, 처리 과정을 알아보면서 이해해보자. 개념 CPU는 매번 프로그램 카운터가 가리키는 곳의 명령을 수행한 후에 다음 명령을 수행하기 직전에 인터럽트 라인을 확인한다. 이때 인터럽트 라인에 인터럽트가 발생했을 때는 지금까지 수행하던 일을 PCB에 저장하고 인터럽트를 수행한다. 만약 인터럽트를 처리하는 중에 또 다른 인터럽트가 들어온다면 어떻게 할까? 결론적으로 인터럽트 처리 중에 다른 인터럽트를 허용하지 않는다. 왜냐하면 A라는 인터럽트가 어떤 데이터를 변경을 하고 있는데 B라는 인터럽트가 들어왔다고 가정해보자. B라..

CS/운영체제 2021.09.29

[알고리즘] 슬라이딩 윈도우

슬라이딩 윈도우는 어떠한 배열에서 일정 범위의 값을 비교할 때 유용하게 사용될 수 있는 방법이다. 투 포인터와 비슷하다고 생각할 수 있지만 투 포인터는 정렬된 배열 내에서 가변적인 범위를 탐색하는 반면 슬라이딩 윈도우는 정렬의 유무와 상관없이 고정적인 범위를 탐색한다는 것에 차이가 있다. 개념 슬라이딩 윈도우는 어떠한 배열에서 고정된 크기의 범위를 탐색할 때 유용하게 사용된다. 아래의 그림과 같은 배열을 예시로 확인해보자. 아래의 배열 중에서 연속된 세개의 수를 선택하여 그 합이 최대가 되는 구간이 어디인지 구하려고 한다. 이를 위해 아래의 그림처럼 처음부터 세개의 수를 선택하여 합을 구할 수 있을 것이다. 순서대로 (3 - 1 + 8)을 계산하고 (-1 + 8 - 2)를 계산하면서 진행하는데 (-1 +..

CS/알고리즘 2021.09.28

[자료구조] 중위, 후위 순회를 이용한 전위순회 구하기

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.  중위 순회와 후위 순회의 결과를 알 때 전위 순회의 결과를 구해보려고 한다. 이는 백준 2263 트리의 순회 문제이다. 해당 문제는 트리 순회의 특징을 정확히 이해하고 있는지 판단하기 좋은 문제라고 생각한다. 이와 비슷하게 전위 순회와 중위 순회를 알 때 후위 순회를 구할 수 있지만 전위 순회와 후위 순회를 알 때 중위 순회는 구할 수 없다.접근아래와 같은 트리가 있다고 해보자. 이 트리를 중위 순회, 후위 순회로 탐색하면 다음과 같은 순서일 것이다.중위 순회 : 4 -> 2 -> 5 -> 1 -> 3 -> 6후위 순회 : 4 -> 5 -> 2 -> 6 -> 3 -> 1 후위 순회는 루트 노드를 가장 마지막에 방..

CS/자료구조 2021.09.28

[알고리즘] 정렬 : 삽입정렬

삽입정렬은 원소가 자신의 자리를 찾고 해당 자리에 삽입되면서 정렬하는 기법이다. 숫자 카드를 손에 들고 있을 때 숫자들을 오름차순으로 정렬한다고 생각해보면 쉽게 연상할 수 있다. 개념 오름차순 기준으로 설명한다. N개의 원소가 있을 때 1번 인덱스의 원소부터 N-1번 인덱스의 원소까지 탐색을 진행한다. 현재 인덱스를 기준으로 이전 인덱스와 비교를 한다. 만약 이전 인덱스가 더 크다면 현재 인덱스의 원소가 있어야하는 자리는 이전 인덱스이기 때문에 자리를 스왑한다. 스왑 후에도 이전 인덱스가 더 크다면 계속해서 자리를 스왑한다. 이 과정에서 이전 인덱스가 더 작거나 더 이상 비교할 원소가 없을 때는 비교를 종료한다. 위의 과정을 반복하면 정렬이 된다. 구현 10개의 숫자가 랜덤하게 나열되어 있다. for문을..

CS/알고리즘 2021.09.26

[알고리즘] 정렬 : 선택정렬

선택 정렬은 오름차순 기준일 때 범위 내에서 최솟값을 찾아 앞자리의 숫자와 자리를 변경해 나간다. 최솟값 또는 최댓값을 선택한다는 의미로 선택 정렬이라는 이름이 붙었다. 개념 오름차순 기준으로 설명한다. N개의 원소가 있을 때 0~N-1까지 탐색을 진행하여 최솟값을 찾는다. 찾은 최솟값과 0번째 인덱스에 있는 숫자와 스왑을 한다. 위의 과정을 통해 첫 번째 자리는 정렬이 된 것이다. 이후 1~N-1까지 탐색을 진행하여 최솟값을 찾고 1번째 인덱스에 있는 숫자와 스왑을 한다. 위의 과정을 반복하여 정렬을 한다. 구현 10개의 숫자가 랜덤하게 나열되어 있다. 첫 번째 for문의 i인덱스는 최솟값을 찾아서 해당 인덱스와 i 인덱스와 자리를 변경할 때 사용된다. 두 번째 for문은 i인덱스부터 탐색을 진행한다...

CS/알고리즘 2021.09.24

[네트워크] HTTPS의 개념과 동작 원리

HTTPS는 HTTP에 보안이 강화된 프로토콜이라는 것을 알고있다. 프로젝트를 진행하면서 SSL 인증서를 발급받아 HTTPS로 요청할 수 있도록 했던 경험도 있다. 하지만 정확히 HTTPS가 어떻게 동작하는지 알지 못했기 때문에 이번 기회에 HTTPS의 개념과 동작원리를 이해하려고 한다. HTTPS의 개념 HTTP는 TCP/IP 위의 애플리케이션 계층에서 사용되는 프로토콜이다. 여기서 HTTPS는 TCP/IP위에 SSL 또는 TLS를 통해 보안을 강화한 프로토콜이다. 이를 통해 모든 HTTP의 요청과 응답은 암호화된다. HTTPS 동작을 알아보기 전에 알아두어야 할 개념 HTTPS의 동작 원리를 알아보기 전에 대칭키, 공개키, CA(Certificate Authority)를 이해해야한다. 1. 대칭키 암..

CS/네트워크 2021.09.24

[네트워크] HTTP의 특성

이전에 HTTP의 기본 동작을 정리하였다. 이후에 프로젝트를 진행하면서 HTTP의 특성들을 알게 되었고 따로 정리를 해야 할 필요가 있다고 생각하였다. HTTP는 클라이언트-서버 구조를 갖고, Stateless, Connnectionless, 대부분의 파일 형식을 전송할 수 있다는 4가지의 특성이 있다. 클라이언트 - 서버 구조 HTTP는 클라이언트가 서버에 요청하는 단방향 통신이며 서버는 요청이 있을 때에만 응답하는 구조를 갖고 있다. 이때 서버는 요청한 것을 처리한 결과에 따라서 다른 응답을 보낸다. 예를 들어 특정 URL로 이동했을 때 해당 URL이 존재하지 않을 때는 404 응답을 보낸다. 또한 정상적으로 이동했을 때는 200 계열의 응답을 보내게 된다. Stateless HTTP는 상태를 저장하..

CS/네트워크 2021.09.23

[알고리즘] 정렬 : 버블정렬

버블 정렬은 오름차순 기준일 때 인접한 두 개의 인접한 원소를 비교하여 더 큰 원소를 뒤로 보내는 방식을 취하고 있다. 두 개의 인접한 원소를 비교해 나가는 모습이 버블 같기 때문에 버블 정렬이라는 이름이 붙었다. 개념 오름차순 기준으로 설명한다. 첫 번째 원소와 두 번째 원소를 비교했을 때 첫 번째 원소가 크다면 두 번째 원소와 자리를 바꾼다. 이어서 두 번째 원소와 세 번째 원소를 비교한다. 위와 같은 과정을 거치면 마지막부터 가장 큰 원소들이 정렬될 것이다. 즉, N개의 원소가 있다고 가정했을 때 한 번의 순환을 통해 N번째 자리에 가장 큰 숫자가 저장되고 이제 첫 번째 원소부터 N-1까지의 수들을 비교하여 N-1번째 자리를 채운다. 구현 10개의 숫자가 나열되어 있다고 가정한다. 2중 for문을 ..

CS/알고리즘 2021.09.22

[알고리즘] 빅오(Big-O) 표기법

어떠한 알고리즘을 작성했을 때 알고리즘의 성능은 어떻게 측정할 수 있을까? Big-O 표기법은 알고리즘의 수행 시간을 측정하여 성능을 표기하는 것이다. 그렇다면 Big-O 표기법을 사용하는 이유와 대략적으로 본인이 설계한 알고리즘의 시간 복잡도를 어떻게 구하는지 알아보자. Big-O를 사용하는 이유 알고리즘의 성능을 측정하기 위해서 Big-O, Big-Ω, Big-θ 를 사용할 수 있다. Big-Ω : 빅 오메가는 어떠한 알고리즘이 최적의 조건에서 실행될 때 사용할 수 있는 표기법이다. 예를 들어 이미 정렬되어 있는 숫자들에 퀵 정렬을 진행하면 N만큼의 시간 복잡도를 갖게되며 더 이상 빠르게 할 수 없을 것이다. 이처럼 알고리즘이 최선의 경우 수행되는 시간을 측정할 때 사용할 수 있다. Big-θ : 빅..

CS/알고리즘 2021.09.22
반응형