가상의 서점
추천시스템을 설명하기 위해 상상속의 인터넷 서점을 하나 생 각해 보자. 이름은 좋은서점닷컴이다. 좋은서점닷컴을 예로 들어 인터넷 서비스의 필수 구성요소들을 소개한다.
좋은서점닷컴
좋은서점닷컴은 인터넷 서점이다. 고객이 웹사이트를 방문해서 원하는 책을 주문하면 집으로 발송해 준다. 책을 발송해 주는 대신 온라인에서 읽을 수 있는 서비스도 있지만, 좋은서점닷컴은 종이책을 판매하는 인터넷 사이트라고 해 두자. 좋은서점닷컴을 이용하기 위해 회원가입이 필요하다. 회원가입시 이름, 전화번호, 배송지 주소 등의 사용자 정보를 입력하고 ID와 비밀번호를 선택한다. 좋은서점닷컴은 웹사이트와 모바입 앱을 제공한다. 고객은 컴퓨터나 스마트폰의 웹브라우저를 이용해 좋은서점닷컴을 이용할 수 있고, 또는 앱스토어에서 앱을 다운로드 받아 이용할 수도 있다. 원하는 책을 찾으면 장바구니에 담았다가 결제를 포함한 구매를 마치면 책이 배송된다.
프론트엔드와 백엔드
사용자가 직접 마주하는 기기에서 구현된 부분을 프론트엔드(frontend)라고 한다. 흔히 웹사이트에 포함된 HTML, CSS, 자바스크립트(JavaScript)등을 지칭한다. 앱스토어를 통해 배포하는 모바일앱도 프론트엔드에 속한다. 인터넷을 통해 연결되어 프론트엔드의 응답을 받아 처리하는 부분을 백엔드(backend)라고 한다. 흔히 인터넷 서버라고 불리기도 한다. 백엔드는 아마존 웹서비스(Amazon Web Services)나 구글 클라우드 플랫폼(Google Cloud Platform)등 클라우드 컴퓨팅을 통해 구현하거나 데이터센터에서 서버를 가동하여 운영한다.
좋은서점닷컴의 데이터
좋은서점닷컴에서 발생하는 데이터중 몇가지를 예로 들어보자.
- 사용자 정보: 고객의 이름, 전화번호, 배송지 주소 등
- 상품 정보: 서적의 제목, 저자, 출판년도, 출판사, 페이지수, 분류기호 등
- 구매 정보: 고객이 서적을 구매한 기록 (사용자 ID, 상품 ID, 구매한 시각)
- 장바구니 정보: 고객이 서적을 장바구니에 담은 기록 (사용자 ID, 상품 ID, 장바구니에 담은 시각)
- 클릭 정보: 고객이 서적을 클릭한 기록 (사용자 ID, 상품 ID, 클릭한 시각)
이밖에도 다양한 데이터가 있겠지만, 예로 든 데이터들이 가장 핵심이 된다.
데이터베이스
좋은서점닷컴을 운영하고 특히 추천시스템을 구현하기 위해 트랜잭션 데이터베이스와 데이터 웨어하우스가 필요하다.
트랜잭션 데이터베이스는 기초정보를 저장하고 필요할 때 손쉽게 변경이 가능한 데이터베이스를 말한다. 예를 들어 회원가입시 이름, 전화번호, 배송지 주소등 고객의 정보를 저장하게 되는데, 추후에 고객이 정보를 변경하는 경우 변경된 내용을 바로 수정하여 기록한다. 고객이 새로운 책을 주문하면 새 주문항목을 생성하고, 주문 상태를 처음에는 "배송전"으로 기록해 두었다가, 나중에 "배송중" 또는 "배송완료"로 바꾸는 것도 트랜잭션 데이터베이스를 이용한다. Oracle, MySQL, PostgreSQL등 다양한 트랜잭션 데이터베이스 솔루션이 있고, 아마존 웹서비스나 구글 클라우드 플랫폼등 클라우드 업체에서 여러 종류를 제공한다.
데이터 웨어하우스(Data Warehouse)는 대용량 데이터처리 시스템이다. 흔히 "빅데이터"라고 할 때 데이터 웨어하우스 기술을 말한다. 데이터 웨어하우스에는 좋은서점닷컴에서 수집이 가능한 모든 데이터를 저장하게 된다. 예를 들면, 고객이 로그인 하고, 어떤 책을 클릭하거나 또는 주문하면 이 각각의 이벤트를 데이터 웨어하우스에 저장한다. 데이터 웨어하우스에서는 이렇게 모아진 많은 데이터를 분석할 수 있는 기술이 사용되는데, 초기 빅데이터 기술인 하둡(Hadoop)을 비롯하여 하둡을 기반으로 하는 Hive, Pig등이 있었고, 최근에는 Spark, BigQuery, Snowflake 등이 많이 쓰인다. 빅데이터 기술들은 데이터의 양이 아주 많아도 분석이 가능하도록 해주는 반면, 특정 항목을 변경 후 저장하는 트랜잭션 데이터베이스의 기능은 제공하지 않는다.
트랜잭션 데이터베이스는 백엔드(backend)에서 바로 접근이 가능한 반면 대용량의 데이터처리에는 적합하지 않다. 데이터 웨어하우스는 대용량의 데이터처리가 가능하지만 상대적으로 시간이 더 걸린다. 일반적으로 데이터 웨어하우스의 데이터를 주로 백엔드에서 직접 접근하여 사용하지 않는다.