전체 글 315

[Jenkins] Jenkins 란? (with. docker)

Jenkins 란? 젠킨스(Jenkins)는 지속적 통합(Continuous Integration, CI) 및 지속적 전달(Continuous Delivery, CD)를 지원하기 위해 개발된 오픈 소스 자동화 도구로, 소프트웨어 개발 및 배포 과정에서 자동화된 빌드, 테스트, 배포 작업을 수행하여 개발자와 팀이 소프트웨어를 빠르게 개발하고 안정적으로 배포할 수 있도록 도와줌 Jenkins 주요 특징 지속적 통합(CI): 소스 코드 변경이 발생할 때마다 자동으로 빌드 및 테스트를 실행하여 코드 품질을 유지함 지속적 전달(CD): 테스트 및 빌드가 성공하면, Staging / Production 환경으로 자동 배포 다양한 플러그인 지원 : AWS, Docker 등 다양한 플러그인 등을 지원하여, 특정 기능을..

DevOps/CI-CD 2023.08.30

[Python UI] Reflex 보일러 플레이트 (Boiler Plate)

BoilerPlate란? BoilerPlate Code란 재 사용할 수 있는 뼈대 코드로, 보일러 플레이트를 작성해 놓고, 프로젝트 신규 생성 시마다 적용하여 사용 가능하다. 폴더 구조 프로젝트를 진행하면서, 협업하기 좋은 구조를 생각하게 되었고, 경험적으로 다음과 같은 프로젝트 폴더 구조를 작성하게 되었다. Reflex Boilerplate ┌─Reflex BoilerPlate │ └─assets │ ├─ imgs/ : img 파일 │ └─ css/ : css 파일 │ ├──states/ : 상태 관리 앱 │ ├─base_state.py : 기본적으로 쓰이는 정적인 State에 대한 관리 (다른 State들이 상속 받아 사용) │ ├─image_upload_state.py : 이미지 업로드에 대한 상태..

[Python UI] Reflex, Streamlit 비교 및 선택

Reflex 란? 특징 구 Pynecone -> 현 Reflex 로 이름 변경 비동기 이벤트 기반의 실시간 애플리케이션 개발을 위한 프레임워크 성능 측면에서 좋은 결과를 보여줄 수 있음 (고성능 비동기 웹 서버 Dazzler 가 내부적으로 사용됨) 실시간 데이터 처리, 대시보드, 모니터링 및 제어 시스템 등의 애플리케이션에 적합 커뮤니티와 문서화가 상대적으로 부족 (이슈 발생시 문제 발생시 해결에 오래걸릴 수 있음) 내부적으로 FastAPI Backend와 FE는 Next.js 기반으로 동작함 (소켓으로 연결됨, Next.js는 React로 변환) 에러 지점이 많을 수 있음 (Next.js에서 차용하는 라이브러리의 버전 업에 따른, deprecated 등) docs , github, star 수 11.9..

[리팩토링] 리팩토링 경험기 (2) 가독성 높이기 - 함수명 개선

배경 몇달간의 프로젝트를 진행 후에, 서로 다른 코드 스타일, 모듈들의 역할에 대해 상이하게 생각한 부분 등의 문제점들이 발견되었고, 2주 간의 리팩토링을 진행하는 시간을 가지게 되었다. 다음 글에서는 리팩토링을 진행 하면서, '가독성 높이기 - 함수명 개선' 에 대한 경험을 공유 하려 한다. 가장 큰 목적은 여럿이서 작성한 다양한 함수명 틀을, 조금이나마 비슷하게 맞춰 가독성을 높이는데 중점을 두었다. 함수명 개선 간 나름 정한 규칙은 다음과 같다 - Service Class 명도 해당 함수에 같이 의미 해석 된다. - check, validate, in 등의 비슷한 결의 함수명을 가지게 함 사례 1 - 함수명 개선 하기 👉 프로젝트 구조 설명 router.py (요청) -> service.py (비즈..

[리팩토링] 리팩토링 경험기 (1) 공통 코드 줄이기

배경 몇달간의 프로젝트를 진행 후에, 서로 다른 코드 스타일, 모듈들의 역할에 대해 상이하게 생각한 부분 등의 문제점들이 발견되었고, 2주 간의 리팩토링을 진행하는 시간을 가지게 되었다. 다음 글에서는 리팩토링을 진행 하면서, '공통 코드를 줄이는 것' 에 대한 경험을 공유 하려 한다. 과정 👉 리팩토링 전 프로젝트 구조 router/ : api 및 service/ return 값에 따른 error handling 수행 service/ : 비즈니스 로직 작성 및 결과에 따른 return 성공 여부 반환 즉 router에서 service 로직을 호출하여 수행하다가, 성공 여부를 router로 반환해, 핸들링 된 에러로 유저에게 응답하는 방식 초기에 이렇게 작성했던 이유는 api 별로 error 흐름을 파악..

[DB, Django] Migration 이슈 해결 모음

migration 이슈 발생시 주로 파악해야 될 연관 부분migration 이슈는 각 개별 환경마다 특수하기 때문에, django에서 특정 DB에 migrations시 어떤 과정으로 반영되는지 직접 이해하는 것이 트러블 슈팅이나 디버깅에 좋다.django의 migrations/ 내 migrations 파일들DB의 django_migrations 테이블 히스토리 사례 1 - 모델이 해당 DB에 없다고 나오는 경우👉 오류 메시지table ~ does not exist 👉 사례 / 해결방법1) migration 파일이 없어서 안생겼을 경우- django의 migration 파일이 잘 생성되었는지 확인 (django makemigrations 시 migrations/__init__.py가 있는지 등) 2) ..

