[회고록] 도서 검색 페이지 고도화 - 3-tier 시스템을 1-tier로

김희정·2024년 1월 22일
0

회고록

목록 보기
3/3

💎 들어가며

도서 검색페이지는 신입으로 입사하자 마자 맡게 된 유지보수 프로젝트였습니다. 간단해보였지만, 프로젝트를 세팅하고 실행하는 것부터 막히는 골칫덩이였는데요.

골칫거리들을 제거하여 새 프로젝트로 만드는 고도화 작업을 진행했습니다. 어떠한 문제가 있었고, 그 문제를 해결하기 위해 어떤 과정을 거쳤는지에 대해 소개해보고자 합니다.


1. 프로젝트 개요

1.1 프로젝트 목적

이 프로그램은 회사에서 판매하는 스마트도서관은 도서관에 가기 힘든 사용자가 쉽게 도서를 대출/반납할 수 있도록 개발된 도서 대출반납기 입니다. 주로 유동인구가 많은 역 부근에 설치합니다.

스마트도서관 검색페이지는 이러한 스마트도서관의 도서 목록을 보기 위한 도서 검색페이지입니다. 스마트도서관을 납품한 곳에 도서 검색 프로그램을 제공해주기 위한 목적으로 만들어졌습니다.


1.2 배포된 사이트

스마트도서관의 주 납품처는 국립 도서관이었습니다.

도서관 홈페이지에 접속하여, 보고자 하는 스마트도서관을 클릭하면 스마트도서관 검색페이지로 연계됩니다.

위의 사진은 강동구 통합도서관 홈페이지입니다. 스마트도서관을 선택하면 검색페이지로 연계됩니다.

해당 도서관에서도 장비를 납품받는 곳이 다 달라 같은 도서관의 스마트도서관이라 할지라도 도서 검색페이지가 다를 수 있습니다. 저의 프로그램은 고덕역, 중앙보훈병원역입니다.


기존: 병점도서관


신규: 강동구통합도서관


1.3 도서 검색 Flow

이상하게도 이 프로그램은 하나의 시스템 일부로 멀티 Tier로 이루어져 있었습니다.

  1. 이용자가 도서 검색페이지 접속
  2. 도서 검색페이지는 서버 미들웨어(Gandalf)에게 도서 목록을 요청 (Socket 통신)
  3. 서버 미들웨어(Gandalf)는 요청을 받아 해당하는 장비의 미들웨어(Frodo)에게 도서 목록을 요청 (Socket 통신)


2. 고도화

2.1 기존 프로그램의 문제점

속도 이슈

우선 큰 이슈로는 속도가 느리다는 것입니다. 그도 그럴게 매 요청마다 Socket 통신을 연달아 하고, 만약 Request에 실패하면 timeout 시간동안 마냥 기다려야되는 것입니다.


프로그램 안정성

기존에 개발된 frodogandalfjava 프로그램으로 고객사에 프로그램을 전달하고, Console로 실행시키도록 했습니다. 그렇다 보니 콘솔이 꺼지면 프로그램이 종료되는 것이지요.

또한, gandalffrodo는 실행 순서를 지키지 않으면 프로그램이 정상적으로 동작하지 않습니다.


유지보수 비용 증가

기존 프로그램을 유지보수 하기 위해서는 3가지 프로그램을 돌봐야합니다.

또, 이 구조라면 시스템이 정상적으로 동작하지 않을 때 gandalf 먼저 체크한 뒤, 각 frodo 상태를 살펴야합니다.

프로그램은 3가지이지만, 장비가 N대라면 N+2의 프로그램을 돌봐야하는 것입니다.


모바일 최적화 이슈

도서관 홈페이지에서 연계되는 만큼, 클라이언트의 기종을 예측할 수 없습니다. 기존 프로그램은 모바일 화면에 최적화 되어있지 않아 사용자에게 불편한 점이 있었습니다.


2.2 무엇이 달라졌나

미들웨어 종속성 제거

많은 문제를 발생시키는 미들웨어를 제거할 수는 없을까?

대다수의 문제점이 미들웨어에서 나타나기 때문에 미들웨어 종속성을 제거하기 위해 노력했습니다. 먼저, 몇가지를 체크해보았습니다.

  • 기존 프로그램이 왜 그런 구조를 가지게 되었는지
  • 다른 프로그램과 연계되지 않는지
  • 이 구조를 원하는 구조로 변경해도 되는지

