본문 바로가기

Coding345

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.
React Native 카카오 로그인 연동하는 방법 1. 환경react-native: 0.61.5 2. iOS 연동먼저 아래의 명령어를 통해 라이브러리를 설치한다. yarn add @react-native-seoul/kakao-login 다음으로 아래의 명령어를 통해 연동해준다. cd ios && pod install 이전 RN은 link를 통해줘야했지만, 이젠 자동 링크를 지원하므로 ios폴더로 진입하여 pod install 명령어만 입력하면 알아서 설치된다. 아무런 이상없이 설치되었다면 위 화면과 같은 결과를 볼 수 있을 것이다. 다음으로 Xcode를 켜서 상단에 있는 File - Open을 누른다.자신의 프로젝트 폴더 내부에 있는 ios폴더로 들어가면 프로젝트명.xcworkspace라는 파일이 존재한다. 해당 파일을 열어준다. Info탭으로 들어간다.. 2020. 5. 25.
SQLAlchemy PostgreSQL JSON컬럼 변경안되는 문제 해결 방법 1. 개요PostgreSQL은 JSON타입의 컬럼을 지원한다. NoSQL처럼 Schemaless 형태의 데이터를 저장할 필요성이 있지만, NoSQL로 가기는 조금 꺼려지는 경우에 사용하기 용이할것같다. SQLAlchemy에서 JSON타입의 컬럼을 다루다보면 이상하게도 값이 업데이트되지 않는 현상이 발생한다. 예를 들어서, class Order(Base): __tablename__ = 'orders' id = Column(Integer, primary_key=True, autoincrement=True) info = Column(JSONB)위와 같은 테이블이 있다고 가정하자. info같은 경우 JSON타입으로 되어있는데 만약 값을 바꾸고 싶다면 일반적으로 아래와 같은 코드를 사용할 것이다. order = .. 2020. 4. 25.