-
[Django] Migration으로 테이블 관리하기Web & Framework 2022.12.30 21:02
기능을 추가하게 되어 모델을 변경해야 할 일이 생겼다. 테이블을 수정하고 migration을 적용하면서 dependency 오류부터 relation exists 오류까지 아주 난항을 겪었다. 사실 토이프로젝트를 진행했을 때는 migration이 꼬이면 그냥 전부 밀어버리고 다시 적용하면 그만이었다. 하지만 실제로 배포되고 데이터가 담겨 있는 db의 테이블을 수정하는 경우에서 이러한 1차원적인 방식으로 접근할 수는 없었다. 이 과정에서 다소 긴 삽질의 과정을 경험하며... 내가 migration에 대하여 정확히 이해를 하지 못하고 있음을 깨달았다. 💡 Migration이란? 일종의 database version control log라고 이해하면 될 것 같다. python manage.py makemigra..
-
Github Action으로 EC2 배포 자동화하기DevOps 2022.12.16 23:33
💡 Github Actions이란? Github Action은 build, test, deployment와 같은 workflow를 자동화할 수 있는 CI/CD 플랫폼으로, github repository에서 발생하는 모든 이벤트(push, pull request, merge 등)에 대하여 정해진 동작을 실행시키도록 할 수 있다. 진행중인 프로젝트에서는 docker compose를 이용해 서비스 컨테이너들을 관리하고 있다. 소스코드가 수정될 때마다 수동으로 컨테이너를 삭제하고 빌드하는 방식으로 테스트 서버를 운영하다가 Github action을 사용하여 CI/CD를 자동화해보기로 했다. 🤔 CI/CD 프로세스 설계해보기 다음과 같은 프로세스들을 자동화시키려 하였다. 1. 생성된 pull request에 대..
-
[backend.ai] hotfix PR 뜯어보기오픈소스 컨트리뷰톤 2022.10.06 16:11
얼마전, 오픈소스에 하나의 PR을 머지시켰다. (포스트는 여기 👉🏻 https://soheeeep.tistory.com/56?category=1124285) 다음날 레포를 확인해보니, 내가 merge시킨 기능과 관련한 hotfix가 2개나 열려있었다.. 🧨 #768. create vfolder status correctly 첫번째로 새로 추가한 컬럼(vfolder.status)의 default value 설정값과 관련하여 버그가 발생한 듯하다. python sqlalchemy에서는 다음과 같은 포맷으로 table과 column을 관리한다. 테이블에 컬럼을 추가하는 작업을 진행할 때, 컬럼의 기본값을 지정해주기 위해 default 인자를 사용했다. 하지만 이미 존재하던 테이블에 새로운 컬럼을 추가한 것이므..
-
[backend.ai] #575. introduce vfolder status오픈소스 컨트리뷰톤 2022.09.14 23:08
Introduce vfolder status · Issue #575 · lablup/backend.ai For storage-proxy operations that takes a long time, such as vfolder clones and deletion, we need to prevent user access in the meanwhile. Let's introduce vfolder status to allow or deny user... github.com ✏️ Issue Contents vfolder clone, delete와 같은 storage-proxy operation 작업을 수행할 때, 사용자의 접근을 제어할 수 있도록 vfolder 상태값을 관리하려고 한다. ✏️ Ideation..
-
[backend.ai] #691. Add the commit history between releases in the release notes오픈소스 컨트리뷰톤 2022.09.14 23:32
Add the commit history between releases in the release notes · Issue #691 · lablup/backend.ai Let's append the actual commit history for each release by updating scripts/extract-release-changelog.py. Now we can skip changelogs for specific PRs, but sometimes we may still want to inspect... github.com ✏️ Issue Contents release note(CHANGELOG.md)에 커밋 히스토리 기록을 추가하도록 scripts/extract-release-changelo..
-
@abstractmethod를 통한 SOLID 원칙 적용하기Python 2022.02.27 17:06
🚀 개요 db에는 여러 종류의 table이 존재한다. 서비스의 business layer에서는 필요에 따라 각 table에 접근하여 query를 수행해야 할 것이다. ORM같은 프레임워크 툴을 사용하지 않고 raw query를 전부 선언하여 사용하는 경우, 이 query들을 어떻게 작성하는게 좋을까? 전부 하나의 class에 method로서 선언하기? create, update등 용도에 따라 분리하기? entity, interface, repository, 각각 layer를 추상화하여 코드를 작성하며 내가 그리고자 했던 파이선 architecture가 어떤 모습이었는지 기록해보려 한다. 📐 SOLID 원칙: 객체지향설계 5원칙 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계에 대한..
-
PyQt로 gui 프로그램 만들기근무표 생성기: gui 프로그램 설계하기 2022.02.26 20:47
PyQt5는 Qt5 어플리케이션에 대한 파이선용 GUI 프레임워크이다. 🚀 개요 파이선을 위한 GUI 프레임워크로는 PySide, Tkinter 등등.. 이 있는데 PyQt tkinter pip를 이용하여 설치 python의 표준 라이브러리로 간단한 gui 프로그램을 만들때 유용 QtDesigner라는 gui 디자인 툴이 제공, 다양한 widget과 내장 기능 지원 타 gui 프레임워크에 비해 지원되는 widget들이 부족하고, ui를 구성하기 용이하지 않음 처음에 '단순하게 가자'라는 생각으로 tkinter를 사용하다가 중간에 PyQt로 전환하였다. 이유는 1) PyQt가 훨씬 직관적이고 사용하기가 편했고, 2) 레퍼런스가 훨씬 많아서 활용도 측면에서도 편하다고 느꼈기 때문이다. 사실 PyQt가 접근성..
-
[Django] 프로젝트 구조 잡기Web & Framework 2021.10.17 19:41
장고는 하나의 프로젝트 내에 여러 개의 app이 존재하는 구조이다. python manage.py startapp [appname] 명령으로 app을 생성한 뒤, settings의 INSTALLED_APPS에 생성된 app을 등록해줌으로서 손쉽게 관리할 수 있다. 좌측의 이미지는 app을 생성하였을 때의 기본구조이다. root 디렉토리에 manage.py가 위치하고, app내에 각각 model, view, test, admin, migration 파일들이 위치하고 있다. 최근 새로운 사이드 프로젝트를 시작할 때도 해당 구조를 그대로 적용했었는데, 프로젝트 구조가 정리되지 않은 느낌이 있다는 피드백을 듣고 정말 고민을 많이 했었다. url과 setting을 개발용/배포용으로 분리하는 것 의외에 프로젝트 구..
-
[Django] API를 사용하여 지도 구현하기Web & Framework 2020.08.03 17:25
API를 사용하여 Django에서 지도를 구현해보는 실습입니다! 먼저, 가상환경을 생성하고, 실행해줍니다. $ python -m venv myvenv $ source myvenv/Scripts/activate //mac $ python3 -m venv myvenv $ source myvenv/bin/activate 장고를 설치해준 뒤, $ pip install django //mac $ pip3 install django 장고 프로젝트를 생성하고 지도를 위한 app을 만들어줍니다! $ django-admin startproject [myproj]//프로젝트 생성 $ cd [myproj]//생성한 프로젝트 폴더 안으로 이동 $ python manage.py startapp [appname]//app 생성 ..
-
OpenCV를 활용하여 Line과 Lane 추출하기자율주행 자동차 제작 프로젝트 2020.09.02 17:42
라즈베리파이를 세팅한 후에, VNC Viewer를 사용하여 원격으로 제어하여 실습을 진행했습니다. 위 실습을 진행하기 위해서는 라즈베리파이에 USB 카메라를 연결하고, 1) OpenCV와 2)cheese를 설치해주는 사전과정이 필요합니다! 카메라를 사용하는 기본 예제를 먼저 볼까요? #include #include //OpenCV #include using namespace cv; using namespace std; #define IMG_Width 640//가로 픽셀값 #define IMG_Height 480//세로 픽셀값 int main(void) { int img_width, img_height; img_width = 640; img_height = 480; Mat mat_image_org_colo..