Tech (580) 썸네일형 리스트형 [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 프로그램을 컴퓨터에 잘 설치했다. 지.. [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-.. 이전 1 2 3 4 5 ··· 29 다음