우아한형제들/우아한테크코스

[우아한테크코스] 7주차 후기 - 데이터베이스 설계와 마지막 미션

Jay Tech 2019. 7. 6. 13:47
반응형

7주차 후기

6/17 (월) 프로그래밍 (체스) -
6/18 (화) 강의 (자바스크립트 기초), 프로그래밍 (체스)  
6/19 (수) 프로그래밍 (체스)  
6/20 (목) 프로그래밍 (체스)  
6/21 (금) 강의 (데이터베이스 설계)  
6/22 (토) 외부일정  
     

강의: 데이터베이스 설계

제한된 시간안에 테이블을 설계해야 하는 과제가 있었다. 타임어택으로 차등을 매기거나 그런것은 아니다. 단지 한정된 강의 시간안에 다뤄야 할 것들이 조금은 많았을 뿐이었다.

데이터베이스 설계는 크게 3가지로 나뉘어진다.

 

데이터베이스 설계 과정

개념적 데이터 모델링: 개념 데이터 모델이란 업무 요건을 충족하는 데이터의 주제 영역과 핵심 데이터 집합을 정의하고 관계를 정의한 모델을 의미한다. 즉 큰 그림을 먼저 그리는 것이다.

논리적 데이터 모델링: 개념 데이터 모델링에서 수행했던 작업들을 핵심 엔티티들과의 관계를 정의하고 정규화와 같은 작업들을 수행하는 것을 의미한다.

물리적 데이터 모델링: 논리 모델을 DBMS을 고려하여 설계하는 것을 의미한다.

 

과제의 내용은 도메인이 여러개 있었고 각 엔티티마다 제약사항과 요구사항들이 있었다. 상세내용은 적지 않는다. 단지 이런것들이 진행되었다는 것을 간단히 보여주기만 하려고 한다.

 

먼저 개념설계를 하였다. draw.io라는 사이트에서 진행이 되었다. 시간이 많지가 않아서 후딱 그렸다. 제약사항들을 좀 더 상세히 보고 했어야 되는데 일단 어느정도 완성을 해보려고 빨리 진행을 해보았다.

미션 설계

 

주민번호가 아닌 ssn 넘버를 쓴 것을 보니 출처는 미국인듯 하다. draw.io라는 사이트에서 개념적인 설계를 먼저 해 보았다. 그리고 따로 관리를 할 수 있는 개념들 (예를들어 가족과의 관계를 나타내는 개념)도 엔티티로 추가로 빼보았다. 그리고 제약사항 중 하나인 "한 부서는 여러 위치에 있을 수 있다" 라는 부분은 다 대 다 관계이다. 그렇기 다 대 다 관계가 이루어지는 부분들을 조인 테이블로 빼도록 노력했다. 미완성이지만 실제 mysql workbench에서 물리 설계를 하면서 약간 보완을 해 보았다.

물리 설계

잘못 설계한 부분도 있겠지만 제한된 시간안에 만든 결과물이다. 다시 해보려고 했지만 체스가 할게많아서...

개방 폐쇄 원칙을 어긴 코드

이 단락은 chess 미션이 끝나고 작성하였다. 레벨 1의 모든 미션이 끝나고 복습을 하는 도중 개방 폐쇄 원칙을 어긴 부분을 발견하였다.

개방 폐쇄 원칙이 깨졌을 때의 증상다운 캐스팅을 하거나 비슷한 if-else 블럭들이 반복되는 것이다.

 

개방폐쇄 원칙을 어긴 코드

예를들어, 말 (piece)을 가져온 후 왕이면 경로를 수정한다. 경로를 수정하는 것이 상대방의 왕의 사정거리에 들어왔을 때는 그 경로는 포함시키지 않기위함이었다. 하지만 저렇게 됐을 경우 instanceof 연산을 남발하게 되었다. 설계당시, 말 (Piece)은 이동할 수 있는 거리만을 반환하고 게임의 상황이 어떻게 되는지는 모르는게 맞다고 생각을 하여 설계를 하였다. instanceof를 없애기 위해 각각의 말에 '경로필터링'을 추상화를 시키는 것을 시도했다. 하지만 그렇게 되니 보드의 상황에 따라 달라져야 하는 부분을 말로써는 알 수 가 없기 때문에 추상화가 힘들었다. 초기 설계에 시간을 더 투자했었어야 하는 아쉬움이 남았다.

 

다음 레벨 때는 후기작성을 조금 더 타이트 하게 해야겠다. 마지막 미션을 하면서 정신이 없어서 제대로 정리를 하지 못했고 시간이 지나고 작성을 하게 되니 내용들이 잘 기억이 나지 않았다.

그래도 너무 즐거웠고 많은 사람들에게 좋은 내용들을 배울 수 있었던 시간이었다. 다음 레벨도 열심히 해보자.

반응형