DB/경험 공유 2023.07.08

[배포] Python WSGI 배포 서버 종류 (Gunicorn, uWSGI)

관련 정리 글 https://yubi5050.tistory.com/153 // [웹서버] WebServer와 WAS 차이 https://yubi5050.tistory.com/114 // [웹서버] CGI vs ASGI vs WSGI 비교 https://yubi5050.tistory.com/109 // [Django, AWS] EC2 에서 Nginx + Gunicorn + Django 배포하기 이전 글 요약 WebServer는 WAS의 부하를 줄이며, WAS(Gunicorn, Uvicorn, uWSGI)과 같은 서버를 통해 Web Application 배포 ASGI, WSGI 등은 CGI (Common Gateway Interface)의 일종으로 여러 언어들의 다양한 요청을 이해할 수 있도록 공통된 규칙으..

Python/Deployment 2023.07.08

[Python] Class 이해 - 언더바 정의, @property, @staticmethod, setter/getter

언더바 ( _ ) 1개, 2개 차이Python 클래스 내부 변수와, 메소드에 대한 캡슐화 정도를 조절하기 위해 언더바(_)를 사용하는데, 언더바 1개와 2개는 그 정도가 다르다. 👉 하나의 언더바 (_) 사용_variable, _method()비교적 약한 캡슐화 정도를 가짐일반적으로 내부적으로 사용되는 변수, 메소드를 나타냄 👉 두개의 언더바 (__) 사용__variable, __method()이중 언더바를 사용하면 이름이 자동으로 변환되어 상속시 충돌을 방지 (_클래스명__)강한 캡슐화 정도를 가짐 (외부에서 직접 접근 불가)클래스 내부에서만 접근 가능 👉 예시 코드아래 예시에서 볼 수 있 듯, 두개의 언더바(__)를 사용한 변수/메소드는 직접적으로 접근하지 못하고, 해당 클래스를 직접적으로 통해..

Python/Advanced 2023.07.02

[Django Ninja] 설계 패턴 정하기 (feat. 리팩토링)

서론진행 중인 Django Ninja 프로젝트에서 리팩토링을 진행 하며, 코드의 중복을 줄이거나, 객체지향적 구조로 변경 등의 방향성 외에도, 프레임워크에 맞는 특정 패턴을 기준으로 삼아보려고 하였다. Django에는 "Fat Model Skinny View"라는 대표적인 패턴이 있고,FastAPI는 주로 "Thin Models, Fat Functions"  패턴을 통해 코드의 직관성을 높이는데 집중한다.(참고로 Django Ninja는 FastAPI의 등장을 주 Motivation 중 하나로 얘기하고 있음) Django-Ninja 프로젝트에서 Django의 "Fat Model Skinny View" 설계 패턴이 어울릴까? 해당 글에서는 Django(DRF)의 Fat Models, Skinny View ..

Python/Django Ninja 2023.07.01

[Utils] Custom Pre-commit hook 구현

Custom Pre-commit Hook 구현하기 👉 사용 사례 - API 문서 배포시 자동으로 error 코드가 적힌 html 문서가 같이 만들어 지도록 hook 에 추가 - hook은 (.py) 파일 구현 👉 구현 방법 - repo : local 값 - id와 name 설정 및 entry 로 .py 실행 - language : python 설정 # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: # make error code html - repo: local hooks: - id: make-error-enum-html name: make-error-en..

Python/Utils 2023.06.24