bGlam | web-b2c
create: 2019-05-19
update: 2019-05-19

프로젝트 기간

  • 2019.01 ~

요구사항

  • 모바일 앱의 주요 기능 구현
  • 모바일 프로그램의 한계인 SEO 를 보완하기 위해서 web 애플리케이션이 필요함
  • 일반 사용자에게 마케팅이 가능하도록 public 한 정보를 쉽고 빠르게 제공
  • 잠재적 파트너 의 접근성(입점 신청)이 필요
  • 비교적 관심도가 낮은 사용자의 행동을 분석하고 데이터화 하여 플랫폼의 전략에 필요한 자료로 활용 되는 것이 목적

프로젝트 설계도

SSR 을 위한 react 의 next.js 프로젝트로서, next.js의 기본 구조를 따르되 그 외 구조는 mobile-b2c과 유사하게 작성되었다.

web-b2c
├── .circleci : circle ci 설정 파일
├── pages
│  ├── common : 고객/업주 공통 페이지
│  │ ├── Chat.common.page.tsx
│  │ ├── Chat.common.style.css
│  │ ├── ...
│  ├── b2c : 고객 전용 페이지(common과 동일구조)
│  ├── \_app.tsx : 웹 최초 초기화시 실행
│  ├── \_document.tsx : 서버사이드에서 렌더 되는 header/meta 정보
│  ├── index.tsx : 메인페이지
│  └── index.style.css
├── src
│  ├── components : stateless 컴포넌트
│  │ ├── ChatList.component.tsx
│  │ ├── ChatList.style.css
│  │ ├── ...
│  ├── containers : stateful 컴포넌트
│  │ ├── b2b
│  │ │  ├── chat
│  │ │  │  ├── ChatList.b2b.container.tsx
│  │ │  │  ├── ChatList.b2b.style.css
│  │ │  │  ├── ...
│  │ │  ├──...
│  │ ├── b2c : (b2b와 동일구조)
│  │ ├── common : (b2b와 동일구조)
│  ├── layouts : 레이아웃
│  │  ├── partial
│  │  │  ├── Header.tsx
│  │  │  ├── ...
│  │  ├── Blank.layout.tsx
│  │  ├── ...
│  ├── server
│  │ ├── index.js : next 서버 초기화
│  │ └── next-routes.js : 라우터 정의
│  ├── store : rematch를 이용한 앱 state 저장소
│  │  ├── models : state 모델 정의
│  │  │  ├── b2c
│  │  │  │  ├── domain : 서버에서 받은 원본 domain 데이터
│  │  │  │  │  ├── access-b2c-domain-model.ts
│  │  │  │  │  ├── ...
│  │  │  │  ├── ui : domain 데이터를 가공한 ui용 데이터
│  │  │  │  │  ├── chat-lit-b2c-ui-model.ts
│  │  │  │  │  ├── ...
│  │  │  ├── b2b : (b2c와 동일구조)
│  │  │  ├── common : (b2c와 동일구조)
│  │  │  ├── helper : model 셋팅시 helper 함수 모음
│  │  │  │  ├── res-helper.ts : 서버 통신 후 response 셋팅 헬퍼
│  │  │  │  ├── ...
│  │  ├── types.tx : 모델에서 사용하는 공통 interface 모음
│  │  └── index.ts : rematch 초기화
│  ├── utils : 공통 유틸 함수 모음
│  │ ├── image-util.ts
│  │ ├── ...
├── env : dev/test/production에 따른 env 정보
├── static : static 파일
├── .babelrc : es 최신버전 사용을 위한 바벨 적용시
├── next.config.js : next 설정 파일
├── postcss.config.js : postcss config 파일
├── package.json : npm 정보
├── tsconfig.json : 타입스크립트 설정
└── tslint.json : 타입스크립트 린트 설정
  • pages/_app.tsx

    • 최초 실행시, 1회 실행되는 next.js 파일
    • 페이지들은 _app.tsx 의 자식으로 렌더된다.
    • state 저장소인rematch , Google Analytics, 라우터 변화 이벤트, 유저정보 초기화 등이 이루어진다.
  • pages/_document.tsx

    • 서버사이드에서만 렌더링된다.
    • static css/js 파일들이 import 된다
  • src/server

    • index.js : express 서버가 초기화 되며, 클라이언트 호출 url에 따라 nexts routes를 사용할 수도 있고, 원하는 서버 비즈니스 로직을 실행시킬 수도 있다.
    • next-routes.js : 브라우저 url path와 실제 페이지를 매핑시킨다.
    class ApplandingCommonPage extends React.Component<ITermProps> {
    // getInitialProps는 서버사이드에서만 호출된다.
    static async getInitialProps ({query}) {
    // next routes를 통해
    // query Param으로 넘긴 것을 getInitialProps를 통해 받을 수 있다.
    return {
    shopId: parseInt(query.shopId, 10),
    serviceId: parseInt(query.serviceId, 10),
    serviceOptionId: parseInt(query.serviceOptionId, 10)
    }
    }
    ...
    }
  • src/components

    • b2c/b2b/common 을 구분하지 않고, 재사용 가능한 순수 컴포넌트 들이 위치한다.
  • src/containers

    • b2b/b2c/common 으로 구분된다.
    • rematch 를 통해 state 값이 컴포넌트에 매핑되는 형식의 컴포넌트 들이 위치한다.

시연영상

bGlam B2C web