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

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

공돌이 10

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

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

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

공돌이 2020.06.28

mysql UTF8 설정하기 (Ubuntu)

우분투와 mysql을 설치하고 난 후에는 character set을 변경해주면 좋습니다. 그 이유는 mysql의 default character set이 latin 1인데, 이 설정은 한글을 저장할 때 에러를 발생시킬 수 있습니다. character set을 확인하기 위해서는, mysql에 접속하여 status 명령어로 확인할 수 있습니다. 위의 경우 latin1이 나오는 것을 볼 수 있으며, 이 설정값을 utf8으로 바꿔야 합니다. 이를 위해서는 설정 파일을 수정해야 하는데 보통 /etc/mysql/my.cnf를 수정합니다. - 해당 file은 보호된 file이므로 sudo을 이용하여 수정해야 합니다. 저장하고 sudo service mysql restart로 서비스를 재가동합니다. default ch..

공돌이 2020.06.28

virtualenv 사용하기

여러 파이썬 프로젝트를 수행할 때, 단순히 전역 pip를 통해서 필요한 패키지를 설치하게 되면 모든 패키지가 기본 pip 관련 디렉터리에 설치된다. 이렇게 하면 패키지 버전 관리가 어려우며, 초기 프로젝트를 빌드업할 때도 이미 불필요한 패키지를 갖는 환경을 사용해야 한다. 이를 방지하기 위해, 각 프로젝트를 위한 가상 환경(venv)을 만들 수 있으며, 도와주는 것이 virtualenv 패키지이다. virtualenv는 pip 또는 apt로 설치할 수 있다. pip(3) install virtualenv sudo apt-get install virtualenv 설치가 완료되었으면 다음 명령어를 통해 환경(이는 디렉터리이다)을 생성할 수 있다. virtualenv ENV_NAME 환경이 만들어지면서 나타나..

공돌이 2020.06.28
1