본문 바로가기

728x90
반응형

전체 글

(344)
[SQLAlchemy] Imperative Mapping, Column 합성 HTML 삽입 미리보기할 수 없는 소스 개요 SQLAlchemy의 Imperative Mapping을 이용하다보니 “테이블의 열(column)을 모아서 Object로 표현할 수 있는 방법이 있지 않을까”를 고민하게되었다. 예를 들어 다음과 같은 코드가 있다고 가정해보자. class Member: address1:str address2:str 위의 코드를 ORM 관점에서 보자면 DB 테이블에 address1과 address2라는 열(column)이 존재한다고 생각해볼 수 있는 코드이다. 그러나 위와 같은 코드를 다음과 같이도 표현할 수도 있다. @dataclass class Address: address1:str address2:Str class Member: address:Address 위 코드를 통해 ..
[Oauth] Python으로 KaKao Oauth Login Test하기 HTML 삽입 미리보기할 수 없는 소스 개요 과거 Google Oauth 로그인을 Python으로 테스트하기에 앞서 다음과 같은 라이브러리가 필요했었다. google-api-core==2.14.0 google-api-python-client==2.108.0 google-auth==2.23.4 google-auth-httplib2==0.1.1 google-auth-oauthlib==1.1.0 이번엔 KaKao Oauth Login(이하 KaKao Login)을 Python으로 테스트해 봤는데. 테스트하는 과정에서 KaKao Login을 위한 Python 라이브러리를 따로 찾을 수 없었다. 머리를 굴려보다 Python에서 KaKao Login을 테스트해보기 위한 방법으로 requests_oauthlib을 이..
[SQLALchemy] Imperative Mapping, Eager/Lazy Loading HTML 삽입 미리보기할 수 없는 소스 개요 SQLAlchemy의 imperative mapping 방식을 계속 다루다 보니 Repository라고 정의한 계층에서 Session Query를 많이 작성하게 된다. 예를 들어 다음과 같은 형식이다. session.query(MemberEntity).filter(MemberEntiy.id == member_id) 만약 join을 사용한다면 Session Query를 아래와 같이 작성한다. session.query(MemberEntity) .filter(MemberEntity.id == member_id) .outerjoin(MemberProfileEntity.member_id == member_id) 위와 같이 Session Query를 작성하는 게 어색하게..
[DDD] Entity란? HTML 삽입 미리보기할 수 없는 소스 개요 Domain Driven Design(이하 DDD)를 처음 접했을 때 참 매력적인 주제라 생각했다. 개발을 시작하고 2년 차에 접어든 무렵에 알게 된 주제였는데 "코드"를 어떤 관점에서 바라보고 작성해야 되는지의 시야를 넓혀주었기 때문이다. 이때 당시엔 DDD에서 말하는 개념들이 너무 생소한지라 그런가 보다라며 다른 주제에 관심을 돌렸었다. 어느 정도의 시간이 지나고 Sping의 MVC의 패턴을 접하게 되었는데 역할에 따라 구성된 코드 구조를 보면서 이를 Python으로 옮긴다면 단순히 MVC 패턴이 아닌 "무엇"을 더해 코드를 구성하면 좋을까로 고민이 이어졌다. 그러던 와중 예전에 펼쳐서 읽어봤던 "DDD"에 관련한 책을 다시 읽으면서 Python으로 DDD..
[FastAPI] Depands와 Dependency-injector DI 비교해보기 HTML 삽입 미리보기할 수 없는 소스 개요 최근에는 SQLAlchemy의 session을 이용해 프로젝트 구조를 잡는 편이다. FastAPI가 구동되는 단계에서 DI를 이용해 전역적으로 사용할 Session을 설정하는 방식으로 구성하는데 크게 3가지 정도의 방법을 이용해 Session DI를 구성할 수 있었다. SQLAlchemy의 Session으로 DI를 사용할 경우 어떤 식으로 DI를 시도했는지에 대한 내용 정리와 각 구성별 LoadTest 결과를 기록하려 한다. 테스트 셋업 FastAPI에서는 Too Many Open File 이슈가 발생할 수 있다. ulimit 설정은 soft 설정을 5012 정도로 잡았다. locust를 이용해 테스트를 진행했으며 RPS 가 어느 경우에 더 높은 지를 보는 게..
[Review] 개발자를 위한 최소한의 실무 지식 한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다. 개요 서울에서 상경한 후 소규모 보안 업체에서 인턴을 거쳐 개발자로 전직하고 보니 어느새 4년 차 개발자가 되었다. 개발 공부를 체계적으로 하거나 취업을 위해 단계를 밞으며 하진 않았던 터라 개발자를 막 시작했을 때는 개발 업무의 어려움을 피에르 부르디유가 언급한 3가지 자본(인적, 사회적, 문화적)을 기반으로 문제에 부딪힐때마다 적절히 해결해왔다. 다양한 문제들에 부딪히며 어떤 상황은 책에서 얻은 지식만으로도 해결가능한 문제도 있었고, 구현의 복잡도나 머릿속에 들어있지 않은 개념들은 회사 사수님이나 주변 지인들의 도움을 받아 온 것이다. 그간 있었던 사례들을 돌아보니 내가 무엇을 알고 있는지, 무엇을 모르고 있는지, 그리고 모르는 부분을 어떻..
[Redis] Redis Lock과 Redis Connection Pool HTML 삽입 미리보기할 수 없는 소스 개요 FastAPI에 Redis를 이용해 비동기 통신에 대한 성능 테스트를 시험 중이었다. locust에 Numbers of users는 1000 spawn rate는 100으로 설정하고 worker는 3개 정도를 주어 테스트 했다. FastAPI의 로그를 보고 있으니 다음과 같은 에러가 발생하고 있는 걸 확인했다. 위에 첨부한 이미지에서 확인할 수 있다시피 redis connection과 관련된 에러이다. 다음은 이 에러의 TraceBack 중 일부이다. ... File "/Users/jako/private/git-repo/backend-playground-src/coupons/src/repository/redis_repository.py", line 33, in..
[FastAPI] Too Many Open files Error가 일어난다면 HTML 삽입 미리보기할 수 없는 소스 개요 최근 locust라는 도구를 이용해 손수 만들어본 코드 구조가 얼마나 효율적인지 테스트해 보는 중이다. (locust는 성능 테스트도구이다.) 직접 만든 코드 유틸에는 여러 계층의 db transaction을 묶어서 처리하기 위한 decorator라던지 sqlalchemy의 imperative mapping 방식을 이용한 ORM과 depdency-injector를 이용한 DI 처리와 같은 것들이 존재한다.. 앞서 언급한 코드 유틸에는 학습과 아이디어 검증을 우선으로 구현했기 때문에 테스트와 같은 부분을 차일피일 미루고 있었는데 여러 자료를 접하게 되면서 우선 locust를 이용해 성능 테스트를 시도해 보기로 했다. 그렇게 성능 테스트를 진행 중에 관련 로그를 ..

728x90
반응형