개요
- 목적: mcms 사용자 및 관리자 사이트 고도화
- 수행 기간: 2023년 6월 17일 ~ 2023년 12월 14일
- 수행 인원: 풀스택 2
- 기술 스택: vue.js, jsp, javascript, springframework, java, mybatis, mariaDB
- 협업 툴: svn
- CI/CD: jenkins
기존 운영 중이던 mcms 프로젝트를 고도화하는 작업을 담당하게 되었고 사수로써 참여하게 되었다. 사수로 참여하기에는 부족한 점이 많았지만 팀장님께서 맡겨주셨고, 부사수 때와는 다르게 일에 대한 책임감과 부담감을 알게 되며 인간적으로 한층 더 성장할 수 있는 감사한 시간이었다.
MCMS란?
mcms는 Media Contents Management System의 약자로 미디어 콘텐츠(기록물)를 관리하는 아카이브다. 좀 더 풀어서 설명하자면 여러 가지 콘텐츠들을 기준별로 분류하여 관리하는 사진, 영상 콘텐츠/시청각기록물 관리 솔루션이다. 기록물을 콘텐츠별로 볼 수 있는 사용자 사이트와 기록물을 등록하고 관리하는 관리자 사이트로 구성된다.
MCMS 고도화 프로젝트 담당업무
기획
고도화 기능 중 일부인 통계페이지에 대한 기획 및 스토리보드 작성
서버이관
온프레미스 서버에서 KT클라우드 서버로 서비스 및 데이터 이관
외부 업체와 API에 대한 요구사항 정의 및 협의
API에 대한 요구사항을 정의, 협의, API 명세서 작성, 인터페이스 설계
데이터 마이그레이션
Excel -> mariaDB
페이지 구현 및 기능개발
페이지 퍼블리싱 및 요구 기능 구현
DB 백업 스크립트 적용
DB 데이터 백업을 위한 백업 스크립트 작성 및 적용
통합 테스트
통합 테스트 진행
산출물 일부 준비
테이블 목록 및 정의서, ERD, 테스트 케이스, 매뉴얼 작성
이번 프로젝트는 사수로 참여했던 만큼 책임질 일들과 해야 했던 일들이 많았다. 부사수 때는 페이지 구현과 기능개발에만 집중했었는데 그간 사수로써의 업무를 진행했던 선임이 얼마나 많은 일들을 책임지고 부담감을 느끼며 해왔는지 알게 됐다.
일정 및 이슈 관리
프로젝트 일정 및 이슈들은 모두 스프레드시트를 통해 관리했다. 퍼블리싱, API, 테스트, 에러사항들을 모두 스프레드 시트의 탭을 나누어 관리했으며 프론트는 주소를 기준으로, 백엔드는 엔드포인트를 기준으로 모든 사항들을 관리하였다. 노션으로 관리하는 방법을 생각해 보았으나 현재 팀에서는 스프레드시트를 통해 모든 프로젝트를 공유하고 있으므로 모두가 알기 편한 방법인 회사 기준에 맞춰 진행하였다.
기획
해당 프로젝트의 전체적인 기획은 아니지만 관리자 사이트 통계 페이지에 대한 기획을 개발자 둘이서 진행하였다. 클라이언트가 필요로 하는 게 뭔지 생각해 보고 성장하길 원하시는 마음에 이사님께서 맡겨주셨었다. 누군가가 정해준 대로만 만들다가 화면이 어떻게 구성돼야 사용자가 편하게 볼 수 있을지, 어떤 데이터를 보여주어야 사용자가 필요로 하는 통계 데이터를 만들 수 있을지 많은 고민을 해볼 수 있는 시간이었다. 기획하는 시간과 결과 자체가 순조롭지는 않았으나 이사님과 차장님의 조언을 통해 잘 마무리할 수 있었다.
기획을 할 때는 "누가 어떤 이유로 필요로 하는가?" 에서부터 시작을 했어야 했다. 처음에는 기록물관리 사이트에 통계 페이지이기에 콘텐츠를 기준으로 기간별 등록, 보유, 조회수에 대한 통계를 보여주려고 했었다. 그러나 클라이언트는 "부서별로 성과를 나타낼 수 있는 통계 데이터"를 필요로 했었다. 모든 기준이 부서별 성과를 나타낼 수 있는 지표가 되어야 했던 것이다. 이후 클라이언트의 필요사항에 따라 수정을 하였고 기획한 페이지를 통과받을 수 있었다. 처음부터 알고 진행했으면 좋았겠지만 그래도 이번 경험을 통해서 이러한 배움을 얻을 수 있었음에 감사한 시간이었다.
서버 이관
서버 이관 작업은 CentOS 7.9 운영체제에 직접 apach, tomcat, mariaDB를 설치하며 서비스 운영환경을 구축해 볼 수 있는 기회였다. 종종 vm에 테스트 환경을 구성하는 연습을 했었는데 실제 적용할 기회가 다가와 감사했다. 설치는 기존 온프레미스 서버에서 동작하던 것과 같이 이상 없이 작동하기 위해 기존에 설치하였던 컴파일 소스를 사용하여 클라우드 서버에 컴파일 설치 방식으로 설치하였다.
서버이관 작업을 해본 적이 없었기에 잘할 수 있을까?라는 막연한 두려움이 있었으나 큰 어려움 없이 잘 끝났다. 계정에 루트 권한을 부여받기도 했었고, 기존 온프레미스 서버와 경로를 똑같이 구성하기도 했었다. 가장 큰 요소는 vm에 같은 환경을 구성해 보며 연습하고 스크립트를 미리 정리를 해뒀던 게 큰 도움이 되었다.
외부 업체와 API에 대한 요구사항 정의 및 협의
이번에 진행한 mcms 프로젝트는 메인이 되는 사이트가 따로 있었다. 적절한 예시가 생각나지 않지만 굳이 뽑아보자면 네이버와 네이버 웹툰과 같은 관계라고 볼 수 있는 것 같다. 우리가 네이버 웹툰 측인 셈인데 로그인 기능과 콘텐츠 자동연계 기능을 구현하기 위해 우리에게 필요한 요구사항을 정리하고 협의하는 과정을 거쳤다. 협의 과정은 굉장히 순조로웠고, 해줄 수 있다는 몇 마디의 말이 오고 간 게 전부였다.
API 문서를 작성하며 배운 점은 세세하고 명확히 작성해줘야 한다는 것이었다. 테스트 URL, 상용 URL, 파라미터(타입, 필수여부, 대소문자), 암호화 방법, 데이터 목록, 포맷형식, Http Method까지 예시와 함께 틈틈이 작성해서 전달하였다. 우리가 API를 제공받는 입장이기 때문에 필요한 데이터 목록만 전달하고 나머지는 협업사 측에 맡기는 게 맞는 것 같았지만 우리가 원하는 대로 맞춰주겠다고 하셔서 그렇게 진행했다.
API 문서를 보고 작업을 하기만 해 봤지 직접 다른 업체와 협의하는 과정을 거친 건 처음이었기에 좋은 경험이 되었다.
데이터 마이그레이션
Excel에 담긴 자료들을 데이터베이스에 이관하는 작업들을 하였다. 어려울 것은 없었으나 클라이언트 측에서 전달해 준 양식대로 작성해주지 않았다는 문제였다. 부서가 제각각이라 그런지 잘 작성해 주신 부서도 있는 반면 전달된 양식에 마음대로 작성해서 주는 일이 있었다(결국은 필자가 양식대로 다시 맞춰야 하는 일이 있었다). 이미지, 영상, pdf 등.... 파일 같은 경우에는 경로가 틀리면 상당히 곤란했었다. 번거롭지만 파일을 찾지 못한 것들은 디비에 기록해 뒀다가 다시 경로를 잡고 변환해 주어야 했다.
또 특수한 상황이었기에 주말에만 작업을 진행할 수 있는 상황이었다.... 클라우드 서버로 이관하였는데 대용량의 파일들과 데이터들을 넣을 때 비용이 발생하기 때문이었다. 번거롭지만 주말에 서버를 내린 후에 파일 변환 및 데이터를 넣는 작업을 진행하였었다. 어려운 일은 없었으나 계속 신경이 쓰이는 작업이었었다.
페이지 개발 및 기능 개발
이번 프로젝트의 주된 작업은 통계 페이지와 API 연계 관련 기능 작업이었다. API 연계 작업은 걱정했던 것과 달리 협업체와의 소통과 API 문서가 잘 작성되니 무난하게 작업이 끝났다. 오히려 처음 구현해 보는 통계 기능에 대해서 많은 생각을 해보게 되었고, 많은 배움을 얻을 수 있는 시간이 되었다. 통계 페이지를 만들 때 생각해야 할 것들을 조금 정리해 본다.
통계 페이지란?
통계 페이지란 과거의 데이터를 집계하여, 저장 후 화면에 표출하는 페이지다. 데이터의 정합성이 요구되며, 오차가 있어서는 안 된다.
데이터 정합성 (data consistency)
데이터 정합성이란?
※ 어떤 데이터들의 값이 서로 일치하는 상태를 의미한다.
통계 페이지는 데이터의 정합성이 가장 중요하다. 데이터 정합성을 위해서 살펴봐야 할 것들을 정리해 보았다.
이력 (history data)
이력 데이터를 만드는 이유
1. 문제 발생 시 과거의 데이터를 통해 원인을 발견하고 해결하기 위해서
2. 데이터를 쌓아 유의미한 통계 데이터를 만들기 위해서
이력 테이블을 설계할 때는 꼭 이력만으로 집계 데이터를 만들 수 있도록 설계해야 한다. 즉, 집계 데이터를 만들기 위해 필요한 모든 데이터를 가지고 있는 게 있어야 한다.
데이터는 발생되는 이벤트(사원이라면 부서 이동, 입사, 퇴사 등…)에 따라 얼마든지 변경될 수 있다. 과거의 이력을 보기 위해 만든 통계 데이터에 이벤트에 따라 실시간으로 변경될 수 있는 데이터가 끼어든다면 추후 데이터의 정합성이 깨질 가능성이 매우 크다. 그렇기에 자세한 이력을 쌓아 이력만으로 집계 데이터를 만들 수 있어야 한다. (자세한 이력의 기준은 별다른 DB Join 없이 이력 데이터만을 가지고 집계 데이터를 만들 수 있어야 한다.)
이력 데이터만을 가지고 집계 데이터를 만들 수 있다면 이력 데이터는 집계 데이터에 대한 검증 데이터가 될 수 있으며, 문제가 생겨 다시 집계를 해야 할 시 과거에 쌓아둔 이력 데이터만을 가지고 다시 집계 데이터를 만들 수 있다.
집계 (total data)
집계 데이터를 만드는 이유
※ 집계 데이터 없이 이력 데이터만을 쿼리 하여 페이지에 표출할 때에는 데이터의 양에 따라 속도 이슈를 야기할 수 있기 때문이다.
집계 테이블을 설계할 때는 페이지에 표출할 데이터를 집계 테이블 내의 데이터 만으로 표출할 수 있도록 설계하고, 데이터를 쌓아야 한다. 하나 더 생각할 것은 집계 테이블이 정말 필요한지 생각해 보아야 한다. 이력만을 쌓고 그때그때 집계해도 충분할 수 있다.
DB 데이터 백업
최근 프로젝트를 유지보수 하며 DB의 테이블이 사라지는 일이 있었다. 후임에게 운영 DB와 테스트 DB의 정보를 알려줬었는데 마우스 클릭미스로 운영 DB의 테이블을 드롭하는 일이 발생했었다. 다행히도 매일 백업을 해두고 있었고, 밤 사이에 추가된 변경된 데이터가 없어 큰 문제없이 복구하였는데 땀이 삐질삐질 나고 식겁했던 순간이었다.
OS 환경이 centos 인 만큼 DB 데이터 백업은 crontab을 이용하여 작업했다. DB 백업 명령어를 작성하여 crontab에 등록하여 간단하게 백업할 수 있도록 만들었다.
크론탭(crontab)이란?
크론탭은 리눅스 운영체제에서 배치 작업을 스케줄링하기 위한 프로그램이다. 크론탭을 이용하면 특정 시간에 정기적인 작업이 가능하다.
통합 테스트 (Integration Testing)
이번 프로젝트는 테스트 코드를 따로 작성하지 않았다. 작성할 여유도 부족하였지만, 고도화 이전에 작성된 테스트 코드가 없었기 때문이다. 그래서 모든 개발이 완료된 후 통합 테스트(Integration Testing)를 진행하였다. 진행 방식은 스프레드시트에 시나리오를 작성하고 페이지의 UI들이 사전 정의된 기능대로 동작하는지 1차, 2차 검증을 통한 방식으로 진행하였다.
통합 테스트(Integration Testing)란?
시스템의 여러 구성요소들이 함께 작동하여 예상대로 상호작용하는지 확인하는 테스트 과정이다.
산출물 준비
산출물은 테이블 목록 및 정의서, ERD, 테스트 케이스, 사용자 매뉴얼, 관리자 매뉴얼을 작성하였다.
- 테이블 목록
- 물리적 테이블명, 논리적 테이블명을 excel 파일에 리스트화한다.
- 테이블 정의서
- 테이블명, 칼럼의 물리적, 논리적 명칭, 타입, 길이, pk, fk, notnull 등을 excel 파일에 명시한다.
- ERD
- ERD는 eclipse의 ermaster를 이용하여 작성하였다. 회사에서 공통적으로 사용하고 있기 때문이다.
- 사용자 매뉴얼
- 사용자 매뉴얼은 처음 사이트를 접하는 사용자가 수월하게 기능을 이용할 수 있도록 작성해 두었다.
- 관리자 매뉴얼
- 관리자 매뉴얼은 시스템이 꺼지거나 Error 발생 시 어떻게 대처해야 하는지 상세히 적어두었다.
처음 작성해 보는 것들이었지만 경험이 되었다. 생각보다 프로젝트를 마칠 때에는 이렇게 많은 파일들을 제공해 줘야 하는구나라는 것을 알게 되었다.
마무리
사수로써 프로젝트를 진행한 경험은 처음이고, 업체와 먼저 나서서 연락한 경험도 처음이기에 쉽지 않은 시간이었다. 책임감과 부담감에 야근하는 일도 많았지만 개발자로써 그리고 인간적으로 한층 성장하는 계기가 되어준 프로젝트였다. 경험이 늘어난다는 것에 대한 감사로 해당 프로젝트를 잘 마무리하였다.
'Experience' 카테고리의 다른 글
Spring AOP, Custom Annotation을 이용한 권한 검사 (0) | 2024.05.08 |
---|---|
Instagram Api Refresh Token batch 리펙토링 (0) | 2023.06.24 |
JRebel이 안될때 확인해 볼 사항들 (0) | 2023.06.21 |
특수 사례 패턴 (외부 API를 대하는 방법) (0) | 2022.12.19 |
MCMS 웹 프로젝트 후기 (2) | 2022.12.04 |