Django/파이썬 기반 쇼핑몰 핀코인 (부제: Django를 선택한 이유)


파이썬/장고 | 2018-12-22 22:12 | comments | 6,525 views


안녕하세요.

핀코인은 Django/파이썬을 기반으로 만든 쇼핑몰입니다.

2012년 12월 처음 온라인 상품권 쇼핑몰 사이트를 오픈하고 벌써 어느덧 2018년 12월 만6년을 채우고 한 해가 또 저물어 갑니다.

현재 핀코인 쇼핑몰/블로그는 Django 파이썬 프레임워크를 사용하여 직접 개발했습니다.

핀코인 사이트를 2012년부터 운영하여 시간은 제법 오래 됐지만 회사의 규모나 사이트 매출 대비 페이지뷰는 매우 낮은 편입니다. 하지만 소규모이고 1인 개발자 스타트업 수준이기 때문에 다양한 시도와 실험을 해볼 수 있었습니다.

왜 기존 임대형 쇼핑몰 솔루션을 이용하지 않는가.

쇼핑몰 오픈을 위해서는 기본적으로 기성품 범용 쇼핑몰 솔루션을 쓸 수 있습니다. 우리나라 대표적 쇼핑몰 솔루션은 크게 다음 세 곳입니다.

대한민국 대다수의 자사 쇼핑몰은 이 범용 솔루션을 이용한다고 봐도 무방합니다. 그렇지 않으면 G마켓, 11번가 등의 오픈마켓이나 네이버 스마트스토어에 입점하고 수수료 지불 임대형 쇼핑몰을 운영할 수도 있습니다.

이 솔루션 제품들은 모두 우리나라의 일반적인 상품을 판매하는데 최적화되어 있습니다. 일반적인 상품의 주문/배송 프로세스는 주문-결제-발송-완료 처리의 절차를 거칩니다. 하지만 저희 핀코인은 상품의 배송이 없는 상품권 핀 번호를 보내야 합니다. 따라서 물류 처리 프로세스는 불필요할 뿐만 아니라 고객의 주문 프로세스 자체에서 복잡한 입력 단계를 거칠 필요도 없습니다.

의류를 비롯한 일반적인 상품을 판매는 개인적으로 이러한 쇼핑몰 이용하는 것을 추천합니다. 왜냐하면 프로그래밍/개발 지식이 없더라도 카페 운영하듯이 쇼핑몰을 쉽게 오픈할 수 있고 디자인 커스터마이징 해줄 수 있는 인력을 구하는 것도 크게 어렵지 않기 때문입니다.

많이 쓰이는 기성품이기 때문에 뭔가 공장에서 찍어낸 듯한 쇼핑몰이라서 다른 쇼핑몰의 기능적인 차별화는 어려운 단점도 있습니다. 그러나 대다수 쇼핑몰이 경쟁적으로 사용자 편의를 위한 데스크톱/모바일 인터페이스를 개선하고 있어서 고객에게 편리한 쇼핑 경험을 제공하는데 전혀 무리가 없습니다. 오히려 쇼핑몰이 너무 독특한 인터페이스를 제공하면 처음 이용하는 사용자는 매우 낯설어 하는 측면도 있습니다.

핀코인이 설치형 쇼핑몰 솔루션을 이용하기로 결정한 이유는 일반 상품 배송 프로세스가 없다는 차이점 때문이었습니다. 2012년 당시에는 대부분의 상품권 쇼핑몰은 이러한 기성품 쇼핑몰 솔루션을 기반으로 서비스를 제공하고 있었기 때문에 보다 빠른 주문과 발송 처리를 할 수 있는 차별화 전략이었습니다.

그리고 전공을 컴퓨터로 했지만 직업이 아니라 취미로 개발 프로그래밍을 하고 싶었기 때문에 설치형 쇼핑몰 솔루션을 쓰기로 결정했습니다. 현재도 프로그래밍을 일과 취미 사이에서 할 수 있기 때문에 핀코인 사이트 운영을 매우 좋아합니다.

오픈카트로 오픈한 핀코인

국내 임대형 쇼핑몰 솔루션이 다양하게 있는 것과 마찬가지로 국내 설치형 솔루션도 여러 개 있습니다.

이러한 국내 쇼핑몰 또한 역시 일반적인 상품 주문/배송 프로세스에 최적화되어 있었습니다. 사실 이 부분도 어느 정도 직접 최적화하면 되겠다는 생각이 있었고 그래서 다양한 외산 PHP 쇼핑몰 솔루션을 같이 비교하고 고민했습니다.

