반응형

Computer Science 30

[Algorithm] leetcode: Validate Binary Search Tree (python)

주어진 Binary Search Tree가 유효한지를 확인하는 알고리즘입니다. Binary Search Tree는 하나의 root node가 존재할 경우 왼쪽에 있는 모든 노드는 해당 node보다 값이 작아야 하고, 오른쪽에 있는 모든 노드는 root node보다 값이 커야합니다. 때문에 바로 이전의 노드의 값과 비교하여 왼쪽이라면 이전 노드의 값보다 작은 지를 비교하고, 오른쪽으로 가게 되면 이전 노드의 값보다 큰지를 비교하면 됩니다. 하지만 만약 아래와 같은 케이스라면 어떨까요? 3 / \ 1 5 / \ 2 6 2은 5보다 작지만, 5 이전의 node인 3보다도 값이 작게 됩니다. 이는 오른쪽에 있는 node는 모두 기준이 되는 node보다 값이 커야 한다는 rule을 벗어납니다. 이러한 경우는 이전..

[Network] gRPC: MSA에서 서비스 간 저용량 고성능으로 통신하기

최근 MSA(Micro Servie Architecture)가 다양한 서비스에 적용됨에 따라 각각의 마이크로 서비스들이 통신하는 네트워크 비용이 자연스레 상승하게 되었습니다. 그런데 시스템들 간 모듈들이 언어가 다양하다 보니 데이터를 주고받는 게 쉽지 않았고, REST API로 개발하여 통신을 주고받으려고 하니, 각 모듈별로 서버를 띄우는 것도 부담스러운 환경이 되었습니다. 이에 따라 좀 더 가볍고 빠르며, 언어에 종속적이지 않게 메세지를 주고받을 수 있는 방법을 고민하던 중 나온 것이 바로 gRPC입니다. gRPC란 google에서 만든 RPC라는 뜻으로 프로세스간 통신을 위한 기법 중 하나입니다. 특징적으로는 다른 서버에 있는 함수를 호출할 때 마치 같은 서버에 있는 함수를 호출하듯 간편하게 호출할 ..

[Teah] Load Balancer(로드 밸런서)

로드 밸런서 4차 산업혁명 시대가 되고 인터넷을 통해 거의 모든 작업들이 처리되고 있습니다. 웹툰부터 시작해서 페이스북 좋아요나 유튜브 스트리밍까지 모든 전자기기가 인터넷을 이용해 통신하고 있습니다. 그로 인해 하나의 서버가 모든 트래픽의 부하를 감당하지 못하는 상황이 오게 됩니다. 이에 따라 분산 시스템을 구축하게 되는데, 쉽게 말해 같은 작업을 하는 여러대의 서버를 띄워서 트래픽을 여러 대의 서버가 분산해서 처리하게 되는 형태입니다. 이때 클라이언트의 요청을 이로간성있게 여러 대의 서버로 분산시켜주는 기술을 바로 로드 밸선싱이라고 합니다. 로드 밸런서는 서버에 가해지는 부하를 분산해주는 장치 또는 기술을 통칭하는 단어로서 클라이언트와 서버 사이에서 한 대의 서버에 부하가 집중되지 않도록 트래픽을 관리..

[Network] Port와 포트 포워딩(Port-Forwarding)이란?

Port란 예를 들어 하나의 서버가 있을 때 이 서버는 다양한 역학을 하게 되는 경우가 있습니다. 웹사이트를 전달해주는 역할, 그리고 파일을 요청하는 역할이 있다고 해보겠습니다. 이럴 경우 클라이언트가 서버에 요청을 보냈을 때, 웹사이트 요청인지 파일 요청인지 구분할 수 있는 방법이 필요하게 됩니다. 이때 바로 Port를 사용하게 됩니다. 포트는 숫자로 표현하게 되어 있으며 65535번까지 존재하며 아래와 같이 3종류로 표현이 됩니다. 0번 ~ 1023번: 잘 알려진 포트 (well-known port) 1024번 ~ 49151번: 등록된 포트 (registered port) 49152번 ~ 65535번: 동적 포트 (dynamic port) 잘 알려진 포트 번호의 대표적 예는 다음과 같습니다. 20 :..

[Network] CORS(Cross-Origin Resource Sharing)란?

CORS란? CORS란 Cross-Origin Resource Sharing의 약자로 번역하면 교차 출처 리소스 공유라는 뜻이다. 기본적으로 클라이언트에서 서버로 요청을 보낼 때, 클라이언트와 서버의 도메인이 일치하지 않으면 요청이 차단됩니다. 예를들어 localhost:8000번 클라이언트에서 localhost:8080 서버로 요청을 보내면 서버는 다른 포트 즉 다른 도메인에서 연결이 왔기 때문에 요청을 차단하게 됩니다. 이러한 요청이 왔을 때 구글 크롬 탭을 열어보면 아래와 같이 Access-Control-Allow-Origin 헤더가 없다는 에러가 뜨게 됩니다. CORS 문제를 해결하기 위해서는 응답헤더에 Access-Control-Allow-Origin이라는 헤더를 넣어주어야 합니다. 이 헤더는 ..

[Tech] IEEE754 부동 소수점(Floating Pointing)

