# 12 백엔드 코드를 비동기로 바꾸다.
·
프로그래밍/스팀 게임 퀴즈
이번 글은 정리가 잘 안되어 있습니다. 보시기 전에 호흡을 가다듬고 테스트는 그동안 비동기로 작성하고자 했지만, 정작 내 코드는 비동기로 작성하지 않고 있었다. 엘라스틱 서치를 사용한다고 막 알아볼때 까지 말이다. 엘라스틱 서치에서는 AsyncElasticSearch라는 비동기 클라이언트를 제공한다. sqlmodel도 같이 AysncSession을 사용하고 있다. *비동기는 fastapi가 정확히는 unicorn이 알아서 해준다. 참고: 경로 작동 함수에서 필요한만큼 def와 async def를 혼용할 수 있고, 가장 알맞은 것을 선택해서 정의할 수 있습니다. FastAPI가 자체적으로 알맞은 작업을 수행할 것입니다. 어찌되었든, 상기 어떠한 경우라도, FastAPI는 여전히 비동기적으로 작동하고 매우 ..
#8 HttpUrl vs str
·
프로그래밍/스팀 게임 퀴즈
한줄 요약: HttpUrl 필드는 "haha"가 아닌 Url("haha")으로 (재)할당하자. 개발하다보니 Pyright 타입검사를 꺼두고 했다는 것을 알게 되었다. (내가 엄청 개발을 잘하는 줄 알았음) 그래서 켰더니 예상치 못한곳에서 오류가 나왔고, 괜찮은 해결책을 찾지 못했다. 문제는 HttpUrl 타입 때문이였다. 나는 단순히 검증을 위해 str대신 HttpUrl을 사용했었다. 그런데 HttpUrl 타입 변수에 스트링 값을 할당할때 아래와 같은 오류를 만날 수 있었다. “”” "list[str]" 형식의 인수를 "__init__" 함수에서 "list[HttpUrl]" 형식의 "screenshots" 매개 변수에 할당할 수 없습니다. “”” 오 이럴수가! 알고보니 HttpUrl는 Annotated[..
#7 테스트 코드 내 세션 관리
·
프로그래밍/스팀 게임 퀴즈
내용이 알차지도 아닌지라 포스팅은 꾸미지 않습니다. Quiz 모델에서 `game`이라는 @property 메서드를 만들고 난 뒤, 테스트 코드에서 사용했더니 아래와 같은 오류가 생겼다. sqlalchemy.orm.exc.DetachedInstanceError: Parent instance is not bound to a Session; lazy load operation of attribute 'game' cannot proceed (Background on this error at: https://sqlalche.me/e/20/bhk3) 이는 Quiz모델에 세션이 바인딩 되지 않아서 발생한 오류였다. 사실 이 오류는 세션 관리에도 관련이 있는 문제였다. 내 테스트 코드에서는 기본 데이터를 저장하기 위해..
#6 퀴즈 정답 제출은 어떻게 할까?
·
프로그래밍/스팀 게임 퀴즈
오늘은 좀 글이 부실하네.. 이제 데일리 퀴즈는 아무튼 간에 구현했다. 테스트까지 다 마친 상태. 이제 퀴즈에 대한 정답을 제출하는 api가 있어야 한다. 대충 리퀘스트의 바디에는 퀴즈 식별자와 게임의 이름을 적으면 될 것 같다. 근데 여기서 조금 생각할 부분이 있다. # 일단 첫번째 - 게임 이름 게임의 이름이 변경된다면? 현재는 게임의 이름이 변경되었는지 감지하는 로직은 없다. 앞으로도 계획에 없는 부분이다. 사실 게임 이름이란게 자주 바뀌는 것도 아니고 바뀌는 걸 실제로 본 적도 없기 때문에 이 문제는 덮어도 좋을 것 같다. # 그리고 두번째 - 게임 id 최종적으로는 게임 타이틀 자동완성을 도입할 예정이라 게임 id를 받아올 수 있다. 그렇다면 게임 이름 대신 id를 리퀘스트에 넣어서 보내면 안될..
#5 테스트 데이터 만드는 법
·
프로그래밍/스팀 게임 퀴즈
개발일기는 사실상 일기라기보다 주제에 대한 생각을 끄적인것이며, 주제가 닫힌 순서대로 포스팅합니다. 내용의 정확성은 보장하지 않습니다. 테스트 할때 기본 데이터를 넣어야 할 때가 있다. 보통 테스트 환경은 빈 DB로 하는 경우가 많기 때문이다. 크롤러를 만들때는 factory_boy를 사용해서 만들었지만, 아무래도 좀 무겁다는 단점이 있다. 그리고 솔직히 잘 못쓰겠다. 연관관계를 매핑해줄 때 좀 까다로웠다. 그래서, 이번에는 내가 팩토리 메서드를 만들어 보기로 했다. (사실 fastapi 예제에서 이런 방식으로 만들어서 쓰고 있었다 하하) 그런데 바로 문제가 생겼다. GameScreenshot은 steam_file_id를 갖게 되는데, 이는 유니크 해야 하기 때문이다. 단순히 팩토리 메서드가 있는 모듈에..
#3 DB 세션에 대한 문제
·
프로그래밍/스팀 게임 퀴즈
#3 DB 세션에 대한 문제 뭔가 다들 화려하게 세션을 관리하는 것 같다. 자프링에선 그냥 @Transactional로 해결하는 것을 보면 아주 부럽다. 그래서 하나하나 왜 이렇게 하는지 뭐가 문제인지 찾아보면서 내 프로젝트에서는 어떻게 세션관리를 코딩할지 고민했다. [첫번째 - fastapi에서 보여준 그대로] https://github.com/tiangolo/full-stack-fastapi-postgresql 라우터에서 세션객체를 받는방식이다. 저 타입은 아래와 같이 생겼다. 공식문서에서는 자꾸 자꾸만 Annotated를 쓰라고 하던데 이유를 바로 알 수 있었다. 추상화된 타입에 의존할 수 있기 때문이였다! 아래와 같이 선언되었다. (이렇게 추상화하면, 구현 모듈을 바꿀 때 dependency 레이..
[IMGenie] Airflow 구축 이야기 - 1
·
프로그래밍/부스트캠프 AI
지원을 하다보면 자신감이 드는 부분도 있지만, 아직은 부족한 점이 많다고 느낀다. 게다가 파이썬 개발자 환경이 다각화된 탓에, 해보고 싶은 게 많고 부족한게 많다고 느낀다. 프로젝트는 8월에 끝났지만 계속 마음속에 남았던 airflow 구축 이야기를 해보고자 한다. 다소 그림보다 글이 많을 수 있으니 관심이 없으면 보기 힘들듯.. 하하 🤔 해야 하는 것 Airflow를 도입하게 된 이유는 다음과 같다. (위가 중요하다) 그냥 해보고 싶어서: 저번에 쿠키를 추가하면서 로드밸런서를 구축하고.. https를 추가하는 작업은 정말 재밌었다. CI/CD도 재밌다는 것을 알게 되었고, airflow도 도전해보고 재미를 얻고 싶었다. 최신 곡 추가: 흔히들 프로젝트는 포폴 용도로 쓰고 버린다. 바로 애정이 없어서 ..
파이썬에서 함수와 클래스의 사용에 대한 생각
·
프로그래밍/끄적끄적
*이 글은 정보를 공유하기 위함이 아닌, 제 생각을 아무렇게나 정리한 글입니다. 나는 항상 파이썬 위에서 코드를 어떻게 짜면 효율적으로 짤 수 있을지 고민을 하곤했다. 이런게 피곤하고 허레허식 같다는 생각을 하기도 하지만, 클린코드에 대해 생각하지 않고 프로젝트가 절정에 다다를 때 쯤이면 항상 문제가 터지곤 한다. 그러나 클린 코드를 지향하면서 코딩을 해도 문제가 터진다. 이는 나의 신념의 문제 같다고 느낀다. 그 근거로, 알고리즘을 시작할때 쯤에는 이분탐색 문제가 지옥같았다. 코드는 전혀 이해할 수 없었고, 번번히 내가 원하는 대로 결과가 나오지 않았다. (함정 케이스에 항상 걸리곤 했다) 시간이 지나고 다른 사람의 코드를 참고해서 나만의 메뉴얼을 머릿속에 만들기 시작했다. 예컨데 while문은 항상 ..
2jun0
'분류 전체보기' 카테고리의 글 목록 (5 Page)