이렇게 많은 국내외 PHP 쇼핑몰 솔루션 중에서 오픈카트를 선택한 이유는 ERD가 너무나 직관적이고 테이블/필드의 이름도 너무나 깔끔했기 때문입니다. 보기 싫은 이상한 필드 이름 prefix 같은 것도 없고 매우 확장성이 높게 설계되어 있었습니다.

쇼핑몰의 프론트엔드에서 제공하는 사용자 편의성, 사용자 경험도 쇼핑몰 선택에 있어 매우 중요한 요소이지만 백엔드의 기초 토대가 튼튼할 때 프론트엔드도 다양한 확장을 제공할 수 있을 것이라고 생각했기 때문에 오픈카트를 선택했습니다. 그래서 themeforest.net에서 오픈카트 부트스트랩3 기반 반응형 디자인 테마를 구매하고 몇 가지 확장(extension)을 유료로 구매하고 바로 상품권을 판매하기 시작했습니다.

사실 여전히 오픈카트 PHP 쇼핑몰 솔루션은 개인적으로 훌륭한 솔루션이라고 생각하고 지금의 핀코인 쇼핑몰을 개발하는데 많은 영감과 아이디어를 줬습니다.

오픈카트를 왜 포기했는가.

오픈카트를 포기한 이유는 바로 유지보수 문제였습니다.

오픈카트는 vQmod라는 매우 흥미로운 시스템을 제공합니다. vQmod는 오픈카트의 원본 코어 소스는 그대로 유지하면서 커스터마이징 소스 변경 사항(diff)만 따로 xml 형태로 관리하면서 실제로는 커스터마이징된 소스로 실행되게 하는 것입니다. 그래서 커스터마이징 코드를 분리하여 오픈카트의 보안 패치 등을 적용할 수 있도록 하려는 취지입니다.

vQmod는 매우 훌륭한 시스템이지만 줄 단위로 소스 치환 방식이라서 실제로는 원본 소스 업그레이드에 어떤 부작용(side-effect)가 발생할 지 모르기 때문에 상당히 테스트에 신경을 많이 써야 합니다. 그리고 구매한 여러 개의 서드파티 확장들도 동작 여부를 테스트를 해야 하는데 문제는 개발이 중단된 경우도 있었습니다. 서드파티 코드를 모두 살펴본다는 것이 불가능해지기 시작했고 부트스트랩 디자인 테마도 themeforest.net에서 지원이 사라져버렸습니다.

단순히 salt 값으로 sha1 함수로 3번 해싱하는 비밀번호 알고리즘이 너무나 부실하게 느껴졌습니다. 한 번은 DDoS 공격을 받았고 언젠가는 잠재적인 위험이 될 수 있다는 판단에 반드시 시스템을 바꿔야 한다는 압박이 생겼습니다.

그러면서 새로운 오픈카트 1.5.x 버전에서 2.x 버전으로 업그레이드 하지 못하는 것도 일종의 두려움이 생기기 시작했습니다. 보안 패치가 중요하지만 현재 잘 운영 중인 사이트를 괜히 손댔다가 더 꼬여서 며칠간 영업 못 하면 그 손실이 더 클텐데 염려가 컸습니다. 그러나 오픈카트 PHP 종속성 때문에 우분투 버전도 LTS에서 제 때에 못 올리는 상황까지 이르렀습니다. 갈수록 보안에 대한 불안이 생기기 시작했고 프론트엔드에서 몇 가지 불만 사항도 있었습니다. 그래서 결국 오픈카트를 버리고 다른 솔루션을 직접 제작하기로 결심했습니다.

왜 Django/파이썬 프레임워크를 선택했는가.

저는 먼저 Django/파이썬 애찬론자가 아닙니다. 그래서 "Django가 진짜 좋아요.", "파이썬이 무조건 최고입니다." 이런 말을 하려는 것이 아닙니다.

직접 핀코인 쇼핑몰을 개발하기로 결심했을 때 가장 도움을 많이 준 건 역시 오픈카트의 설계/구조입니다. 내가 필요한 간단한 기능만 제공하는 쇼핑몰을 어떻게 만들 것인지 고민하기 전에 어떤 "언어-프레임워크"를 선택할 지가 첫 번째 고민 사항이었습니다.

  • PHP-워드프레스
  • PHP-XpressEngine
  • PHP-Yii
  • PHP-Laravel
  • 파이썬-Flask
  • 파이썬-Django
  • 자바-스프링

