목록분류 전체보기 (493)
규도자 개발 블로그
FastAPI Schema를 제대로 다루는 방법 FastAPI에는 Schema라는 개념이 존재한다. 만약에 스프링이나 nestJS로 개발을 해봤던 사람이라면 DTO라는 이름이 더 익숙할 것이다. 간단하게 말하자면 DTO란 Data Transfer Object의 약자로서 어떤 메소드나 클래스간 객체정보를 주고 받을 때 특정 모양으로 주고 받겠다는 일종의 약속이다. FastAPI의 스키마는 pydantic model에 종속돼있다. 말이 종속이지 그냥 pydantic 패키지를 그대로 갖다 쓴다고 해도 무리가 아닐 정도다. FastAPI의 스키마는 아래처럼 생겼다. from pydantic import BaseModel class Item(BaseModel): name: str model: str manufac..
오늘 깃허브 계정을 점검해봤는데 아직도 전직장의 github repository에 내가 등록이 돼있었다. 원래는 그냥 로컬에서만 개인적으로 공부하고 있는 걸 push하는 용도로 썼는데 요즘 fastapi 기여때문에 자주 들어가보게 돼서 발견했다. 보안문제도 있고 할 텐데 왜 내가 아직도 등록이 돼있을까. 아마 발견하기 힘들어서 잊은 게 아닐까 하는 추측 뿐이다. 그리고 당연스레 나 스스로 collaborator를 끊어서 해당 repo를 안볼 수 있지 않을까 싶었는데 아니었다. 레포 세팅에 접근할 권한이 없기 때문에 내가 날 없앨 수 없었다. 방법은 다음과 같다. 그냥 그 유저를 block했다가 다시 풀면 된다. 저 버튼을 눌러서 계정을 Block하고 다시 settings에서 풀면 된다. 그럼 해당 계정과..
FastAPI 기여하기 저번에도 썼던 게시물의 2편이라 봐도 무방하다. 일단 Contribute에 대한 공식 안내는 이 링크를 찾아가보면 된다. 근데 이게 한사람이 관리하는 프로젝트라 언제 PR이 될지 모른다. 하지만 그냥 하는 거다. 구멍이 숭숭 뚫린 프레임워크니까.. 먼저 fastapi 공식 repository에 간다. 그리고 fork를 딴다. 요기따. 그리고 local에 project를 클론해서 연다. 그럼 이런 모양이 된다. 그럼 fastapi를 실행해보자 당연히안된다. Fastapi는 다른 의존패키지가 꽤나 많기 때문이다. poetry에서 사용되는 pyproject.toml파일을 살펴보면 FastAPI의 프로젝트 의존성이 어떻게 구성돼있는지 알 수 있는데 각설하고 이걸 실행하고 싶으면 pypro..
리눅스, 유닉스 백그라운드프로세스 방법 정리 (&, bg, nohup, screen) 서버는 왜 필요할가. 당연히 내가 보고 있지 않아도 서비스를 안전하게 제공하기 위해서다. 백그라운드 프로세스는 왜 필요할까. 당연히 내가 보고 있지 않는 상태에서도 돌아가고 있는 프로세스를 실행하고 싶거나 혹은 여러개의 프로세스를 돌리고 싶기 때문일 것이다. 하지만 백그라운드 프로세스를 돌리는 방법은 많고 각각의 방법은 어떤 특성이 있는지 여기저기 파편화돼있는 정보들을 스스로 취합하지 않으면 언제 어떤 방법을 선택해야할지 알기 힘들다. 그래서 여기에 정리해본다. 1. &(ampersand) 리눅스기반 os의 명령어에서 흔히 쓰이는 Semicolon(;)과 Pipe(|)의 형제라고 할 수 있다. &연산자 자체는 "앞의 명..
파이썬 프로세스 킬러 import os def kill_process(process_name): process_read = os.popen(f"ps -ef | grep {process_name} | grep -v 'grep'").readlines() terminate_result = None for process in process_read: process_id = process.split()[1] terminate_result = os.popen(f"kill {process_id}") return terminate_result 프로세스단위에서 프로세스를 죽이는 스크립트이다. 내가 개인적인 용도로 사용했을 땐 내가 돌리고 있는 퀀트프로그램에서 웹소켓이 깨졌을 때 해당 프로세스를 전부 종료하..
[프로그래머스/Level1/파이썬3(python3)] 신고 결과 받기 문제 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다. 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다. 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다. k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다. 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다. 다음은 전체 유저 목록이 ["muzi"..
python webfamework하면 떠오르는 양대산맥이 있다. 풀스택프레임워크 Django와 경량화프레임워크 Flask. 하지만 이 둘을 제치려고 하는 엄청난 잠재력을 가진 framework가 하나 있다. 바로 fastAPI. fastapi공식홈페이지 다른건 차치하고서라도 이름에서 볼 수 있다시피 fast를 추구하는 프레임워크이다. tiangolo라는 이름으로 활동하고 있는 개발자가 개인으로 시작한 프로젝트인데 2018년 12월 8일에 0.1.0버전으로 첫 릴리즈가 됐고 만3년째를 지나 4년째를 향해 달려가고 있는 지금 아직도 0.73.0이다. 가장 괄목할만한 점은 gitstar 갯수이다. 글을 쓰고 있는 현재 gitstar 갯수는 다음과 같다. framework 최초릴리즈일 현재(2022.02.12)..
오늘 있었던 일인데 잊지 않으려고 적어둔다. 금주에 이상하게도 멀쩡하게 잘 돌아가던 서비스들이 뻥뻥 터져나갔다. 그래서 일단 급한불은 열심히 껐지만 우리팀에는 "외양간을 고치는 작업"이 필요했다. 그렇게 열심히 수습하고 난 뒤에 정기회의에서 팀장님에게 이러이러한 일이 있었다고 보고드렸다. 그 보고를 들은 팀장님은 말의 서두를 이렇게 시작했다. "엔지니어라면-" 그 뒤의 말이 이어지기도 전에 내가 뭘 잘못했는지 깨달았다. 난 그냥 힝 느려요 하면서 징징댄게 전부였다. 하지만 숫제 자신을 엔지니어라고 칭하려면 추상적인 표현이 아닌 측정할 수 있는 최대한 많은 수치를 들고서 듣는사람이 확실하게 알 수 있게 내용을 전달하고 그에 따른 개선방안까지 같이 얘기했어야 했다. 뼈엔지니어의 길은 멀고도 험하다. 하지만 ..
[Python] csv를 dict로 가끔씩 csv로 저장된 요소들을 불러와서 dict로 써야할 때가 있다. 특히 dbeaver나 mysql workbench처럼 결과값을 간단하게 csv형태로 저장할 수 있는 어플리케이션을 다룰 때 많이 필요하더라. 먼저 코드는 아래와 같다. import csv mydict = {} with open('csv_example.csv', mode='r') as file: reader = csv.reader(file) attrs = [] result = [] for row in reader: if len(attrs) < 1: attrs = row continue temp_row_dict = dict() for key, value in zip(attr..
나는 원래 있는 개념을 조금 뒤틀어서 내식대로 만들고 이해하는 걸 좋아한다. 예전에 썼던 노력낭비, 골드형인간, 시간의 밀도 등등의 글들도 그런 글들의 일종이다. 그래서 이번에도 프로그래밍에 있는 제어의 역전(Inversion of Control)이라는 개념을 조금 뒤틀어서 의도의 역전이라는 것에 대해서 써볼 예정이다. 참고로 프로그래밍에 대한 내용은 아니다. 생물과 도구의 차이점은 무엇일까. 고등학교 때 철학선생님에게 받았던 질문이다. 글을 읽는 사람이라면 한번 잠깐이라도 이 둘을 구분하는 한마디 문장을 생각해보자. 당시 나는 무엇보다도 이 둘의 구분을 잘 할 수 있을 거라 생각했는데 막상 그것을 한마디로 정리하려 하니 모르겠더라. 그래서 물어보니 도구는 인간이 어떤 의도를 행하기 위해서 만든 것이고 ..