#20 데일리 퀴즈 생성 로직 방식에 대해서..
·
프로그래밍/스팀 게임 퀴즈
판다스를 다시 써봤는데 역시 어렵다....!! 역시 타입힌트좀 잘 해줬으면 좋겠다. 많이 불편하다. #18 에서는 람다를 어떻게 구성할지 고민했었고, #19 는 게임을 어떻게 가져와서 필터링 할지 고민했었다. 이번 주제에서는 매일 자동으로 만들어야 하는 “데일리 퀴즈를 어떻게 생성할지”에 대해서 고민해본다. 먼저 데일리 퀴즈는 하루에 5개씩 생성될 예정이다. https://guessthe.game 에서는 하루에 하나의 게임만 제공하지만, 솔직히 꾸준히 하지 않는 사람 입장에서는 1개는 감질나다. 게다가, 잘 못맞추면 기분 나쁘기까지 하다. 그래서 성질이 서로 다른 5개의 게임을 골라 매일 퀴즈로 제공하고자 한다. 유명한 게임만 모았기 때문에 사용자는 잘하면 여러개 맞출 수 있고 긍정적인 반응을 얻을 수 ..
#19 게임 데이터 스크래핑 전략 수정하기
·
프로그래밍/스팀 게임 퀴즈
사실 API를 찾아다니면서 스팀에만 국한되지 않은 게임 DB API를 찾았었어요. 주제를 바꿀지 잠시 고민했는데요, 종겜 스트리머 애청자로서 스팀이 주는 매력이 있다고 생각이 들어요. 때문에 앞으로도 스팀 게임을 기준으로 할 생각입니다. 현재 게임 스크래핑 전략은 스팀에서 추천해주는 게임을 기준으로 한다. 모든 게임을 다 가져오기엔 부담이 크고 AA 혹은 AAA급이 아니더라도 모두가 알 수 있는 게임을 대상으로 가져오고 싶었기 때문이다. 12월 15일부터 1월 20일까지 수집한 데이터에 따르면 아래와 같다. Palworld EA SPORTS FC™ 24 미제사건은 끝내야 하니까 Dominions 6 - Rise of the Pantokrator 워프레임: 가우스 프라임 액세스 - 웨폰 팩 다른 겨울의 우..
#18 AWS 람다 - 스크래핑한 데이터를 DB에 저장하기
·
프로그래밍/스팀 게임 퀴즈
람다 코드를 먼저 작성했고, 이땐 타입힌트나 sqlalchemy에 대해 미숙했기 때문에 뭔가 이상한 점이 있을 수 있습니다. 다른 기능을 만드느라 큰 문제가 발생하지 않으면 수정을 하지 못하는 점 양해 부탁드립니다! AWS 람다는 크롤러 / 스크래퍼를 구현하기에 아주 좋다. 서버리스로 애플리케이션을 띄울 수 있고, python / node.js로 구현도 부담스럽지 않다. (종속성 모듈도 사용할 수 있다) AWS서비스에서 이벤트를 전송하는 기능도 있고, 로그를 모니터링 해주기도 한다. 또, EventBridge Scheduler를 이용하면 주기적으로 람다를 실행시킬 수도 있다. 하지만 람다의 보안상 제약이 있다. VPC안에서는 외부 API를 호출할 수 없다는 제약이다. VPC밖에서는 반대로 RDS에 접근할..
#17 fastapi-users를 써서 OAuth2를 적용해보았다!
·
프로그래밍/스팀 게임 퀴즈
이번 글에는 fastapi-users의 oauth2인증방식에 대해서 더 자세히 다루고 싶어서 제목을 "fastapi-users의 OAuth2 인증방식"로 했는데, 귀찮아서 바로 "fastapi-users를 써서 OAuth2를 적용해보았다!"로 바꿨습니다. 😅 서브 모듈인 fastapi_users_db_sqlmodel가 좀 오래된것 같아서 진짜 간단한 업데이트를 PR했는데.. 왠지 느낌이 쎄하다. 이 서비스에 소셜 로그인을 도입하고 싶어서 여러 라이브러리를 전전하던 중 fastapi-user를 알게되었다. 그래서 처음 쓰는게 다 그렇듯 뇌빼고 구글 소셜 로그인을 도입 했는데, 의문점이 생겼다. 주요 의문점은 “소셜 로그인 기능을 사용하는데 왜 회원가입/로그인 기능을 구현해야 하지?”라는 것이였다. 일단 O..
#16 Fastapi-users의 OAuth2 사용시 생기는 MissingGreenlet 오류
·
프로그래밍/스팀 게임 퀴즈
fastapi-users는 기본 매뉴얼이 비동기로 되어있어 비동기로 보통 작성하곤 한다. 그러면 sqlalchemy의 MissingGreenlet 오류를 자주 만날 수 있게 된다. MissingGreenlet 오류는 sqlalchemy에서 아래와 같이 설명된다. A call to the async DBAPI was initiated outside the greenlet spawn context usually setup by the SQLAlchemy AsyncIO proxy classes. Usually this error happens when an IO was attempted in an unexpected place, using a calling pattern that does not directl..
# 2 프로젝트 설계에 대한 고민
·
프로그래밍/스팀 게임 퀴즈
포스팅이 순서대로 올라오지 않는 이유 넘버링은 글을 작성하기 시작할때 부여하고, 포스팅은 글을 끝맺을 때 하기 때문입니다. 프로젝트를 많이 해보지 않아서 그럴까? 항상 프로젝트 설계는 고민이 된다. 얼마전에 fastapi 프로젝트 구조를 깃허브 레포에서 본적이 있다. https://github.com/zhanymkanov/fastapi-best-practices 이걸 참고 하려고 했지만, 이 구조는 유지보수 관점에서도, 테스트 관점에서도 어려운점이 있다. 모듈이 구현체를 직접 참조하기 때문에 ISP원칙이나 DIP원칙에 위배되는데, 이러면 기능을 추가할때 참조하는 모듈(상위 모듈)을 손봐야 할 수도 있고, 단위 테스트할때 목 객체를 만들기도 까다롭다. (몽키 패치 방식을 써야 하는데, 타입힌트도 안먹혀서 ..
#14 프론트 엔드 구축
·
프로그래밍/스팀 게임 퀴즈
프론트엔드는 화면에서 뭔가 보이니까 재밌긴 하다. 원래는 간단하게 프론트 엔드를 구축하고 대충 넘기려 했지만, 생각보다 프론트는 쉽지 않다. 처음에는 생성형 AI인 V0를 이용해서 리엑트 코드를 작성했다. 사실 프로젝트 시작부터 이를 사용할 것을 염두에 두고 있었고 빠르게 구현하는 것이 목표였다. 그래서 리엑트 프로젝트를 생성한 뒤, V0가 만들어준 코드를 복붙해서 실행해 보았다. 그러다 바로 문제가 발생했다. V0는 Next.js를 기반으로 하는 코드만 작성해 준다고 한다. 때문에, 다시 next.js 프로젝트를 만들어서 V0의 코드를 넣었다. 이렇게 된다. 매우 심플하고 보기 좋다. 그런데 여기서 좀 까다로운 일이 생겼다. 저 자동완성 입력 부분이 예상처럼 동작하지 않는다. 분명 구글 검색 창의 입력..
#13 비동기 SQLModel
·
프로그래밍/스팀 게임 퀴즈
SQLModel 자체가 비동기를 대단히 지원하지도 않아서 의미있는 내용을 담고 있지 않다. 그냥.. 그렇다 기대 노노 SQLModel을 사용하는 코드를 비동기로 다시 작성하다보니 이 라이브러리에서 비동기 프로그래밍이 좀 어렵다는 사실을 알았다. 아직 todo list에서 구현 예정 이라는 말 뿐이고, 좀 기다려야 할 것같다. 그래서 업데이트가 되기 전에 어떻게 비동기를 센스있게 다룰지 고민한다. 1. Model 클래스에서 해당 필드를 명시적으로 selectin or join으로 지정하기 class GameScreenshot(CreatedAtMixin, UpdatedAtMixin, SQLModel, table=True): __tablename__: str = "game_screenshot" id: int ..
2jun0
'분류 전체보기' 카테고리의 글 목록 (4 Page)