대충 고민한 솔루션만 놓고 봐도 어마어마하게 많습니다. 이 중에서 PHP/파이썬/자바 중 어떤 언어를 선택할 지부터도 고민이었습니다. 이 중에 파이썬을 선택한 이유는 호불호가 심한 PEP 20 - Zen of Python(파이썬의 선) 그 내용에 다음 내용 때문입니다.

There should be one-- and preferably only one --obvious way to do it.
문제 해결을 위해 바람직한 단 한 가지의 방법이 존재할 것이라는 내용입니다. 실제로는 불가능할 수 밖에 없지만 파이썬이 추구하는 바는 문제 해결에 있어 여러 가지 트릭보다는 하나의 유일한 방법을 제공하자는 것입니다.

그리고 파이썬 문법 자체가 개발자가 다양하게 선택할 수 있는 코딩 컨벤션을 "강제"합니다. 바로 이러한 강제성 때문에 파이썬을 선택했습니다. PEP 8 - Style Guide for Python Code에서 79자를 넘지 않는다는 규칙을 철칙으로 파이썬 답게 코딩하면 파이썬 코드는 누가 작성해도 거의 비슷한 모양새로 코드가 나옵니다.

네. 그렇습니다. 누가 작성해도 비슷한 코드가 나온다는 점이 바로 파이썬을 선택한 이유입니다.

그리고 Django 또한 프레임워크가 강제하는 것이 매우 많습니다. 이러한 강제성 또한 누가 코딩하더라도 비슷한 결과물을 낳는다는 점입니다.

파이썬의 쉬운 문법, Django의 다양한 기능 이러한 장점으로 파이썬/Django를 좋아하시는 분들이 많습니다. 그러나 저는 파이썬과 Django의 강제성이 소프트웨어 유지보수의 편리성을 극대화한다고 생각합니다.

핀코인 사이트는 기본적으로 보안과 백엔드의 편리성이 더 우선입니다. 핀코인 사이트를 이용하는 고객은 대다수가 급히 게임에 현질, 결제하는 유저이기 때문에 빨리 주문하고 빨리 핀번호 확인하면 끝입니다. 그러나 상품권이라는 유가증권은 화폐가치를 지니는 돈이기 때문에 보안 이슈에 민감할 수 밖에 없습니다. Django는 프레임워크 레벨에서 비교적 보안 대책이 훌륭한 솔루션입니다.

그리고 Django ORM과 기본 Admin 페이지의 편리성입니다. Django 모델 선언을 참조 관계로 잘 해두면 그 자체로 Admin 페이지에서 편리하면서 체계적으로 데이터를 관리할 수 있습니다. 특히, Django ORM을 이용해서 쉽게 비즈니스 로직을 뷰에서 구현할 수 있습니다.

강력한 서드파티 라이브러리 제공입니다. Django가 세계적으로 인기가 많고 이제 국내에서도 쓰이는 곳이 많기 때문에 편리한 라이브러리를 쉽게 구할 수 있습니다. 사용자 로그인 관련해서 정말 편리하게 쓰고 있고 감탄하는 라이브러리는 바로 django-allauth와 django-otp입니다. 그리고 django-mptt는 웹에서 널리 쓰이는 트리 구조를 쉽게 쓸 수 있게 해줍니다. 그리고 여러 가지 관리를 도와주는 django-debug-toolbar, django-import-export 같은 라이브러리도 정말 편리합니다.

결론적으로 Django/파이썬으로 쇼핑몰을 구축한 이유는 다음과 같습니다.

  • 파이썬 언어와 Django 프레임워크의 강제성
  • 여러 가지 보안 옵션과 대책 제공
  • ORM과 Admin 페이지로 효율적 데이터 관리 방법 제공
  • 편리한 서드파티 라이브러리 제공

그리고 사실 가장 으뜸은 Django/파이썬으로 "혼자서 웹 개발"할 수 있었다는 것입니다.

나 홀로 개발자로서 어떤 도구가 가장 편리하게 웹 개발할 수 있을까 유지보수, 관리가 편할까 하는 부분을 가장 많이 고민했고 Django/파이썬은 충분히 만족할 만한 것 같습니다.

Django/파이썬으로 구축한 핀코인 온라인 상품권 쇼핑몰에서 안전하고 편리하게 상품권을 구매하세요.

대한민국 1등 온라인 상품권 쇼핑몰 핀코인!

감사합니다.


#핀코인 #Django #쇼핑몰 #파이썬


Related Posts

blog comments powered by Disqus