제가 일하는 방식 : 필요 -> 공부 -> 적용 (파이썬/Django는 이런 프로세스에 알맞은 생태계를 가진거 같음)
필요: 거의 혼자서 쇼핑몰을 만들어야하는 상황 공부: 쇼핑몰 대체 어떻게 만드는거야?! 적용: 발표 내용
이미지 파일 다루기
- 스토리지 : 아마존 s3. CDN : CF
- 이미지 썸네일 패키지 : django-versatileimagefield
- 실제 모델 구성과 사용 예
배송 확인
- 로젠 api 배송 확인 직접 만듬(https://github.com/perhapsspy/logen-trace)
- 주기적인 배송확인 프로세스 구성(celery)
이메일 전송 / 꾸미기
- 가입시, 결제시, 문의 답변시 등 사용됨(커머스에서 필수)
- 아마존 SES를 사용 (django-ses)
- 메일클라이언트에서 지원하는 CSS는 매우 제한적 > django-inlinecss 패키지 구해서 끼얹기
- 하위호환을 위해 텍스트와 html 버전을 모두 넣어서 보냄
- 이미지는 최소한으로 로고만 넣음
결제
- 마침 아임포트에서 api 서비스를 제공
- 아임포트 restful api 사용하는 공식 패키지를 직접 만듬(https://github.com/iamport/iamport-rest-client-python)
- 결제 로직 호출은 javascript로 프론트에서 이루어짐
- 리다이렉트 url을 통해 통보 받는 백엔드에서 api를 이용해 검증 후 결제 처리
- 처음엔 검증 로직이 데스크탑과 모바일이 다른 분기로 이루어졌으나, 데스크탑도 모바일 처럼 리다이렉트 처리하게 개선함
- 부분 취소 같은건 아직 구현 안됨
- 12개월 무이자 할부 기능은 아임포트측과 거의 라이브로 개발되어 들어감
API
- 북스토어 정보를 외부에서 접근(재고 관리나 배송 확인 등)
- DRF 로 간단히 구현
- 토큰 방식 인증
- viewsets을 많이 씀
리포트
- 정산, 회원/주문 모니터링
- django aggregation 활용
- excel mixin 만들어서 재활용
- 최대한 단순한 작업으로 리포를 추가하기 좋게 만듬
- admin-lte 프레임워크로 프론트 구성
관리자
- django admin을 커스텀하여 활용
- 목록 편집, 썸네일 넣기, 입력 필드 추가, 관계 모델 편집
- admin에서 제품 설명 미리보기 구현
디자인
- http://materializecss.com/ 을 베이스로 활용
- 모바일 친화적 반응형 디자인(실제로 모바일 결제율이 매우 높은 커머스가 됨)
- ajax는 장바구니에만 일부 적용.
- css는 less를 활용(sass는 컴파일을 위해 루비를 추가 설치해야해서 빠짐)
UTM 추적
- 결제시 UTM을 확인하여 주문서에 기록하는 모듈
- 단순 참조용 지금은 잘 안씀
주문서 모델
- 주문 결제 흐름은 상태가 바뀌고 저장되어 있어야함.
- 모델을 여럿 만들어서 다소 복잡함
- 환불 상태 모델을 분리
홍보용 페이지
- 간단히 홍보용 페이지가 필요함
- 후반부에 단시간 내에 추가
- django-summernote로 추가(문제가 좀 있으나 일단은 씀(이미지 태그에 a가 안먹음))
- 초기 홍보에 잘 써먹었고 개편 예정
제품 모델
- 이미지, 제품, 제품 설명, 재고, 재고 기록을 분리
- 제품 설명은 제품에 리치 텍스트로 넣는게 더 나으나 일단 개발 편의성이 이쪽이 유리(개선 예정) 장바구니
- 언제든 확인 가능하게 구성
- 장바구니 편집 뷰를 공용으로 씀(개발 편의)
- 무료 배송비 계산 등이 귀찮음
- 비회원 장바구니와 회원 장바구니 연동은 쿠키와 모델로 이루어짐
주문 진행
- 주소는 다음 주소 API를 씀
- 주소록을 기록해 놨다가 손쉽게 읽어올 수 있게 함
- 주소 입력시 최대한 덜 실수하게 고민함
- django 폼은 하나만 쓰면서 진행할 수 있게 장바구니는 분리되어 구성
- 장바구니 동기화가 약간 지저분하지만 일단은 작동하는 걸로
배포(도커)도 있습니만 일단 안썼습니다. 일단 생각나는걸 마구 적어보았습니다. 적립금 구현 이야기는 아직 개발중이라 발표할때쯤엔 정리될지도 모르겠습니다. 적립금 구현이 들어가면 테스트(모델마미) 이야기도 추가될거 같습니다.
제일 기대되는 세션이에요!