지난 포스팅 말미에서 말씀 드렸던 것처럼, 금번에는 JGTP 사이트에 back office를 만들기 위한 작업관련 내용을 기록해 보겠습니다.
Back office라는 표현이 맞는지는 모르겠는데, 제가 언급하는 Back office는 관리자를 위한 컨텐츠 관리용 페이지를 의미합니다. 해서, End-user에게 노출되진 않고, 관리자 및 관리자가 허용한 권한 있는 user가 접속하여 End-user가 홈페이지를 통해 보게될 각종의 컨텐츠를 관리하는 Admin page를 의미한다 하겠습니다.
TradeNPU가 기본적으로 Data manipulation 및 결과 Visualiztion 자동화까지를 추구하여 기능개발을 진행했던터라, Admin page를 만드는 것에 있어서는 이미 방대하다 할만큼의 코드를 쌓아놓고 있어서 그리 어렵지 않게 구축은 진행이 되었습니다.
다만, DB를 어떻게 설정할 것이냐가 오히려 최초 구축설계에서 고민의 시간을 보내게 만드는 요인으로 작용했습니다.
Multi-site 에서의 동일 DB 사용
TradeNPU를 SaaS로 구축하면서 사용중인 클라우드 서버 호스팅서비스에서는 Launching할 수 있는 app의 갯수를 회원이 조절할 수 있도록 하고 있습니다. 그것도 매우 저렴한 가격에 가능한데, 제가 아는한 적어도 가격면에서는 AWS를 압도하는 수준입니다.
그래서 Multi-site로 JGTP를 분리하는데 따른 고려요인으로, 개발과 유지보수에서의 경제적 부담은 없었습니다.
다만, 이러한 방식의 구축경험은 최초 시도였던터라, 계정에 대해 app을 하나 더 추가하면 DB도 그 app에 따라, 별도로 허용해 주는지는 모르는 상태에서 작업을 시작하게 되었는데요.
당연히 app별로 DB는 별도로 하는거지.. 라는 생각을 하고 있던 차에.. 생각해 보니, Admin으로서 각 사이트 들어갈 때마다, 개별 DB로 관리되는 회원정보를 바탕으로 개별적으로 관리하는게 여간 귀찮은 일이 되지 않을까 하는 걱정이 되었습니다.
만약, JGTP 나 npucus.com에서 사용자들의 요구에 의해 회원전용 기능을 개발하게 되면... TradeNPU에 회원가입시키고, 다시 JGTP 와 npucus.com 에 또 회원가입과정을 하게 하는게 얼마나 불편할까 생각을 아니할 수 없게 되었습니다.
앞으로 다른 사이트를 더 개발하지 말란 법도 없는데, 사이트 개발할때마다 개별 DB에 개별 회원정보로 End-user를 유치하는게 관리측면에서나 사용자경험측면에서나 불리해 보인다는 판단이 들었습니다.
결국 JGTP에도 TradeNPU의 DB를 같이 쓰는 쪽으로 방향을 선회하게 되었습니다.
나중에 어찌될런지는 모르겠지만, 당장은 JGTP와 TradeNPU는 동일 DB를 기반으로 운용될 것입니다.
즉, '단일통합계정'이라는 이름으로 3개 사이트를 모두 오고갈 수 있는 길이 터졌다고 요약드릴 수 있겠습니다.
Live server에서의 기존 DB 연결에 대해서는 다른 전문가분들이 잘 요약해 주셔서 블로깅해주신 내용이 있어서 따로 설명을 길게 하지는 않겠습니다. 꼭 검색해 보세요.
참조로, Django에서 muliple DB를 하나의 Django app에서 다중으로 사용하는 방법에 관해 DB router를 세팅해 처리하는 방법에 관한 글들은 많은데, 생각보다 하나의 DB를 여러개의 Django app에서 쓰는 방법에 관해서는 Reference 찾기가 많이 어려웠습니다.
저의 사례와 같은 상황에 대해 해법을 아직 못찾고 계시다면, 차라리 'Django DB 재사용' 또는 'Django DB 이전(Transfer)' 정도의 검색어를 사용해서 검색해 보세요.
저는 일단 Stackoverflow 덕에 또 실마리 잘 풀어서 잘 연결하여 사용하게 되었는데요. 그 방법을 요약하면 다음과 같습니다.
1. 새로운 app의 settings.py에 연결할 기존 DB의 연결정보를 입력해 준다.
2. 기존 DB가 돌고 있는 서버의 가상환경으로 console을 켜고 inspectdb > 저장위치폴더/models.py 를 실행해 준다.
딱, 2단계 뿐입니다.
너무 쉬워서 저도 좀 놀라긴 했습니다.
그렇게 inpecdb로 생성된 models.py를 열어보면 원형의 models.py에서 코딩해 놓았던 것과는 코드가 좀 변해 있는 것을 알 수 있습니다. 모델 클래스 안의 meta class 같은 것도 죽어서 없어지고, 별도로 정의해 둔 text option용 내부클래스도 사라져 버립니다.
대신, 해당 DB를 외부app에서 접근해 사용할 것을 허용할 것인가에 대한 옵션 선택이 가능하도록 하는 meta 클래스가 새롭게 자리를 차지한 것을 알 수 있습니다.
애초 inspectdb를 돌릴 때, 외부 app에서 해당 db를 수정하도록 하는 것에 대해 허용할 것이냐고 물었던 것으로 기억은 합니다.. 죄송합니다. 기억을 정확히 하기 위해 스냅샷을 남겼어야 하는데, 워낙 시간 아껴서 진행하자는 생각에 급급해서 마구 진행했던터라, 기록을 남기지는 못했네요.
여하튼, 단편적 기억이 그와 같은데 저는 외부app에서 접근해 db수정에 대해서는 허용치 않는 것으로 선택해 진행했습니다... 지금은 조금 후회되긴 하는데.. 뭐 필요하면 다시 inspectdb 돌리고 이번에는 허용으로 옵션 놓고 현재 들어간 코드를 대체하는 것만으로 충분히 쉽게 조치 가능하리라 봅니다. (제가 직접 해본 결과를 말씀 드리는 것은 아니니, 오해 없으시기 바랍니다.)
하여 새로 만드는 사이트에서 기존 DB에 접근해 CRUD를 할 것으로 예상되신다면, inspectdb 때 꼭, 외부조작 허용으로 진행하시기 바랍니다.
Back Office 로그인 기능구측
위와 같은 결정에 따라, 회원가입과 로그인 기능의 구축과정도 매우 단순화가 가능해 졌습니다.
기본적으로 별도 회원정보에 관련된 DB 테이블 자체를 새로 만들지를 않기 때문에, Django에서 신규 app을 만들 때, 의례하게 되는 Models.py에서의 신규 테이블 Class 생성 작업 자체가 필요 없어졌기 때문입니다.
대신, 그러한 models.py자리를 inspectdb에 의해 생성된 코드를 그대로 복사해다 붙여 넣기 하고 쓰시면 됩니다.
기존 DB의 모든 테이블을 다 쓰는 것도 아니기 때문에 굳이 전체를 복사하시지 않으셔도 되시고 필요한 테이블의 class만 들고 와도 아무 문제 없이 기존 DB에 접근 가능하다는 점... Django가 기본 제공하는 admin페이지를 보신다면, admin.py에 해당 열람할 DB 테이블만 등록해도 아무 문제 없다는 점.. 굿입니다!
이후 Back office의 로그인을 위한 페이지를 붙이고 User authentication에 관한 코드는 기존 사이트의 코드를 그대로 가져다 넣어줬습니다. Back office의 메인페이지로 쓸 페이지는 구매한 Bootstrap에서 맘에 드는 페이지를 하나 골라 일단 구현 여부 체크를 위해 붙여 두었구요.
이와 같은 과정을 통해 구축된 Back office 로그인 관련 사진은 아래와 같습니다.
로그인 페이지에 Staff 권한 있는 자만 접속 가능하도록 Decorator써서 마무리해 두었기 때문에, 일반 User는 Authentication 과정에서 접속이 거부되도록 처리되어 있습니다.
최종 Back office로 정상 로그인 되는 걸로 확인되었습니다.
이제 Product introduction page를 표출하기 위한 컨텐츠 등록과 관련된 활동을 하기 위한 토대가 마련되었습니다.
다음 작업과정은 해당 정보를 표출할 페이지의 디자인 구성이 될 것 같습니다.
관련 내용은 다음 포스팅에서 다뤄 보겠습니다.
NPU(엔피유) 관세사무소
대표관세사 고장주
Tel) 031-986-7190
E-mail) sales@npucus.com
[NPU관세사무소 홈페이지] https://www.npucus.com/
[NPU관세사무소 프로모션 페이지] https://www.tradenpu.com/npu_cus/
[무역비지니스 인텔리전스 서비스 | TradeNPU] https://www.tradenpu.com
[파이썬 실용 예제. 무역과 공공데이터] https://pdatinmylife.tistory.com
Certified Customs Broker JangJu Goh
Executive Customs Broker @ NPU Customs Consulting
CEO @ JG TradePlus
sales@npucus.com
Trade Compliance / Customs clearance management at foreign company
Working experience of Air export freight forwarding
Data Visualization / Independent development of business automation application – copyright of JGPO_Manager, JG Data Center, AutoCC and etc.
B2B consignment & direct export/import, B2C Overseas Buying Office consulting
Alibaba.com B2B trade / taobao B2C trade / Amazon.com global selling etc. Online trade regulation consulting.
Import license / Quarantine
English communication available
[TradeNPU for partnership proposal - JGTP] https://www.tradenpu.com/jgtp/
https://www.tistory.com/event/write-challenge-2024
'파이썬(Python) > TradeNPU' 카테고리의 다른 글
관세청 Open API 활용 프로젝트 #1 화물통관진행정보조회하기 (1) (5) | 2024.11.12 |
---|---|
회원사 Item Introduction page 만들기 시리즈 V - ORM (1) (2) | 2024.11.11 |
회원사 Item Introduction page 만들기 시리즈 IV - Django Templates (5) | 2024.11.08 |
회원사 Item Introduction page 만들기 시리즈 III - Django Template Tags (2) | 2024.11.07 |
회원사 Item Introduction page 만들기 시리즈 I (9) | 2024.10.22 |