Code Monkey home page Code Monkey logo

virtu-mall's People

Contributors

aohus avatar f-lab-bot avatar flabkenneth avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar

virtu-mall's Issues

잔고(내 지갑) 관리 기능

목적

  • 사용자가 가상의 화폐를 충전하고 선택한 상품에 대한 결제 경험을 할 수 있도록 함.

할 일

  • 잔고 조회 기능
  • 잔고 충전 기능

Unit Test 환경 구축하기

목적

  • 프로젝트의 코드 베이스가 커짐에 따라 코드 복잡도 늘어나게 되었고, 코드 변경에 따른 사이드이펙트 가능성이 높아졌다.
  • 코드 신뢰성 확보를 위해, 기존에 작성했던 기능과 향후 기능에 대해서 유닛 테스트 작성이 필요한 시점이다.
  • 유닛 테스트 환경을 구성하여 유닛 테스트 작성을 일상화하고 효율적으로 할 수 있게 해야한다.

할 일

  • pytest 의존성 구성
  • pre-commit에 pytest 자동화 하기
  • 기존 함수들 유닛 테스트 구성
  • GitHub actions CI로 testing automation 설정
  • README.md에 test 방법 기술하기

AWS 서버 구성

목적

요청을 효과적으로 처리하기 위한 서버를 구성한다.

  • NGINX: 로드밸런서, 리버스 프록시, 캐시로도 쓰일 수 있는 소프트웨어이다.
  • Gunicorn: web server gateway interface로 http 요청을 python application code로 변환해주며, 요청에 필요한 application code만 실행하도록 한다.

논의

  • 단일 서버에 여러 Django server(포트가 다른) 띄워 Nginx가 이를 로드밸런싱하도록 구성 : docker-compose로
  • 실제로 서로 다른 instance에 Django server 실행하고 Nginx가 이를 로드밸런싱 하도록 구성
    : AWS EC2는 한 달 750시간까지 free-tier로 제공되는데 instance를 여러개 띄울 시 750시간을 넘어가지 않도록 껐다 켜야함...!

할 일

  • Gunicorn 설치하여 Django 서버 앞에 구성하기(gunicorn --workers 2 --bind 0.0.0.0:$PORT virtumall.wsgi:application)
  • nginx.conf file 작성

Lint 구성하기

목적

  • 코드 품질 관리 및 컨벤션 자동화를 위해 lint를 세팅한다.

린트 항목

  • Flake8 (PEP 8 검증 용)
  • Black (추가 품질 검증 + Autofix 목적)
  • Isort (Import 패키지 로드 순서 린트 목적)

특이 사항

  • CI를 구성할 때는 super-linter actions로 v5를 검토하기.

할 일

  • flake8 구성
  • black 구성
  • isort 구성
  • GitHub actions로 CI 구성 (w/ super-linter)
  • precommit 구성

상품 조회 및 관리 기능 추가

목적

  • 상품 검색 및 필터 기능을 통해 효과적인 탐색을 가능하게 함.
  • 선택한 상품에 대한 세부 정보를 제공하여 사용자의 의사결정을 도움.
  • 상품 관리 기능을 통해 관리자가 상품을 쉽게 추가, 수정, 삭제할 수 있도록 하여, 상품 목록을 효율적으로 관리.

할 일

  • 상품 추가(스토어 유저만)
    • 기본 정보 등록
    • 이미지 등록
  • 상품 목록 조회 기능(기본 정보: 상품명, 가격, 이미지링크)
  • 상품 세부 정보 조회 기능(기본 정보 + 추가 정보: 판매자 decription)
  • 상품 수정/삭제 기능(등록한 본인만)

검색 기능 구현

목적

  • 사용자 검색어/필터에 맞춘 검색 결과를 반환하는 기능을 구현한다.

AWS EC2 instance에 서비스 배포

목적

AWS EC2 인스턴스를 생성하고 Docker 위에서 어플리케이션 코드가 동작하도록 한다.

할 일

  • EC2 instance 생성
  • EC2 free-tier에 Docker 데몬 및 서버 구성하기
  • Github Actions workflow를 통해 EC2 instance에 배포
    • Github Secret Keys 등록(environment variable)
    • docker run -dit -H xxx 형태로 배포할 수 있게 구성해두기. (link)
  • /healthz -> 200 응답받기

Test coverage 구성하기

목적

  • Test coverage를 바탕으로 테스트가 얼마나 실제 코드를 테스트 하고 있는가 (즉 커버 했는가)를 확인하여, TC 견고성을 보장한다.
    • TC: Test Case
  • Test coverage rate를 CI에 조건으로 달아 85%가 넘지 않으면 에러가 나오게끔 설정하여 테스트 신뢰도를 높인다.
  • Codeclimate quality gate를 연동하여, Test coverage report를 자동화한다.

할 일

  • pytest-cov 설정하기
  • GitHub actions pytest-cov coverage report 연동하기
  • SonarQube quality gate 연동하기
  • pytest-cov와 SonarQube coverage 연동하기

SonarQube 업데이트 되었다고 하네요.

image

Django 사용 DB로 AWS RDS 연결

목적

  • 더 높은 성능을 제공하는 AWS RDS의 MySQL 사용
    • �SQLite는 경량 데이터베이스로 단일 파일에 데이터를 저장하며 동시 쓰기 작업에 제한적이다.

할 일

  • RDS database 생성
  • EC2 서버와 연결
  • Django settings.py 에 database 정보 입력
  • poetry에 mysqlclient 추가

