개발의 유용한 정보를 모아두는 사이트로 Discovery 에 영감을 받아 작업합니다. 현재 AWS 서버 비용 문제로 운영하지 않고 있습니다.
EC2 내부에 Nginx, Django, Next.js가 도커 컨테이너로 실행됩니다. Nginx를 통해 healthcheck 와 라우팅을 설정합니다. Next.js 에서 페이지를 리턴하고 필요한 API 는 Django에서 응답하게 됩니다. 기능적인 부분과 테스트, 문서화를 더 보충한 이후에 캐싱 및 최적화를 진행할 예정입니다. 관련 프론트와 인프라는 아래 연계 프로젝트에서 진행합니다.
기존 배포 구조(deprecated)
웹페이지는 SSR 방식으로 프론트 부분은 Vercel 서버에 배포하고, 이를 EC2에 올라가 있는 Django에서 렌더링 합니다. 회원 로직과 게시판이 주 기능으로 마크다운 에디터를 사용하고, 글에 추가되는 이미지는 S3에 업로드 합니다.
-
이슈 : 페이지 렌더링 시간이 오래걸림
- 원인 : 기존 Vercel을 이용하게 되면, 각각 다른 네트워크에 있는 서버로
EC2<=>Vercel사이에 통신이 많은 점 - 해결 : Nginx를 통한 EC2 내부 컨테이너 간의 통신으로 변경 및 캐싱 적용
- 원인 : 기존 Vercel을 이용하게 되면, 각각 다른 네트워크에 있는 서버로
-
이슈 : Django DEBUG=False 옵션에서 static, media, Next.js 페이지와 각종 이미지 제공 안됨.
- 해결 : Nginx 도입
-
프론트
- FrontendDeveloperDiscovery
- Typescript, Next.js
-
인프라
- InfraDeveloperDiscovery
- Terraform, AWS
환경 구성
- Python 3.10
- 다음 명령어를 순차적으로 실행하여 환경 구성을 합니다.
- git clone 프로젝트_CLONE_URL
pipenv installpipenv shell로 가상환경에 들어갑니다.- .envs 폴더를 생성하고 폴더 안에 .dev, .prod, .test 파일을 생성합니다.
- 해당 파일들에 아래 코드를 작성합니다.
SECRET_KEY='시크릿 키'
POSTGRES_DB=test_db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
coverage
- 로컬에서 환경 구성 이후 developer_discover 폴더에서 coverage run manage.py test 를 통해 현재 커버리지를 알 수 있습니다. 로컬 개발 시 수시로 확인해서 80% 를 목표로 테스트 코드를 작성합시다.
- coverage 및 badge 관련 문서를 참고하세요.
- TODO: github action으로 coverage 뱃지 업데이트 자동화하기
스크립트
- scripts 폴더에서 sh coverage_update.sh
수동 업데이트
- 프로젝트 루트에서
cd developer discover - 이전에 테스트한 결과가 있는 경우,
coverage erase coverage run manage.py test를 통해 테스트coverage xml && coverage html로 각각 파일 생성mv coverage.xml ../reports/coveragehtml의 경우 htmlcov 에서 index를 coverage 폴더로 이동- 프로젝트 루트에서
genbadge coverage로 뱃지 업데이트