기존에 프로그램을 개발자는 이미 퇴사해서 없기 때문에, 팀장님과 의논 & 협의하며 진행했습니다. 기존 개발자는 웹이 주 스택 아님, 연계 프로그램 없음, 구조 변경 가능으로 결론이 나서 미들웨어 제거를 검토해 볼 수 있게 되었습니다.


미들웨어 제거 검토

"직접 DB를 연결할 수 없는 것 아닐까?"
하지만, 미들웨어 포트는 열려있기 때문에 DB든 미들웨어든 연결해야됩니다.

"DB 노출 위험"
확실이 DB에 직접 접근하면, 노출 위험이 증가하는 것은 사실입니다. 하지만, 고객사의 내부망 서버에 배포되는 것이라 내부 서버에서만 접근 가능하도록 보안 설정을 해두면 될 일이라고 생각됩니다.

어디든간 정보를 가져오려면 DB에 연결해야되고, 꼭 여러 프로그램으로 나누어 유지보수의 어려움을 증가시키는 수고는 안하는 것이 좋다고 생각되었습니다.


동적 DB 연결

미들웨어를 제거하기 위해서는 하나의 프로그램에서 저 DB들을 모두 연결하는 것이었습니다.

동적 DB 연결을 찾아보던 도중 Spring의 동적 DB 연결을 지원하는 AbstractRoutingDataSource 클래스를 발견하여, 기술 검토 & 적용 단계를 거쳐 미들웨어(gandalf, frodo) 없이 동작하는 프로그램을 개발하였습니다.

변화된 도서 검색 API 호출 프로세스

  • 기존 검색 프로세스는 아래와 같았습니다.

도서 검색 API 호출 ⇒ 서버 미들웨어(Gandalf) 호출 ⇒ 장비 미들웨어(Frodo) 호출 ⇒ Gandalf로 결과 반환 ⇒ 결과 반환

  • 신규 검색 프로세스는 아래와 같습니다.

도서 검색 API 호출 ⇒ 해당 DB로 쿼리 ⇒ 결과 반환

DB에 직접 붙음으로써 처리 지연 및 호출 프로세스를 줄여 검색 속도를 높이는 효과를 얻을 수 있었습니다.


모바일 최적화

기존 페이지는 모바일에서 보기 힘든 UI를 갖고 있었고, 이를 해결하기 위해 반응형 웹으로 구현하였습니다.

기존신규

도서 상세정보 API

도서를 클릭하면, 도서 상세 정보가 모달이 나타납니다. 도서 상세정보를 위해 다양한 Open API를 사용하고 있습니다.

기존 동작 매커니즘

API 호출 ⇒ Open API 호출

개선 매커니즘

API 호출 ⇒ DB에 있는지 검사 ⇒ 값 반환

  • 있으면, DB 값 반환
  • 없으면, API 호출 => DB 적재 및 반환

얻은 이점

보통 Open API는 보통 하루에 할 수 있는 Call 수가 제한되어 있습니다. DB 적재를 통해 불필요한 API Call 수를 줄였고, DB 적재를 속도를 향상시켜 결과적으로 성능을 높이는 효과를 볼 수 있었습니다.


💎 마치며

신입 시절 회의에 빠지며

입사 후, 얼마 지나지 않아 이 프로젝트를 맡게 되었습니다.

신입이라 눈에 띄는 성과를 찾기 어려울 뿐 아니라, 장비를 만드는 제조업체라 웹이 주가 아니었기 때문에 "알아주는 사람이 없는데, 프로그램을 열심히 만드는게 의미가 있는 걸까?"라는 회의에 종종 빠지곤 했습니다.

이 프로그램을 만들고 나서, 고객사에 직접 관리해야되는 CS팀(고객 응대팀) 대리님이 "관리하기 훨씬 편해졌다. 좋은 프로그램을 만들어줘서 고맙다"는 말을 듣고, 내가 한 행동이 의미없지 않음을 느꼈고, 앞으로 좋은 프로그램을 만들기 위해 더욱 노력해야겠다고 다짐했습니다.


개발자로서

개발자로서 프로그램을 만드는 일은 스스로 굉장히 가치 있다고 생각합니다. 하지만 당장에 눈에 띄는 성과가 없다면 가치 없는 일처럼 느껴질 수 있습니다.

그 속에서 가치를 찾기 위해 계속해서 발전해나가는 것이 개발자의 일이 아닐까 싶습니다. 이상으로 포스팅을 마치겠습니다. 읽어주셔서 감사합니다.😊

profile
Java, Spring 기반 풀스택 개발자의 개발 블로그입니다.

0개의 댓글