앗! 광고가 차단되었어요!

글 내용이 방문자께 도움이 되었다면, 광고 차단 프로그램 해제를 고려해주세요 😀.

공돌이 12

C, TCP 기반으로 간단한 HTTP 서버 작성하기

이 글에서는 대학교 수업 중 "네트워크 프로그래밍"의 단골 과제인, C와 TCP를 기반으로 HTTP 서버를 작성한다. (안타깝게도) "C, C++를 이용한 웹서버"라는 키워드로 블로그 유입이 많이 되고 있어 복습할 겸 작성해봤다. 오늘 필자가 개발하고자 하는 HTTP 서버는 리눅스에서 동작할 수 있는 간단한 서버로, 서버 프로그램(a.out)이 존재하는 디렉터리를 기준으로 파일을 접근할 수 있는 서버다. 예를 들어 a.out이 /home/user/c-serv/에 있고, 8000번으로 bind 한다면 브라우저에서 localhost:8000/index.html을 요청하면 /home/user/c-serv/index.html 파일을 반환하고, 브라우저에서 localhost:8000/index.css를 요청하면 ..

공돌이 2020.11.22

문서화를 위한 drf-yasg 적용하기

drf-yasg는 django-rest-framework으로 정의한 API를 문서화할 수 있는 패키지입니다. drf-yasg의 Repository에서는 다음과 같이 소개하고 있습니다. drf-yasg - Yet another Swagger generator Generate real Swagger/OpenAPI 2.0 specifications from a Django Rest Framework API. drf-yasg를 단순히 적용만 해도 정의한 모델, API 목록을 볼 수 있는 문서를 생성할 수 있으며, 필요에 따라 개발자가 내용을 추가하거나 수정할 수 있습니다. 다만 처음 적용할 때라면 (제 기준에서) 적용 후기가 별로 없고, 패키지 문서화도 조금은 부족한 느낌이라서 헤맬 수도 있을 것 같습니다. 이..

공돌이 2020.10.26

Python: Decorator

오늘은 데코레이터의 예를 살펴보기로 했습니다. 먼저 데코레이터에 대해서 살펴볼까요? Decorator with @ Syntax The current syntax for function decorators as implemented in Python 2.4a2 is: @dec2 @dec1 def func(arg1, arg2, ...): pass This is equivalent to: def func(arg1, arg2, ...): pass func = dec2(dec1(func)) without the intermediate assignment to the variable func. The decorators are near the function declaration. The @ sign makes i..

공돌이 2020.10.26

Python: Context Manager

학습하면서 작성한 내용이니 틀린 내용이 있으면 말씀해주세요! Context Manager의 개념 context manager란 with statement가 실행될 때의 runtime context를 결정하는 객체입니다. 여기서 runtime context란 with의 코드 블록이 실행되기 전에, 실행된 후에 수행할 행위로 볼 수 있습니다. 예를 들어, 한번쯤 사용해보셨을 open()도 context manager를 반환합니다. >>> with open("sample.txt", "a") as f: ... # do something ... print(type(f)) ... 여기서 보실 수 있듯이, TextIOWrapper의 부모는 TextIOBase, TextIOBase의 부모는 IOBase입니다. # _p..

공돌이 2020.10.26

Python: Generator

이번 주에는 Generator에 대해서 알아보기로 했습니다. 레퍼런스는 PEP 255 문서입니다. 이 레퍼런스는 파이썬의 Generator 개념과 yield statement에 대해 설명하고 있습니다. 학습을 위해 문서의 일부를 번역, 의역하였으며, 오역이 있다면 말씀 부탁드립니다! Generator 개념이 생겨난 이유 Motivation의 첫 번째 문장은 다음과 같습니다: When a producer function has a hard enough job that it requires maintaining state between values produced, most programming languages offer no pleasant and efficient solution beyond addin..

공돌이 2020.10.26

Coursera 재정지원 (Financial Aid) 요청하기

나는 Andrew Ng 교수님의 Machine Learning 코스를 수강하기 위해 코세라에 처음 가입했다. 코스(강좌)를 듣는 방법은 audit 모드와 enroll 모드가 있다. 두 모드 모두 학습 영상에 접근할 수 있다. 차이점은: audit 모드는 퀴즈와 과제에 접근할 수는 있지만 채점받지 못하며, 수료증을 받지 못한다. enroll 모드는 모든 자료에 접근 가능하며, 강의를 모두 듣고 과제를 Pass 하면 수료증을 받을 수 있다. Machine Learning의 enroll fee는 9만원 정도 한다. Machin Learning의 고급 코스로 Deep Learning Specialization Course가 존재하는데, 이에 enroll fee는 월마다 4만원이다. 나는 학생이기 때문에, fee..

