[인턴] 세부 출장 후기 - Pos, Mall, 재고 관리 시스템 개발

Sungjin Cho·2024년 10월 31일

Server

목록 보기
4/8
post-thumbnail

1차 출장 (240626 ~ 240711)

1차 출장에서는 현지 실무에서 필요한 요구 사항을 파악하고, POS 프로그램 기능의 수정 및 추가 필요 사항을 논의했습니다. 귀국 후 기존에 개발되어 있던 POS 프로그램을 현지 사정에 맞추어 수정하는 작업을 진행하였으며, 주요 수정 사항으로는 Hold 버튼과 도매 처리, 프린터 처리, 상품 데이터 관련 예외 처리 등이 있었습니다.

2차 출장 (241014 ~ 241024)

2차 출장부터 본격적인 세팅 작업을 시작하게 되었습니다.

네트워크 설정

세부시티의 외곽 지역의 특성상 인터넷이 불안정하고, 정전이 자주 발생하여 가능한 인터넷 연결이 필요 없는 환경을 구성하고자 했습니다. 일반적으로는 소프트웨어를 클라우드에 배포하고 도메인을 바인딩하여 URL에 접속하는 방식이지만, 이번 현장 환경에서는 내부망을 활용하는 방식으로 세팅을 진행했습니다.

라우터 퍼블릭 IP 도메인 바인딩

라우터의 퍼블릭 IP를 도메인에 바인딩하고, 동일 네트워크를 사용하는 PC를 해당 라우터에 연결했습니다. 라우터의 퍼블릭 IP가 122.4.64.19라고 가정했을 때, 내부에서는 192.168.1.x 대역의 IP를 사용하고, abc.kr 과 같은 도메인(예시)을 가비아에서 구매하여 연결하는 방식으로 네트워크를 구성했습니다.

가상 호스트 및 포트포워딩 세팅

www, pos., wms, mysql와 같이 가상 호스트를 구성하여 접속할 수 있도록 설정했습니다. 포트포워딩을 통해 122.4.64.19 IP로 들어오는 요청을 특정 PC(192.168.1.5)에서 처리하도록 설정하여 안정적인 네트워크 환경을 구축할 수 있었습니다.

참고: 필리핀에서 사용 중인 PLDT 라우터는 기본 게이트웨이 URL로 포트포워딩 설정이 제한되어 있었습니다. 기본 게이트웨이에 /fh를 추가한 URL로 접속해야 포트포워딩 설정이 가능하다는 것을 나중에 PLDT 측에 문의하여 알게 되었습니다.

프린터 트러블슈팅

POS 시스템에서 JPosPrinter API를 이용하여 USB 연결된 프린터를 사용하는데, 기존에는 Windows 환경에서 .dll 파일을 사용하여 프린터 드라이버를 설치했었습니다. 하지만 Docker 컨테이너 기반 우분투 환경에서는 .dll 대신 .so 파일을 필요로 하기 때문에 프린터 요청이 정상적으로 동작하지 않았습니다.

CUPS와 Samba를 사용하여 우분투에서 프린터 요청을 Windows로 전송하는 방식을 시도했지만, CUPS에서 사용자 인증 관련 에러가 지속적으로 발생하여 최종적으로 실패했습니다.

최종 설정

결국 POS 시스템을 사용하는 PC에서 자바 애플리케이션 WAR 파일과 Nginx를 실행하는 임시 방안을 채택했습니다. 운영 환경에서는 유지보수가 어려울 수 있지만 테스트 및 시범 운영에서는 해당 방안을 사용하기로 결정했습니다. 로컬 PC에서 Tomcat 서버를 실행하여 WAR 애플리케이션을 구동하고, Nginx의 html 경로에 React 빌드 파일을 배치하여 사용했습니다.

추가적으로, POS 프로그램을 실행할 로컬 PC가 Windows 32bit 환경이었기 때문에 Docker 및 Java 11 설치가 불가능하여 Java 8 버전으로 낮추는 코드 수정이 필요했습니다.

최종 세팅 구성은 다음과 같습니다:

  • Main Server PC (192.168.1.5): Docker Compose로 POS 외의 MySQL, 추가 기능(Spring), 쇼핑몰(Gnuboard) 등의 컨테이너를 실행
  • POS Client PC: 로컬 Tomcat 서버에서 WAR 애플리케이션을 실행하고, Nginx에 React 빌드 파일을 배치하여 사용

이번 출장에서는 현지 환경에 맞춘 POS 시스템을 구축하고, 예상하지 못했던 환경 제약을 해결하면서 내부망 기반의 시스템을 성공적으로 시범 운영할 수 있었습니다.

느낀 점

여러 제약이 있었지만, 내부망과 포트포워딩 설정을 마치고 나니 로컬 호스트와 IP 개념, 그리고 네트워크 구성을 더 잘 이해하게 되었고, 특히 라우터(공유기)가 퍼블릭 IP를 가지고 있고, 이를 통해 외부에서도 접근 가능한 서버를 구성할 수 있고 직접 이 서버를 세팅해봤다는 것이 좋은 경험이 되었습니다.

현장에서 네트워크 문제나 프린터 트러블슈팅처럼 예상치 못한 상황도 많았지만, 이를 하나씩 해결하면서 인프라를 설정하는 데 있어 클라우드 외의 대안에 대해 생각해 볼 수 있었습니다. 실제 클라우드 환경과 비교할 때, 로컬 서버와 내부망 설정이 주는 물리적 안정성과 네트워크 독립성은 지역이나 인터넷 환경이 제한적인 상황에서 유용하다는 점도 배울 수 있었습니다.

또한 로컬 서버와 네트워크 세팅을 직접 다루면서 추후 운영 및 유지보수 시 고려할 점들도 체감할 수 있었으며, 시스템 구성에 대해 한층 더 깊이 있는 경험을 쌓을 수 있었습니다.

최종 운영 단계로 넘어가기 전에 유지보수를 위해 로컬 PC에서 직접 실행하는 방법이 아닌 메인 서버 PC에서 Docker 컨테이너 안에서 프린터 등의 문제를 전부 해결하여 실행 시킬 수 있는 방법을 고민해봐야 할 것 같습니다.


위에서 작성된 IP 또는 도메인은 실제 사용중인 IP가 아닌 가상의 IP 또는 도메인입니다.

0개의 댓글