본문 바로가기

Tech

(584)
[C] 파일 입/출력 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 C언어에서의 파일 입/출력에 대해 배워보도록 하자. C언어 포스팅 시리즈에서 초반에 문자열 입/출력을 다룬 적이 있었다. 하지만 그 이후로 학습을 진행하면서는 모두 주기억장치인 RAM, 엄밀히 말하면 각 프로세스 당 부여되는 가상 메모리를 다루는 것이었다. 이제는 주기억장치와는 다르게 컴퓨터 전원을 꺼도 휘발되지 않는 보조기억장치인 SSD, HDD에서 데이터를 읽고 쓰는 파일 입/출력에 대해서 배워보도록 하자.  참고로 RAM을 이용할 때의 데이터는 우리가 메모리를 동적할당할 때나 소스..
[C] 서로 다른 유형의 자료형을 모을 수 있는 구조체와 공용체 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 구조체와 공용체에 대해서 알아보고 사용하는 방법에 대해 알아보자.1. 구조체를 만들어보자!우선 구조체랑 비교한다고 하면 이전에 배웠던 배열이 비교군이 될 수 있겠다. 구조체와 배열의 공통점이라고 한다면 여러 자료형을 모아 새로운 하나의 형식으로 기술할 수 있다는 것이다. 하지만 배열은 그 여러 자료형들이 반드시 같은 유형(ex. 정수, 실수, 문자)이어야 하는 반면 구조체는 서로 다른 유형의 자료형들이 모이는 것이 가능하다. 물론 구조체에서 배열처럼 같은 유형의 자료형이여도 상관은 없다..
[C] 함수 응용 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 이전에 배웠던 C언어에서 함수를 정의하는 방법에서 더 나아가 좀 더 응용하는 내용에 대해서 알아보도록 하자.1. 함수에 매개변수를 전달하는 2가지 기법함수에 매개변수를 전달하는 방법으로는 크게 2가지가 존재한다. 첫 번째로는 우리가 흔히 사용해왔던 call by value 방식이다. 예시코드는 아래와 같다. #include int Multiply(int a, int b) { return a * b;}int main(void) { int res = 0; res = Mult..
[C] 메모리와 포인터 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 드디어 C언어 학습의 고비(?)인 메모리와 포인터에 대해 배워보도록 하자. 1. 여기서 메모리는 '가상 메모리'이다.앞으로 언급할 '메모리'라는 것은 모두 가상 메모리(Virtual Memory)를 의미한다. 예전 OS 관련 포스팅에서 가상 메모리에 대해 배웠던 적이 있다. 가상 메모리가 등장한 이유를 알아보려면 사실 옛날로 돌아가야 하는데, 관련해서 널널한 개발자님이 본인 유튜브에 공개한 영상이 있어서 10분 남짓되는 영상이니 꼭 한번 시청해보고 글을 읽는 것을 제안한다. 영상을 보았..
[C] 제어문과 반복문, 그리고 배열과 함수 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다.  이번 포스팅에서는 C언어로 제어문과 반복문을 작성하는 방법을 배워보고, 이후에는 C언어에서 배열과 문자열을 다루는 방법, 마지막으로는 함수를 정의하는 방법에 대해 알아보도록 하자.1. 제어문 : if 문!모든 언어에서 그렇듯이 제어문은 if 라는 키워드를 사용해서 정의한다. if 문을 사용하는 예시 소스코드를 보자. #include int main(void) { int nAge = 0, threshold = 20; printf("나이를 입력하세요: "); scanf("%d", &nAge..
[C] 다양한 연산자에 대해 알아보자 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 C언어에서 사용하는 다양한 연산자에 대해 알아보도록 하자. 연산자의 종류에는 산술 연산자, 대입 연산자, 형변환 연산자, 단항 증/감 연산자, 비트 연산자, 관계/논리/조건 연산자, size of 연산자가 있다. 그리고 이 연산자들 간에는 실행되는 우선순위가 존재한다. 그리고 만약 우선순위가 같은 연산자가 존재한다면 대부분은 왼쪽에 있는 연산자를 먼저 수행하게 된다. 연산자의 우선순위에 대한 표는 다음과 같다. 1. 산술 연산자가장 먼저 알아볼 연산자는 산술 연산자이다. 대표적인 예시로..
[C] 문자와 문자열의 입/출력 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 최근에 CS(Computer Science) 공부를 이론으로 접하면서 어딘가 답답한 느낌이 들었다. 뭔가 이론적으로는 배우긴 했는데, 피부에 와닿지 않는 느낌이었다. 한참을 고민하다가 문득 생각이 들었다. CS를 코드 레벨로 이해하면 어떨까? 했다. 그리고 필자가 메인으로 사용하는 Python은 C로 구현된 CPython 구현체이다. 결국 Python의 내부 동작을 깊이 이해하기 위해서라도 C언어에 대한 학습은 필요했다. 그래서 널널한 개발자님의 강의를 결제하고 2가지 목적(CS를 코드 레벨로 이해하기,..
[Python] 파이썬에서 웹서버는 어떤 구조로 통신할까? 이번 포스팅에서는 파이썬을 활용하는 웹서버에서 클라이언트와 어떤 구조로 통신하는지에 대해 알아보려고 한다. 참고로 앞으로 소개할 내용은 애플리케이션 레벨 정도(컴퓨터 구조로 친다면 OS의 Kernel 모드 정도의 수준까지) 까지의 구조를 이야기하며 웹서버의 종류에 대해서 소개할 때는 Pyhton에만 국한된 이야기를 하려고 한다. 필자도 여태껏 개발해오면 Python을 활용해서 웹서버를 개발할 수 있는 여럿 프레임워크를 만지고 다루기도 해보았다. 대표적으로 Flask가 있고, 요즘에는 FastAPI가 있다. 기타 풀스택 프레임워크도 사용해보았지만, 여기서는 주로 백엔드 서버를 구성하는 데 사용되는 Flask, FastAPI가 주요 타겟일 것 같다. 비록 예전 포스팅에서 웹서버가 역사적으로 어떤 방식으로 발..
[Python] 동시성(concurrency)과 병렬성(parallelism) 이해하기 이번 포스팅에서는 여러 개의 작업을 한꺼번에 같이 수행할 수 있는 동시성(concurrency)과 병렬성(parallelism)에 대한 개념에 대해 이해해보자.  먼저 동시성에 대해 이해하기에 앞서서 동기, 비동기에 대한 개념부터 이해하고 넘어가는 것이 좋다. 동기, 비동기에 대한 개념적인 차이점이 무엇이고, 이를 파이썬으로 어떻게 구현할 수 있는지에 대해서도 알아보자. 그리고 난 뒤, 동시성과 병렬성에 대해 알아보도록 하자.1. 동기(synchronous) vs 비동기(asynchronous)동기 실행이라는 것부터 알아보자. 동기의 또다른 이름은 '순차적인 실행'이라고 정의할 수 있다. 예를 들어, 텍스트 데이터를 활용한 머신러닝 모델링을 한다고 해보자. 흐름은 다음과 같다. [1.텍스트 데이터 추출 ..
[Network] 재택근무에서 활용하는 VPN은 어떻게 동작할까? 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 응용 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 코로나 시기 이후로 가속화됨에 따라 대중화 기술이 된 VPN(Virtual Private Network)에 대해서 알아보도록 하자. 1. PN(Private Network, 사설 네트워크)이 뭔데?VPN에 대해서 알기 전에 PN(사설 네트워크) 즉, Private Network에 대해서 먼저 이해할 필요가 있다. PN에 대한 정의를 텍스트로 설명하면 “보안성을 위해 물리적으로 통제 가능한 네트워크”이다. 또 다른 말로 하면 LAN이..
[Network] NAT와 비슷해! : LB(LoadBalancer) 원리를 이해해보자 🔊 해당 포스팅은 인프런 강의 널널한개발자님의 외워서 끝내는 네트워크 핵심이론 - 응용 내용을 공부하면서 배운 내용을 저만의 방식으로 재정리하고자 하는 목적 하에 작성되는 포스팅입니다. 아래 포스팅에서 사용되는 모든 자료는 제가 직접 재구성했음을 알립니다. 이번 포스팅에서는 L4 계층인 Transport 계층에서의 스위치인 로드 밸런서(Load Balancer, 이하 LB)라고 불리는 시스템의 동작 원리에 대해 이해해보도록 하자. 로드 밸런서는 한국어로 번역하면 부하 분산기를 의미한다. 여기서 '부하'란, 서버에 들어오는 요청이 많아짐에 따라 발생하는 부하를 의미한다.1. LB는 NAT와 비슷한 원리로 동작한다!저번 시간에 공유기가 동작하는 원리인 NAT에 대해 배웠었다. 그런데 부하 분산기인 LB가 ..
[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 프로그램을 컴퓨터에 잘 설치했다. 지..