공돌이 2020.07.26

C++로 웹서버 만들기

[이 글은 2019년 9월에 작성된 글입니다] * C, TCP 관련 웹서버 과제는 아래 링크를 참조하세요. C, TCP 기반으로 간단한 HTTP 서버 작성하기 이 글에서는 대학교 수업 중 "네트워크 프로그래밍"의 단골 과제인, C와 TCP를 기반으로 HTTP 서버를 작성한다. (안타깝게도) "C, C++를 이용한 웹서버"라는 키워드로 블로그 유입이 많이 되고 있어 hello-cruiser.tistory.com 안녕하세요. 크루저입니다. C++로 웹서버를 만들다니. 정말 해괴한 경우입니다. 하지만 생각해보면 또 C++ 이 빠르기도 하고 (물론 다른 언어들도 빨라져서 운용하는 데에는 문제가 없습니다) 그리고 라즈베리파이 같은 보드에서 C++을 쓰면 좋을 것 같아서 C++로 웹서버를 만들어보기로 했습니다. 제..

공돌이 2020.06.28

안녕 Tmax OS!

[이 글은 2019년 8월에 작성된 글입니다] 안녕하세요. 크루저입니다. 뉴스를 보다가 Tmax사에서 Tmax OS HE(Home Edition)을 배포한다고 하여 설치하고 사용해보기로 했습니다 +_+. 예전에 Tmax OS와 관련된 사건사고가 많았던 걸로 기억하는 데, 이번에는 더 나아졌는지 궁금하더라고요. 제 컴퓨터는 소중하니까 가상 머신을 이용했습니다. 머신 타입은 리눅스, 우분투로 했습니다. 처음 설치 시에는 TmaxOS 이미지를 삽입해주세요. 직접 호스트 OS로 설치하는 경우 T-Up이라는 걸 사용한다던데... 윈도우 날아갈까 봐 불안해서 사용하지 않았습니다. 이미지 및 T-Up은 Tmax OS 홈페이지에서 다운로드할 수 있습니다. 안녕 Tmax야. 반갑다. 설치를 진행해줍니다. 호스트로 설치하..

공돌이 2020.06.28

안녕 BunsenLabs Linux!

[이 글은 2019년 7월에 작성된 글입니다] 판교로 잠시 거처를 이동했는 데, 주말에 할 게 없더군요. 그래서 가상으로 OS나 돌려볼까 고민 중에, BunsenLabs라는 Linux Distribution을 설치해보기로 했습니다. BunsenLabs는 원래 Crunchbang Linux Distribution에서 발전된 것이라고 합니다. 저는 예전에 Crunchbang을 사용한 적이 있는데요. 그때는 리눅스가 뭔지도 모르는 때라서, 가벼움만 느끼고 삭제했던 적이 있습니다. 예전 Crunchbang이나 지금 발전된 BunsenLabs나 모두 Debian 계열입니다. 우분투를 쓰는 저에게는 익숙하네요. BunsenLabs는 가벼운 리눅스로 소문나 있고,하드웨어 요구 사양은 다음과 같습니다. 윈도우 7 32..

공돌이 2020.06.28

미래를 바꾼 아홉가지 알고리즘 (1) - 검색엔진 인덱싱 일부 요약

[알고리즘의 (짧은) 정의] 알고리즘이란, 문제를 푸는 데 필요한 단계의 순서를 명확히 명시하는 구체적인 계산법입니다. 알고리즘은 명확하게 기술되어야 하며, 문제를 푸는 데 여러 가지 방법이 있으므로, 특정 기준으로 여러 알고리즘을 비교할 수 있습니다. (e.g. 계산량이 많은가? 시간은 어느 정도 걸리는가? 효율성의 문제) 2장에서 다루는 내용은 검색엔진 인덱싱입니다. 부제로는 '세상에서 가장 큰 건초더미에서 바늘 찾기'라고 되어있습니다. 이 장에서는 검색엔진이 가지는, 방대한 양에서의 검색 방법을 다룹니다. 웹 쿼리를 발행하면 검색엔진에서는 매칭과 랭킹을 수행하게 됩니다. 매칭은 검색어에 부합하는 결과를 가져오는 과정이며, 랭킹은 최선의 결과를 적절한 순서로 선별하는 과정입니다. 랭킹은 검색엔진에서 ..

공돌이 2020.06.28