본문 바로가기

Tech

(554)
[Network] NAT와 비슷해! : LB(LoadBalancer) 원리를 이해해보자 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 응용 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 L4 계층인 Transport 계층에서의 스위치인 로드 밸런서(Load Balancer, 이하 LB)라고 불리는 시스템의 동작 원리에 대해 이해해보도록 하자. 로드 밸런서는 한국어로 번역하면 부하 분산기를 의미한다. 여기서 '부하'란, 서버에 들어오는 요청이 많아짐에 따라 발생하는 부하를 의미한다.1. LB는 NAT와 비슷한 원리로 동작한다!저번 시간에 공유기가 동작하는 원리인 NAT에 대해 배웠었다. 그런데 부하 분산기..
[Network] 인터넷 공유기의 작동원리: NAT(Network Address Translation) 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 응용 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 공유기가 작동되는 원리인 NAT(Network Address Translation)에 대해 알아보고 NAT의 여러 종류와 동작 방식에 대해서도 알아보도록 하자. 그에 앞서서 약간의 사전 지식이 필요한데, 이에 대해서 먼저 짚고 넘어가보자. 1. 공유기의 원리 Overview 요즘 현대인이 거주하는 집에서 흔하게 볼 수 있는 공유기 환경을 생각해보자. 보통은 아래와 같은 구조로 인터넷이 연결되어 있을 것이다. 대부분의 집에는 보통 IP..
[Newtork] 네트워크의 3가지 구조: Inline, Out of path, Proxy 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 응용 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 네트워크의 대표적인 3가지 구조인 Inline, Out of path, Proxy 각각에 대해 알아보도록 하자. 만약 네트워크를 공부하다가 못 보던 네트워크 장치(스위치)에 대해 알게 되었다고 한다면 가장 먼저 앞으로 소개할 3가지 네트워크 구조 중 어떤 것에 속하는지 판단부터 해보자. (참고로 앞으로 소개할 네트워크 구조 중 하나에만 반드시 속해야 하는 것은 아니고 한번에 2개의 구조에 같이 속할 수도 있다) 앞으로 소개할 네트워크..
[고성능파이썬] 이터레이터(iterator)와 제네레이터(generator) 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 파이썬에서 반복적인 동작을 수행하는 데 많이 사용되는 iterator(이하 이터레이터)와 generator(이하 제네레이터)에 대해서 배워보도록 하자. 1. iterator 와 generator 간의 관계 이터레이터와 제네레이터 간의 관계에 대해서는 항상 헷갈리는 것 같다. 이 두 개념 간의 차이점을 설명할 때 서로 동일한 수준의 비교는 적절하지 않은 것 같다. 동일한 수준의 비교라 하면 예를 들어, BMW와 Audi 라는 브랜드는 자동차 브랜드라는 동일한 수준을 갖고 있다고 할 수 있다. 하지만 이터..
[고성능파이썬] 사전(dictionary) 과 셋(set) 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 파이썬의 자료구조 중 정렬되지 않은 데이터를 탐색하는 문제에 적합한 dictionary(이하 사전)과 set(이하 셋)에 대한 내용을 공부해보면서 알아두면 좋을 내용들에 대해 정리해보고자 한다. 1. 조회도 한 번에, 삽입도 한 번에! 셋과 사전은 특정 데이터를 고유하게 참조할 수 있는 별도 객체가 있는 상황에서 가장 이상적인 자료구조이다. 여기서 '고유하게 참조할 수 있는 별도 객체'란, 'key : value' 로 이루어진 자료구조 중 'key'에 해당하는 값이다. 이 key 라는 참조하는 객체는 ..
[Network] L4 계층의 TCP/UDP 그리고 웹의 기술 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 기초 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 OSI 7 계층 중 전송 계층에 해당하는 L4 계층의 TCP/UDP에 대해 알아보고, 웹(Web)이라는 기술이 역사적으로 어떻게 발전해왔는지 살펴보면서 핵심 요소들을 이해해보자. 1. TCP는 논리적 연결이다 TCP는 물리적인 것이 아닌 논리적 연결이다. 물리적인 연결은 L2 스위치처럼 말 그대로 진짜 물리적인 회선을 가지고 장치 간에 진짜 연결을 하는 것이다. 하지만 TCP는 이러한 물리적 연결이 아닌 마치 가상화된 논리적 연결이다..
[Network] OSI의 네트워크(L3) 계층에 대해 배워보자 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 기초 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 OSI 7 계층 중 네트워크(L3) 계층에 해당하는 내용에 대해 알아보도록 하자. 1. L3 계층 구현체인 인터넷의 식별자: IP 주소 L3 계층인 네트워크 계층에서 구현체는 인터넷이었고, 그 인터넷에 대한 식별자는 IP 주소라고 이전 포스팅에서 배웠다. 그러면 IP 주소는 어떻게 생겼을까? 여기에서는 IP 주소 종류 중 IPv4 주소에 대해서만 다룬다. IPv4 주소는 총 32비트로 8비트가 4개로 구성되어 있다. 하나당 8비트 이..
[Network] 네트워크 용어의 정리와 OSI의 데이터링크(L2) 계층 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 기초 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 네트워크를 이해하기 위해 사전에 학습해야 할 관련 용어에 대한 정리와 OSI 계층 기준의 L2 Layer인 데이터링크 계층에서 알아두어야 할 개념에 대해 살펴보자. OSI 계층에 대해서는 예전 포스팅을 참조해보자. 1. OSI 7 Layer 개념에 대응되는 구현체(Implementation) OSI 7 계층은 어떠한 실체가 있는 구현체가 아닌 추상화된 개념에 해당한다. 예를 들어서, 프로그래밍 언어라는 것은 추상화된 개념이고 어Pyt..
[CS] CPU 스케쥴링, Process 간 통신방법, 가상 메모리(VMS) 🔊 해당 포스팅은 YouTube 채널 널널한 개발자님이 제공하시는 무료 강의 영상인 운영체제와 시스템 프로그래밍 영상을 보고 개인적인 정리 목적하에 작성되었습니다. 하단에 사용된 자료는 필자가 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 간략하게 CPU 스케쥴링과 프로세스들 간에 통신하는 여러가지 방법, 그리고 가장 중요하다고 할 수 있는 가상 메모리 공간(VMS, Virtual Memory Space)에 대해 알아보도록 하자. 1. CPU 스케쥴링의 주체는 OS다 저번 포스팅에서 프로세스에 대해 다루면서 운영체제(이하 OS)는 프로세스를 단위로 하여 파일 또는 전산자원(CPU, RAM 등)에 대한 접근 제어를 수행한다고 했다. 여기서 전산자원에 대한 접근 제어라는 것이 바로 "어떤 프로세스는 C..
[CS] Process(프로세스) 와 Thread(쓰레드) 🔊 해당 포스팅은 YouTube 채널 널널한 개발자님이 제공하시는 무료 강의 영상인 운영체제와 시스템 프로그래밍 영상을 보고 개인적인 정리 목적하에 작성되었습니다. 하단에 사용된 자료는 필자가 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 CS를 공부하면서 가장 헷갈리는(?) 개념들인 프로세스와 쓰레드에 대해 알아보도록 하자. 1. 프로세스, 너는 누구니? 훌륭한 나무위키에 따르면 프로세스란, 컴퓨터에서 실행중인 프로그램을 의미한다. 예를 들어보자. 우리는 MS Word 라는 애플리케이션을 이용하려고 한다. 가장 처음에 할 것은 컴퓨터에 MS Word 라는 프로그램을 설치해야 한다. Microsoft365 사이트에가서 이러쿵 저러쿵 로그인을 한 후 MS Word 프로그램을 컴퓨터에 잘 설치했다. 지..
[CS] 컴퓨터 구조와 성능향상 🔊 해당 포스팅은 YouTube 채널 널널한 개발자님이 제공하시는 무료 강의 영상인 운영체제와 시스템 프로그래밍 영상을 보고 개인적인 정리 목적하에 작성되었습니다. 하단에 사용된 자료는 필자가 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 컴퓨터 구조를 살펴보면서 컴퓨터의 성능을 향상시키기 위해 어떤 구조로 작동하는지, 또 성능 향상하는 과정에서 역사적으로 등장해왔던 새로운 개념들에 대해서도 이해해본다. 1. 컴퓨터는 3층 구조이다 컴퓨터는 크게 3층 구조로 되어 있다. 아래 그림을 보자. 예를 들어, 파이썬의 print() 문을 호출했을 때, 컴퓨터는 어떤 과정으로 진행되는지 살펴보자.(물론 아래보다 더 세세한 단계가 있을 수 밖에 없다. 단지 강의 속에서 다루는 내용까지만 반영하였다) 위 그림이..
[CS] 컴퓨터의 기억장치와 운영체제(OS)의 역할 이번 포스팅에서는 컴퓨터의 기억장치와 운영체제의 역할에 대해서 개괄적으로 알아보도록 하자. 1. 컴퓨터의 기억장치 먼저 컴퓨터의 기억장치라는 것은 곳 정보 즉 데이터를 담는 저장공간을 의미한다. 컴퓨터를 이루고 있는 기억장치의 개괄적인 그림은 아래와 같다. 위 기억장치 종류 중에서 먼저 하드디스크라고 불리는 HDD에 대해서 알아보도록 하자. 물론 여기서 SSD, USB 까지 다루지는 않지만 SSD, USB도 HDD랑 비슷한 계열의 저장장치라고 생각해주면 되겠다. 1-1. 용량도 크고 휘발되지 않지만 너무 느려! HDD 하드디스크는 컴퓨터의 보조기억장치 중 하나로 용량도 컴퓨터 내부에 있는 다른 저장장치들에 비해 매우 크다. 또한 컴퓨터의 전원을 끄더라도 하드디스크에 있는 데이터들을 휘발(삭제)되지 않는다..
[고성능파이썬] 리스트(list)와 튜플(tuple)에 관하여 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 파이썬의 기본적인 자료구조에 속하는 리스트(list)와 튜플(tuple)에 대해 좀 더 깊게 이해해보도록 하자. 리스트와 튜플은 어떤 점이 같은지, 또 차이점이 무엇인지, 그에 따라 두 자료구조의 용도에 대해서도 알아보자. 1. 리스트와 튜플의 부모님: 배열 리스트와 튜플은 배열이라는 자료구조에 모두 속하는 자료구조들이다. 주의할 점은 여기서 배열이 python array 모듈로 지원하는 array 클래스도, Numpy의 array를 의미하는 것은 아니다. 말 그대로 자료구조 개념인 배열을 의미한다. ..
[강화학습] 강화학습을 모델로! Q-learning, Q-Network, DQN 🔊 해당 포스팅은 딥러닝 파이토치 교과서 서적의 강화학습 챕터 내용과 김성훈 교수님의 강화학습 기초 강의를 기반으로 개인적인 학습 및 정리를 위해 작성되었습니다. 하단에 등장하는 모든 자료들은 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 저번 포스팅에서 학습한 MDP의 행동-가치 함수 이른바 Q-함수를 활용하는 Q-learning, Q-Network, 그리고 깊은 신경망을 적용한 DQN(Deep Q Network)에 대해서 알아보고, 이를 코드로 구현하는 방법을 소개한다. 해당 포스팅은 반드시 MDP의 행동-가치 함수를 이해해야 하므로 저번 포스팅을 읽고 오거나 해당 포스팅이 너무 내용이 길고 복잡하다면 직관적인 김성훈 교수님의 강의를 보고 오도록 하자. 1. Q-형님이 안내하는 곳으로, Q-..
[pytorch] pytorch로 구현하는 Attention이 적용된 Seq2Seq 이번 포스팅에서는 pytorch로 Attention 기법이 적용된 Sequence to Sequence 모델을 직접 구현해 보자. 그리고 구현에 앞서 (필자가..) 주로 헷갈리는 시퀀스 데이터가 모델에 들어갈 때의 입/출력 형상이 어떤 과정으로 진행되는지도 살펴보자. 1. 시퀀스 데이터는 모델의 입력으로 어떤 형태(shape)로 들어갈까? Tabular 데이터, 이미지 데이터와는 다르게 시퀀스 데이터는 시퀀스 길이(윈도우 길이)라는 게 존재한다. 그래서 시퀀스 데이터를 처음 다루는 사람에게는 시퀀스 데이터를 딥러닝 모델의 입력으로 넣어줄 때, 어떠한 형상으로 넣어주어야 하는지 또는 모델이 출력을 내뱉었을 때, 그 출력의 형상이 왜 이렇게 되는지에 대해서 헷갈릴 수 있다. 이번 목차에서는 그 헷갈리는 부분..
[강화학습] 강화학습의 기반, 마르코프 결정 과정(Markov Decision Process) 🔊 해당 포스팅은 딥러닝 파이토치 교과서 서적의 강화학습 챕터 내용을 기반으로 개인적인 학습 및 정리를 위해 작성되었습니다. 하단에 등장하는 모든 자료들은 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 강화학습의 개념이 무엇인지 간단히 알아보고, 강화학습의 기반이 되는 마르코프 결정 과정(이하, MDP)에 대해 알아보도록 하자. 1. 강화학습의 5요소에 대해 알아보자 먼저 강화학습이란, 어떤 환경에서 에이전트가 어떤 행동을 했을 때, 그것이 잘한 행동인지 잘못된 행동인지를 판단하고 보상(또는 벌칙)을 주는 과정을 반복해서 에이전트 스스로 학습하게 하는 분야를 의미한다. 그래서 강화학습에서는 환경을 의미하는 '환경(Environment)' 이라는 것과 '에이전트(Agent)' 라는 구성요소를 사용..
[고성능파이썬] 프로파일링으로 병목 지점 찾기 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 이번 포스팅에서는 프로파일링을 통해 파이썬 코드의 병목 지점을 찾아보는 방법들에 대해서 배워본다. 프로파일링의 목표이자 효과는 코드의 병목 지점을 찾아 최소한의 노력으로 코드의 성능을 최대한 끌어올리는 것이다. 프로파일링 대상으로는 CPU 뿐만 아니라 측정 가능한 모든 자원이 된다. 메모리 사용량이나 네트워크 대역폭, 디스크 I/O 측정도 가능하다. 다시 말해, 시스템의 어느 부분이 느린지, 어디서 RAM을 많이 쓰는지, 디스크 I/O나 네트워크 I/O를 과도하게 발생시키는 부분이 어딘지를 확인할 수 있다. 기존 코드나..
[Git] git remote branch name conflict 를 아시나요? 이번 포스팅에서는 git 과 GitHub 이라는 remote repository 함께 사용하면서 발생할 수 있는 remote branch name conflict 이슈에 대해 알아보고, 이를 해결하는 방법에 대해 살펴보도록 하자. 1. branch name conflict 문제 이해하기 먼저 글 제목에 써있는 remote branch name conflict 이슈가 무엇인지에 대해 알아보도록 하자. 사실 이 이슈의 이름은 공식적으로 정해진 것은 아니고, 필자가 임의로 만든 이슈의 이름이다. 정확히 말하면 local branch 이름을 짓다가 발생하는 문제 중 하나이다. 사내에서든 팀 프로젝트에서든 다른 개발자 분들과 협업을 하기 위해서는 git에서 master 또는 main branch에서 작업을 하는..
[고성능파이썬] 고성능 파이썬을 어떻게 실현시킬 수 있을까? 🔊 해당 포스팅은 고성능 파이썬 2판 책 서적을 읽고 개인적인 학습 목적 하에 작성된 글입니다. 포스팅에서 사용되는 자료들은 책의 내용을 참고하되 본인이 직접 재구성한 자료임을 알립니다. 파이썬이라는 언어를 시작한지 어느덧 4년이 넘어가는 시기에 들어섰다. 중간에 다른 언어를 잠깐 찍먹해본 적은 있었지만 파이썬은 줄곧 손에서 놓지 않았었다. 나름대로 파이썬 실력이 많이 쌓여왔다고 생각했지만 이는 매우 건방진(?) 생각이었음을 최근에 깨닫고 있다. 그래서 파이썬에 대한 실력을 한 번 점프하는 시간을 가져야 겠다고 생각했다. 그러던 중 평소에 봐왔던 책들 중 고성능 파이썬이라는 책을 선택해서 깊게 파보기로 결정했다. 책의 목차를 보니 프로파일링하는 법, 비동기 처리, 파이썬을 컴파일하는 CPython, Cy..
[Python] decorator와 contextmanager, wraps의 사용 이번 포스팅에서는 파이썬 데코레이터에 대한 개념과 이 데코레이터와 관련된 개념들인 contextmanager, wraps의 쓰임에 대해서도 알아보도록 하자. 1. decorator란? 데코레이트는 말 그대로 '꾸미다' 라는 의미이다. 하지만 파이썬에서는 꾸미다라는 의미가 직관적이지는 않은 듯 하다. 그래서 개념 확립이 좀 필요할 듯 하다. 우선 데코레이터를 사용하는 예시 코드를 살펴보자. def decorator(func): print("decorator init") return func @decorator def add_ten(x): return x + 10 res = add_ten(100) print(res) # 출력 # decorator init # 110 decorator 라는 이름의 함수를 만들..