본문 바로가기

TIL

(14)
fastapi에서 mongo db 사용할 때 _id 처리하기 fastapi는 pydantic을 사용하여 데이터 모델을 정의한다. mongo db의 경우 object id가 _id로 정의된다. 그래서 정수 a, b, c를 가지는 mongo db의 모델을 pydantic으로 정의한뒤 fastapi에서 쓴다고 치면 아래와 같이 정의를 해볼 수 있을 것이다. from pydantic import BaseModel class DataModel(BaseModel): _id: str a: int b: int c: int 아마 _id를 str이 아닌 objectID 같은 타입으로 선언할 거 같긴 한데 일단 str이라고 하자. 여기서 문제가 발생하는데 pydantic의 데이터 모델은 언더스코어(_)로 시작하는 변수를 private으로 간주하고 접근할 수 없게 해놓는다. 그래서 데..
파이썬 f-string 템플릿으로 쓰기 파이썬에서 f-string 쓰는법 파이썬에서 f-string은 바로 evaluation이 이루어지기 때문에 템플릿처럼 사용이 불가능하다. 정 사용하려면 아래처럼 람다로 사용해야 한다. f-string을 raw text로 저장해두고 이를 사용해서 포매팅을 하는 것은 불가능해보인다. template = lambda name, handle : f'Current name is {name}, handle is {handle}' DB 서버가 죽었는지 체크하는 방법 지금 하고 있는 프로젝트에서 파이썬에서 MySQLdb를 이용해서 Mysql 서버에 요청을 보내는데 연결이 살아있는지, 쿼리가 이상한지를 체크해야 한다. 일단 쿼리가 이상한가를 체크하는 데에는 서버에 쿼리 날린 다음에 MySQLdb.ProgrammingEr..
도커 스크립트에서 MySQL root 패스워드 없애기 mysql 컨테이너를 도커로 실행할 때 "-e MYSQL_ROOT_PASSWORD="처럼 루트 비밀번호를 그대로 쓰는 경우가 있다. Docker-Compose에서는 아마 저걸 그대로 쓰게 될텐데 비밀번호가 공개되는게 마음에 안들어서 저걸 안넣을 방법을 고민했다. 떠오른 방법은 호스트의 환경변수를 실행스크립트에 넣자는 거였다. 그래서 호스트 머신의 global 환경변수로 MYSQL_ROOT_PASSWORD를 넣어주기로 했다 환경변수를 global하게 추가하려면 /etc/profile.d/ 디렉토리에 스크립트를 넣어주면 된다. 설명을 보면 리눅스에서 부팅을 할 때 /etc/profile.d/*에 해당하는 스크립트를 한 번 실행한다고 한다. 링크 그래서 아래처럼 추가를 해줬다. mysql_passwd.sh에 ..
cyberduck cli로 리눅스에서 FTP로 구글 드라이브에 파일 업로드하기 제일 중요한 터미널에서 칠 커맨드 duck --username [자신의 gmail] --parallel [커넥션 갯수] --upload "googledrive:/[드라이브 상의 경로]" [로컬 파일 경로] Colab에서 사용하려고 구글 드라이브에 파일을 올리려고 했는데 파일 갯수가 많다보니 처음 올리니까 100시간 걸린다고 나오더라. 이건 도저히 못쓰겠다 싶어서 FTP로 커넥션 여러개 꼽아서 동시에 전송 가능한 방법을 알아봤다. 유료 프로그램인 파일질라 프로나 smartFTP 같은 걸 써도 되고 cyberduck이라는 무료 프로그램도 가능했다. 그런데 cyberduck이란 놈이 리눅스에선 GUI 앱이 없고 cli로만 사용 가능하다. 여기까진 괜찮은데 document가 좀 구려서 시행착오를 조금 했다. C..
자주 쓰는 단축어 정리 크롬 Control + Tab - 다음 탭으로 넘어가기 Control + Shift + Tab - 이전탭으로 넘어가기 F6(윈도우, 리눅스) - URL 입력창 활성화 command + L(맥) - URL 입력창 활성화 command + T(맥) - 새로운 빈 탭 열기 Control(command) + Shift + T - 새로운 빈 탭 혹은 이전에 닫힌 탭 열기 Control(command) + W - 현재 탭 닫기 VS Code Control(command) + W - 현재 열려있는 편집 창 닫기 Control(command) + J - 터미널 열고 닫기 Control(command) + P - 현재 워크스페이스에서 파일 경로 입력해서 열기(사이드바 안써도 됨!) Control(command) + B ..
Just-In-Time 컴파일 방식 JIT 컴파일에 대해서 찾아보다가 재밌어서 작성한 글입니다. JIT 컴파일이 어쩌다 나오게 됐는지, 그리고 어떤 방식을 JIT 컴파일이라고 하는지에 대한 내용입니다. 글의 내용 대부분은 글 아래의 참고 자료에서 나온 것이며 아래 동영상을 보는 것도 추천드립니다. 링크 틀린 내용이 있다면 알려주시면 감사하겠습니다. Ahead-of-Time Compile(AOT 컴파일) 최근이야 프로그래밍을 처음 배운다고 하면 파이썬이 1타로 나오지만 당장 5년전만 해도 C언어가 주로 첫 언어로 추천받았던 거 같다. 언어를 처음 배우면 하는 건 정해져있다. Hello World!를 화면에 띄워야 한다. #include int main() { printf("Hello World!\n"); return 0; }이런 소스코드를 ..
C++ override 키워드 Class Method의 override keyword는 해당 메소드가 오버라이딩될 메소드라는 걸 컴파일러에게 알려주는 것이다. C++ 11부터 추가된 키워드인데 이것이 어떻게 도움이 될까? 부모 클래스에 void show(unsigned int x) { return x; }라는 메소드가 있고 자식 클래스에서 이를 오버라이딩하려고 한다. 그러면 void show(unsigned int x) { ... } 로 써야할텐데 프로그래머의 실수로 void show(long long int x) { ... }로 썼다면 컴파일러는 자식 클래스의 별개 메소드로 간주하게 될 것이다. 이 상황에서 void show(long long int x) override { ... }로 코드를 작성한다면 컴파일러는 오버라이딩 되야할..
Ubuntu랑 Mac이랑 Visual Studio 에서 bits/stdc++.h랑 atcoder library 추가하기 제목은 bits/stdc++.h랑 atcoder library라고 적었지만 각각 g++, clang++, MSVC에 임의의 헤더 파일을 추가하고 싶을 때도 똑같이 사용할 수 있다. 기본적으로 컴파일러가 소스코드를 컴파일해주는데 우리가 뭐 아무것도 추가 안해놔도 vector나 stdio 같은 헤더는 존재한다. 그런 헤더들은 보통 컴파일러를 설치할 때 같이 딸려온다. Mac은 Clang이 일반적이고 리눅스 계열은 gcc가 일반적이고 윈도우는 Visual Studio를 설치할 때 딸려온다고 생각하면 된다. 이렇게 딸려오는 것들의 위치는 설치되면서 혹은 환경변수로 등록되어 있다. 이런 경로들을 알고 있다면 원하는 파일을 해당 경로에 갖다 놓으면 찾아줄거다. 내가 경험했을 땐 다 됐다. Ubuntu bits/st..