본문 바로가기

전체 글845

Stripe 결제 시스템 도입하기 1. 개요 기존 해외결제의 경우 아임포트를 통해 페이팔 결제 시스템을 사용하고 있었다. 사용상의 불편함은 없었지만 데이터 분석 결과 나름 치명적인 문제가 하나 발견되었는데, 바로 결제용 팝업 창이 새롭게 뜨는 문제였다. 이게 왜 문제가 되는 걸까? 데이터 분석팀을 통해 유저 행동을 분석해보니 결제창이 뜬 이후 이탈하는 빈도가 굉장히 높은 모습을 찾을 수 있었고, 이 또한 가설이지만 모달/팝업 없이 같은 페이지에서 카드 번호등을 입력하여 결제하는 방식을 제공한다면 보다 높은 결제를 유도할 수 있을 것이라 판단했다. 따라서 결제를 위한 모달 창이나 팝업이 뜨는것이 아닌 임베디드 형태로 페이지내부에 삽입할 수 있는 방법을 찾아보기 시작하였다. 그러다 찾아낸 서비스가 바로 Stripe이다. 이미 해외에서는 유명.. 2020. 12. 10.
Kollus 서비스를 통해 동영상 플랫폼 제작하기 1. 개요 사용자에게 영상을 제공하는 기능이 요구사항으로 등장하였다. 처음으로 살펴본 서비스는 AWS에서 제공하는 미디어 서비스였다. 타 플랫폼을 이용하게되면 해당 플랫폼에서 만든 규칙을 따라야하기 때문에 여러가지 제약사항이 발생할 수 있기에 AWS 서비스를 살펴봤었는데, 몇가지 사항들때문에 직접 구현하지 않기로 결정했다. 첫 번째로, 개발 기간이 늘어난다. 위 요구사항은 언제든지 변할 가능성이 충분한 요구사항이었고 영상을 제공하는 기능 자체는 매니지드 서비스의 장점으로 인해 손쉽게 구현이 가능하겠지만, 한번도 사용해보지 못한 서비스이기 때문에 개발 기간을 정확하게 산정하기가 어려웠다. 두 번째로, 녹화 방지 등 DRM기능이 필요했다. 하지만 그러한 기능까지 서칭하고 구현하기에는 시간적, 비용적인 무리가.. 2020. 12. 9.
Pydantic SQLAlchemy relationship conditional load 1. 개요현재 서버 프레임워크로는 FastAPI를 사용하고있고 ORM은 SQLAlchemy를 사용하고 있다. FastAPI는 내부적으로 Pydantic이라는 라이브러리와 강결합되어있는 형태이며 해당 라이브러리를 디폴트로 Serialize등의 행위를 수행한다. 서버의 아키텍처는 Layered architecture를 사용하고 있었고, Repository에서의 반환값을 ORM모델이 아닌 Pydantic모델로 통일하자는 이야기가 있었다. (Entity와 비슷한 개념이라고 볼 수 있겠다) 일반적으로 ORM 모델을 정의할 때 ORM의 장점을 살리기위해 relationship을 정의하고 해당 property를 통해 관계된 테이블의 요소에 접근한다. 여기서 문제가 하나 발생했는데, SQLAlchemy 모델 -> Py.. 2020. 9. 22.
Git 특정 커밋 수정하는 방법 git rebase --interactive 특정커밋해시^위 명령어로 rebase를 시작한다. 그러면 위처럼 vim이 열리면서 특정 커밋에 대한 편집을 진행할 수 있다. 여기서 수정을 원하는 커밋의 가장 맨앞 pick을 edit으로 수정해주고 :wq로 저장한다. 저장하고 나오면 아마 해당 커밋으로 브랜치 이동이 되어있을텐데, 여기서 원하는 파일을 수정하고 git commit --amend를 입력한다. 그러면 커밋에 대한 타이틀도 수정할 수 있다. 마찬가지로 vim이 열리면 수정을 진행하고 :wq로 저장하고 나온다. git rebase --continue마지막으로 위 명령어를 통해 rebase를 마무리해주면, 원래 브랜치로 돌아옴과 동시에 리베이스가 완료된다. 2020. 9. 2.
AWS CodePipeline으로 ECR 푸시 감지하여 배포하는 방법 1. 개요CI/CD에는 많은 방법들이 존재한다. 깃허브등의 소스코드 레포지터리 master브랜치에 변경이 생기는 순간을 감지하여 자동으로 소스코드를 말아서 S3에 업로드하고, 배포를 트리거하는 등 한번에 모든 배포 과정을 자동화할수도 있고 특정 부분만을 잘라서 자동화시킬 수도 있다. 이는 배포 전략을 짜기 나름인데, 이번 포스팅에서는 ECR로 이미지가 푸시되면 CodePipeline에서 이를 감지하고, ECS에 배포할 수 있도록 자동화하는 방법에 대해 기술한다.참고로, ECS에 관한 자세한 설명은 다루지 않으므로 ECS Fargate형태로 서비스가 실행중이라는 가정하게 진행한다. 2. Flow먼저 간단하게 흐름을 살펴보자면 다음과 같다. ECR푸시 감지 -> 특정 명령어를 통해 빌드 -> ECS에 배포 .. 2020. 8. 24.
SQLAlchemy Many To Many Additional Column 1. 요구 사항이벤트와 비디오는 M:N관계이다. 이벤트에 속한 비디오를 가져올 때 특정 컬럼을 통해 정렬하여 가져와야 한다. 2. 해결 방법아래와 같이 events, videos두개의 테이블이 존재한다고 가정한다.class Event(Base): __tablename__ = 'events' id = Column(BigInteger, primary_key=True, autoincrement=True) title = Column(Unicode(255))class Video(Base): __tablename__ = 'videos' id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(Unicode(255))만약 여러개의 비디오가.. 2020. 6. 26.