일반적으로 사람은 정수를 표현할 때 10진수를 사용하여 표현합니다. 하지만 컴퓨터는 사람과 달리 2진수를 이용해 수를 표현해야 하기 때문에 자릿수에 따라 의미를 부여하는 방식을 이용해 수를 표현하곤 합니다. 대표적인 방식으로 부호화 방식이 있는데, 2진수로 표현된 수의 제일 앞자리를 부호비트로 사용하여 0일 경우 양수로 표현하고 1일 경우 음수로 표현하는 방법입니다. 그렇다면 음수는 어떻게 표현할까요? 음수를 표현하는 방식은 크게 두 가지로 나누어집니다. 고정 소수점 정수를 표현하는 비트와 소수를 표현하는 비트의 비트 수를 사전에 미리 정해두고 해당 비트만큼 의미를 부여하여 소수를 표현하는 방식입니다. 예를 들어 실수 표현에 4byte(32bit)를 사용하고, 부호 표현에 1bit, 정수 표현에 16bi..

[OS] 메모리 단편화(Memory Fragmentation) : 페이징, 세그멘테이션

우리가 컴퓨터에서 어떤 프로그램을 실행하거나 어떠한 작업을 할 때 컴퓨터는 메모리에 해당 프로그램을 올리고 실행하게 됩니다. 그때 메모리의 공간을 연속적인 형태로 할당하여 사용하게 되는데요. 이러한 식으로 RAM에서 메모리 공간이 조각처럼 나뉘게 될 경우 사용 가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 메모리 단편화가 발생한다고 이야기 합니다. 그렇다면 메모리 단편화의 종류에 관해 살펴보도록 하겠습니다. 메모리 단편화는 내부 단편화와 외부 단편화로 구분이 가능합니다. 내부 단편화(Internal Fragmentation) 메모리를 할당할 때 프로세스가 필요한 양보다 더 큰 메모리가 할당되어서 프로세스에서 사용하는 메모리 공간이 낭비되는 상황을 이야기합니다. 예를 들어 어떤 프로그램을 실행시..

Computer Science/OS 2020.03.30

[Tech] 암호화 알고리즘

무언가 서비스를 개발하게 된다면 필수적으로 고려되어야 하는 사항이 바로 보안입니다. 보안은 다양한 방법으로 고려될 수 있지만 그 중 가장 기본적이면서도 중요한 것이 바로 암호화가 아닐까 싶습니다. 하지만 암호화란 그 종류가 다양하고, 지금도 계속해서 새로운 암호화 알고리즘이 개발되고 있습니다. 저 역시 서버 개발을 해오며 암호화를 해왔지만, 암호화의 종류에 대해 깊이 알지는 못했는데 http, https를 공부하며 다양한 암호 알고리즘이 존재하고 필요에 따라 선택하여 사용한다는 사실을 알게되어 공부한 내용을 바탕으로 해당 포스팅을 작성하게 되었습니다. 먼저 암호화 알고리즘에서 자주 사용하는 단어들을 정리하고 넘어가도록 하겠습니다. 평문(Pnaintext) : 해독 가능한 암호화 되지 않은 메세지. 암호문..

[Network] http와 https 차이

HTTPS란? HTTP는 Hyper Text Protocol의 약자로써 www(world wide web)사에서 정보를 주고 받는 프로토콜니다. 이름에서도 알 수 있듯이 http는 텍스트 교환방식이기 때문에 누군가 네트워크에서 신호를 가로챈다면 내용이 노출된다는 보안상의 문제가 있습니다. 이러한 문제를 해결하기 위해 나온 것이 바로 https입니다. https는 인터넷 상에서 정보를 암호화하는 SSL(Secure Socket Layer) 프로토콜을 이용해서 클라이언트와 서버가 데이터를 주고받는 통신 규약입니다. 따라서 http보다 보안상에 우위에 있습니다. SSL / TLS 인터넷 상에서 데이터를 안전하게 전송하기 위한 인터넷 암호화 통신 프로토콜을 의미합니다. 데이터를 송신할 때 http는 애플리케이션..

[OS] Synchronization 동기화란?

1. 동기화란? 동기화란 컴퓨터 공학의 영역 뿐만 아니라 클라우드 저장소와 같은 우리가 일상 생활 속에서 흔히 접하는 많은 애플리케이션이나 기기에서 접할 수 있는 단어입니다. 그 말의 뜻에서도 알 수 있듯이 무언가 연동된다라는 느낌이 있는 단어입니다. 컴퓨터 공학에서 뜻하는 동기화 역시 이와 다르지 않으며, 동기화란 프로세스 또는 스레드들이 수행되는 시점을 조절하여 서로가 알고 있는 정보가 일치하는 것을 의미합니다. 우리가 알다시피 컴퓨터는 프로세스 또는 스레드로 작업을 실행합니다. 예를 들어 a = 2 라는 자원이 있다고 해보겠습니다. P1이라는 프로세스는 a라는 값을 이용해서 어떠한 로직을 수행합니다. 그런데 만약 그 사이 P2라는 프로세스가 a의 값을 3으로 바꾸게 된다면 어떻게 될까요? 아마 프로..

Computer Science/OS 2020.03.27
반응형