brunch

You can make anything
by writing

C.S.Lewis

by 갱그리 Aug 27. 2016

2. DB

서버와 웹 서버가 모두 준비되었다면 이제 다음으로는 DB를 구축할 차례다. DB는 NoSql과 RDBMS 로 나눌 수 있다. 일단 이 개념을 다루기 전에, 데이터베이스의 기초부터 차근차근 익혀보자.


데이터베이스를 설명해달라고 할 때, 나는 주로 "엑셀"을 예로 든다. 데이터베이스에 데이터를 저장하는 방식은 우리가 주로 엑셀을 사용하는 방식과 유사하다. 예컨대 엑셀로 회원 정보를 관리한다고 생각해보자. 아마 다음과 같은 테이블이 나올 것이다.


데이터베이스의 서식도 기본 구조는 '표(테이블)'이다. 그래서 엑셀로 만든 이 데이터를 있는 그대로 넣을 수 있다. 단 데이터베이스에 넣을 때에는 각각의 '표'마다 이름을 붙여주어야 한다. 아래 예시를 보자.


회원의 기본 정보를 담은 member 테이블
회원의 토익 점수를 담은 grade 테이블


캡쳐된 화면은 엑셀이지만, 저 화면은 데이터베이스의 데이터를 조회했을 때의 결과물과 완전히 똑같다. 데이터베이스에 데이터는 표(테이블) 형태로 저장된다. 그리고 이 표들 사이의 관계를 통해 여러 가지 데이터를 조합할 수 있다. 예컨대 member 테이블만 갖고서는 각 회원들의 토익 점수를 알아낼 수 없고, grade 테이블만 봐서는 정확히 누가 어떤 토익 점수를 갖고 있는지 확인하기가 어렵다. 이런 경우에는 member와 grade 테이블을 각각 조회하는 것이 아니라, 함께 조회할 수 있다.


member와 grade 테이블의 모든 데이터를 한번에 조회할 수도 있고
한번에 조회하면서 필요한 데이터들만 선별해서 볼 수도 있다


이 테이블들은 복잡한 시스템일 수록 많아진다. 예컨대 최근 5년 간 회원들이 응시한 모든 토익의 성적표를 볼 수 있다거나, 토익에서 RC, LC의 성적을 따로 조회할 수 있다거나, 데이터베이스에 저장하는 데이터의 양이 많아지면 많아질 수록 테이블의 수가 많아지거나 각 테이블에서 관리하는 데이터 컬럼의 수가 많아진다.


데이터베이스를 설계하는 작업은 매우 중요하다. 테이블이나 컬럼이 중구난방으로 많아지면, 어떤 데이터가 어떤 테이블에 들어가 있는지 찾기도 어려울 뿐더러, 데이터를 조회하는 속도 자체도 느려진다. 대충 설계해놓고 나중에 성능이 느려지면 그때가서 수정해도 된다고 생각할 수도 있을텐데, 그러면 나중에 헬지옥을 맛보게 될 것이다. 그리고 실제로 대부분의 시스템에서 성능 문제는 데이터베이스에서 발생한다. 따라서 어떤 데이터들을 어떻게 분류하여 관리할 것인지에 대한 문제는 정말 중요한 문제다.


물론 기획자들이 데이터베이스를 직접 설계할 필요는 없다. 효율적인 DB 설계를 위해 기획자들이 해야 하는 것은 개발자에게 정확하고 구체적인 정보를 제공하는 것이다. 그것도, 본격적인 개발에 들어가기 전에 말이다. 일단 개발에 착수하고난 다음에 개발하는 기능에 맞추어 그때그때 DB를 추가하게 되면, 결국 DB의 큰 그림을 놓치게 된다.


그렇다면 '정확하고 구체적인 정보'란 무엇인가. 아래 상황을 보자.




기획자 : 소셜 로그인으로 로그인한 사용자가 영어 점수를 관리할 수 있게 하고 싶어요. (예컨대) 자기가 토익시험을 봤던 날짜와 점수를 입력할 수 있어요.

개발자 : 네 알겠습니다.

(MEMBER, TOEIC 테이블을 생성한다)


<개발 중간 점검>


기획자 : 아니 이게 뭐예요? 토익 점수만 저장이 가능한가요? 영어시험이니까 토플도 되고, OPIC 도 되어야죠. 그리고 토익은 토익만이 아니라 토익 스피킹은 또 따로 관리해주세요

개발자 : 네?? 토익만이라고 하셨잖아요.

기획자 : 그건 그냥 예시였고요. 아무튼 토쓰랑 토플, OPIC 도 되게끔 해주세요.(추가하는 거니까 간단하겠지?)

개발자 : (이미 TOEIC으로 테이블명도 다 지정했는데.. 아 수정하기 귀찮은데 TOEFL, OPIC 명으로 테이블을 더 만들자)

(TOEFL, OPIC, TOEIC_S 테이블을 추가로 생성한다)




본래 처음부터 기획자가 구체적으로 정보를 전달했더라면 회원 정보가 담긴 MEMBER 테이블, 성적 정보가 담긴 GRADE 테이블, 시험 정보가 담긴 EXAM 테이블 세개만 있으면 될 것이 잘못된 커뮤니케이션으로 인해 5개로 늘어나게 된다. 그리고 이제 한 사용자의 모든 영어점수를 조회하기 위해서는 5개 테이블의 데이터를 모두 함께 합쳐서 보여주어야 하고, 다른 영어 시험이 추가될 때마다 테이블이 계속 추가되어야 해서 결국 나중에는 성능 문제에 시달리게 될 것이다.


그러므로 기획에서는 개발에 들어가기 앞서 가능한 모든 기획이 명료하게 정해져 있어야 한다. 서비스의 목표와 메인 플로우를 장황하게 설명하는 사람들이 많은데, 사실 개발자에게 필요한 정보는 'TOEIC, TOEFL, OPIC' 처럼 아주 구체적인 영역이라는 것을 명심해야 한다.

매거진의 이전글 1. 서버/웹서버/호스팅
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari