파이널 프로젝트 1주차 회고
국비과정의 꽃이라 할 수 있는 파이널 프로젝트도 시작한지 벌써 1주일이 지났다.
부족한 실력으로 졸지에 팀에서 PL 역할을 하고 있는데.. 시작부터 난관에 봉착했다.
1) 주제 선정
사실 대부분의 프로젝트 주제는 비슷하다. 예매, 쇼핑몰, 여행 등 기본적인 CRUD의 틀에서 크게 벗어나지 않고 실시간 예매나 결제 시스템 등 한, 두 가지의 추가 기능이 더해지는 형태로 마무리된다.
우리 팀은 회의를 통해 영화 예매 사이트를 주제로 정했다.
영화 예매 사이트를 선택한 이유는 기본적으로 AJAX나 웹 소켓, 로그인을 위한 세션 등 중요한 부분을 짧은 기간에 많은 것을 학습해야하는 국비 과정의 특성상, 하루 이틀 정도만 간단히 맛보고 넘어가는 것이 상당히 아쉬웠기 때문이다.
그리고 좌석 예매와 같이 다른 사용자가 특정 좌석을 예매 했다면 그 정보를 실시간으로 서버와 클라이언트 간 통신으로 통해 제어해야 한다는 점에서 백엔드 측면에서 최대한 지연이 발생하지 않는 최적의 방법으로 구현해야 될까에 대해 많은 고민을 하며 성장할 수 있을 것이라고 생각했다.
2) 테이블 설계부터 너무 어려웠다.
테이블 설계는 개발 과정 중 가장 어려운 부분이라고 생각한다. 기능 구현에 대한 코딩에 들어가기 전에, 먼저 테이블 시나리오와 정의서를 통해 어떻게 데이터베이스(DB)를 설계하고 데이터를 처리할 지에 대한 방법부터 고민해야 했다. 프로젝트의 기본 뼈대를 만드는 작업이기 때문에 초기 설계 단계에서부터 잘못된 결정을 내리게 되면 이후의 모든 개발 단계에 영향을 미칠 수 있기 때문에 신중의 신중을 기해야했다.
예를 들어 회원 정보를 저장하고 관리하는 User 테이블은 최상위 테이블 임과 동시에 회원의 주요 데이터를 포함하고 있어 다른 테이블과의 연관성도 높았다. 이외에도 회원의 등급을 체계적으로 관리하기 위해 별도의 회원 등급 테이블도 같이 설계했는데, 회원의 등급에 따라 관리자가 회원의 헤택을 구분 할 수 있도록 했다. 여기에는 없지만, 쿠폰 및 혜택 관련 항목에서 등급에 따라 할인을 제공하거나 쿠폰을 발급하는 연관된 기능도 몇개 존재한다.
그런 점에서 설계란 단순히 데이터를 저장하는 과정 뿐만 아니라, 저장되는 데이터 간의 관계와 무결성 등을 유지하는데 중요한 역할을 한다는 점에서 초기 설계 단계부터 각 테이블의 역할과 포함된 데이터를 명확히 정의하고 데이터 간의 관계를 잘 설계하는 것은 향후 전 개발 프로세스 뿐만 아니라, 시스템 성능의 최적화에도 영향을 미친다는 것을 느낄 수 있었다.
3) 아쉬운 점 및 향후 개선점
1. 유연성 확보가 어려웠다.
초기 설계 단계부터 모든 요구사항을 반영하기는 어렵지만 최대한 반영하기 위해 노력했다. 프로젝트가 진행됨에 따라 새로운 요구사항이 발생할 수 있기 때문에 쉽게 대응할 수 있도록 구조를 유연하게 설계 해야한다. 앞으로 정기적인 테스트 작업과 동시에 수정 작업을 병행하여 구조를 최적화할 필요가 있지 않을까.
2. 테스트 쿼리에 작성에 대한 문제
너무 자동화에 집중한 나머지 테스트 쿼리 단계부터 트리거와 같은 복잡한 로직을 사용했다. 트리거는 너무 많이 사용할 경우 최적화 등 성능 문제가 발생 할 수 있는데, 이 부분을 고려해서 트리거의 최적화와 인덱스의 설계를 다시 재검토하고, 데이터 자동화에 대한 문제를 효과적으로 관리할 수 있도록 쿼리 최적화를 지속적으로 수행해야 할 것 같다. 우리 팀은 영화관의 지역 데이터를 통해 지점의 ID와 지점의 각 상영관 ID를 자동으로 생성하도록 트리거를 사용했는데, 향후 최적화에 문제가 생긴다면 서비스 클래스에서 처리하도록 수정해야 한다.
3. 소통부족
서로 간의 소통부족이라기 보다는 팀원과의 협의 없이 내가 일방적으로 테이블 시나리오와 쿼리를 수정하거나 그런 부분이 많아서, 서로의 의견 반영이 힘들다거나 팀원이 잘못 이해하는 경우가 많았다.
독단적인 행동을 없애고 팀원과의 정기적인 회의와 의견 조율을 통해서 원활한 소통이 이루어 질 수 있도록 해야 할 것.