Python 3.9 이상의 타이핑 적용

목적

  • Python 3.9 이상에서는 Type comprehension으로 하기 스타일을 제공하여 이로 대체한다.
dict[str, int] # Dict[str, int]
tuple[int]     # Tuple[int]
list[float]    # list[float]
  • 따라서 기존 방식의 deprecated 될 Type generic pattern을 모두 대체한다.

할 일

  • Python 3.9 이상의 방식으로 type variant 교체.

함께보기

https://peps.python.org/pep-0585/#implementation

회원 관리 기능 추가

목적

  • 쇼핑몰 사용자의 그룹인 구입자/판매자의 계정 분리 및 분리된 계정의 프로필을 관리 기능이 요구됨.
  • 따라서 로그인/회원가입과 가입 유저의 프로필을 편집할 수 있는 기능을 추가.
  • 이를 통해 이 기능에 연결되어있는 #14 , #15 , #16 기능의 개발이 가능해짐.

할 일

  • 회원가입
  • 로그인/로그아웃
  • 사용자 프로필 수정
  • 판매자로 등록

Typing 적용

목적

  • 타이핑은 런타임에서 발생할 타입 불일치와 값 형식 불일치에 따른 예외 사항을 방지해줍니다.
  • 또한 협업할 때 입력값이나 출력값의 기대 값 예측을 도와주어 서로 작성한 코드를 쉽게 이해하는데 큰 도움을 줍니다.

타이핑 적용 대상

  • 빈 collection 변수 (dictionary, list, tuple)
a: list[int] = [] # Python 3.9부터는 collection에 List[T] 대신 list[T] 형태로 표기 가능.
                  # a는 코드 읽는 사람으로 하여금 int 타입의 값을 추가하거나 읽을 수 있음을 명시.
a.append(3)
  • 파라미터 타입 및 반환 타입
def (a: int, b: float) -> float:
    return a + b

할 일

  • 상위 기재된 대상에 타이핑 적용.
  • mypy pre-commit 적용.
  • mypy GitHub actions 적용.
  • 모든 mypy 에러 해결하기.

Poetry 구성하기

목적

requirements.txt는 하기와 같은 문제가 있어서, 더 명확하고 체계화 된 패키지 관리를 위해 poetry를 설정한다.

  • 패키지 설치와 설치한 패키지의 등록 과정이 별개이므로 동기화 되기 어려움.
  • 개발 목적의 패키지와 서비스 목적의 패키지를 분리하기 어려움.

할 일

  • poetry 설정.
  • requirements.txt를 poetry로 이전.
  • README.md 업데이트.

기능 명세서 정리하기

목적

  • 우리는 구체적으로 무엇을 만드는지 스팩을 정의하기 위해 기능 명세서를 작성하고 설계단계를 앞서 논의할 생각입니다.

작업 팁

  • 모든 업무 순서는 무엇을(What) -> 왜(Why) -> 어떻게(How) 순서로 생각하는게 좋습니다.
    • 무엇을 작업하든 누군가 저 3가지 질문(What, Why, How)를 물을 때 막힘 없이 지연 없이 대답하는 습관을 가지시는게 좋습니다.
    • 따라서 어떤 업무든 저 3가지를 늘 고민해주세요.
  • 기능 명세서의 작업은 What입니다.

할 일

  • 기능명세서 작성하기. link
  • 기능명세서 리뷰 수신 및 반영.
  • 기능명세서 최종본 확정.

주문 결제 기능

목적

  • 사용자가 상품을 주문하고 결제할 수 있도록 하여, 웹사이트를 통한 전자 상거래 경험을 제공

할 일

  • 주문 생성 및 결제 기능
  • 주문 상태 관리 기능(주문 확인 -> 배송 준비 -> 배송 중 -> 배송 완료)
  • 주문 및 결제 취소 기능(주문 취소)

FastAPI 초기 구조 작업

목적

  • FastAPI로 프로젝트를 구성해봅시다.
  • FastAPI는 AsyncIO와 일부 SOLID 규칙을 지원하도록 구성된 차세대 Python WebServer 구성을 위한 프레임워크입니다.

논의 주제

  • FastAPI vs Django 무엇이 좋을까?

구현 범위

  • 프로젝트가 동작까지만 하게 구현합시다.
  • 초기 디텍토리 구조나 앞으로의 작업 방향을 위한 초기 작업입니다.
  • 코드 크기가 너무 커지지 않도록 주의해주세요.
  • 이후 PR에서는 하나씩 더 많은 기능을 쌓아나갈 것이니, 초기 작업에 너무 많은 구조를 잡지 않도록 해주세요.
  • 대신 올라오는 코드들은 견고하고 꼼꼼하게 작업되어있어야 합니다.

할 일

  • GET /healthz API를 구현하기 (json으로 message: ok 반환)
  • 프로젝트 폴더 구조는 전체적으로 잘 잡혀있어야 합니다.
  • 실행 방법이나 설치 방법 README.md에 추가.
  • /healthz 에 대한 Unittest 코드 작성. (pytest로 구현하고, unittest를 위해 서버 mocking이 필요)

장바구니 관리 기능

목적

  • 사용자가 원하는 상품을 장바구니에 추가하고 관리할 수 있도록 하여, 편리한 쇼핑 경험을 제공.

할 일

  • 장바구니 수정(수량 변경)/추가/삭제 기능
  • 장바구니 조회 기능

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.