본문으로 건너뛰기
Works공정 안전 관리 시스템
Business Project

공정 안전 관리 시스템

공정 프로세스의 작업 및 문서를 관리하는 B2B 웹 시스템

담당 역할
프론트엔드 개발
팀 구성
프론트엔드 2명 · 백엔드 1명
소속 · 의뢰
주식회사 비멕스
진행 기간
2023.03 ~ 2024.07
WebFrontend

보안상 화면과 내부 자료는 공개하지 않습니다.

기여 범위

초기 프론트엔드 개발을 단독으로 담당했고, 이후 현장실습생이 합류해 일부 기능 개발에 참여했습니다. 도면 관리와 PWA 적용은 직접 담당했습니다.

도면·문서 목록과 모바일 사용

픽셀 대신 GPS 좌표로 위치와 크기 저장

문제

전체 도면에서 구역을 클릭하면 해당 상세 도면으로 이동하고, 작업 위치를 두 도면의 알맞은 위치에서 실제 축척에 비례하는 크기로 표시·수정해야 했습니다.

도면마다 이미지 크기가 달라 위치와 크기를 픽셀 값 그대로 저장하면 전체·상세 도면에서 같은 작업 위치를 연동할 수 없었습니다.

서로 다른 도면에서 같은 위치 찾기
영역을 끌어 이동하고 오른쪽 아래 손잡이로 크기를 조절하세요.
전체 도면구역과 작업 위치
37.0080°N · 127.0000°E ↔ 37.0000°N · 127.0100°E
상세 도면선택 구역 확대
37.0060°N · 127.0030°E ↔ 37.0020°N · 127.0080°E
북서 37.00420°N / 127.00400°E남동 37.00300°N / 127.00550°E
Tab으로 선택 · 방향키로 조절 · Shift로 크게 이동

구현

전체 도면의 구역 이동은 react-image-mapper에 구역 좌표를 지정해 연결했습니다. 작업 위치는 중앙에 도형을 띄운 뒤 react-moveable로 드래그와 크기 조절을 할 수 있게 했습니다.

도면마다 크기가 달라 화면의 픽셀 좌표를 그대로 재사용할 수 없었습니다. 이미지 모서리의 위도·경도를 기준으로 작업 위치와 크기를 변환해 저장하고, 전체·상세 도면에서 각각의 이미지 크기에 맞게 복원했습니다.

react-moveable은 엘리먼트 이동에 CSS transform을 사용했습니다. 따라서 저장값을 불러오는 것만으로 끝나지 않고, 복원한 위치와 크기를 다시 transform 값으로 변환하는 계산이 필요했습니다. 이 계산을 조정하는 시행착오를 거쳐 저장·불러오기·재수정 흐름을 연결했습니다.

도형과 자유선을 같은 방식으로 편집

문제

도면 출력을 위한 글·도형·스티커 마크업이 필요했습니다. 그중 직접 그린 자유 곡선을 다른 도형처럼 조작하고 저장·수정하는 부분이 까다로웠습니다.

도면 마크업 편집

도구를 선택해 도형을 추가해 보세요. 선택된 도형 없음

드래그로 이동하고 손잡이로 크기와 회전을 조절하세요.
키보드: 방향키로 이동, 버튼으로 변형. 자유선은 Enter와 방향키로 그립니다.

구현

팝업에서 화살표나 사각형 도구를 누르면 캔버스에 도형을 추가하고, 자유선 도구를 누르면 직접 그리는 모드로 전환하도록 했습니다.

그리기를 마치거나 모드를 종료하면 스케치 라이브러리의 결과를 SVG 객체로 변환했습니다. 그린 path 좌표로 곡선의 범위를 구하고, 그 범위에 맞는 viewBox로 묶었습니다.

변환한 자유선에도 다른 도형과 같은 이동·크기 조절·회전을 적용하고, 같은 방식으로 저장하고 복원할 수 있게 했습니다.

대용량 문서 목록의 검색·필터 조건 유지

문제

10만 건 이상의 문서를 다루는 목록에서 검색·필터 조건을 적용한 뒤 새로고침하거나 상세 화면에 다녀오면 조건이 초기화되어 반복 조회가 불편했습니다.

구현

10만 건 이상의 문서를 한 번에 가져오지 않고, 페이지·정렬·필터 조건에 맞는 목록을 서버에서 조회하도록 구성했습니다. 검색 조건은 URL에 저장해 새로고침하거나 상세 화면에 다녀온 뒤에도 유지했습니다.

모바일 WebView의 이동 문제와 PWA 전환

문제

기존 모바일 앱 WebView에서 외부 링크 이동과 브라우저 뒤로가기 동작이 정상적으로 이어지지 않았습니다.

구현

PWA 도입을 제안하고 서비스워커를 적용한 프로토타입으로 외부 링크와 히스토리 이동 동작을 확인했습니다.

FCM 푸시 알림을 연동하고 PWA를 운영 환경에 반영했습니다.

맡은 작업

  • Next.js 기반 반응형 웹 UI 개발 및 한·영 다국어 환경 구축
  • React Query 기반으로 데이터 페칭 구조 개선
  • MUI DataGrid에 서버사이드 페이지네이션·정렬·필터링을 연동해 10만 건 이상 규모의 문서 목록을 조회·관리하고, 검색·필터 조건을 URL에 저장해 새로고침 후에도 필터 상태 유지
  • 이미지 크롭·위치 매핑·SVG 마크업·드래그 이벤트 등 복합적인 도면 인터랙션 개발
  • 기존 앱 WebView의 외부 링크 이동·뒤로가기 문제에 대응해 PWA 도입 제안 및 적용
  • FCM 푸시 알림 연동 및 Jenkins 기반 빌드 자동화

사용 기술

언어·프레임워크

Next.jsTypeScript

상태·데이터

RecoilReact Query

화면·인터랙션

Material UIreact-image-mapperreact-moveableSVGMUI DataGrid

배포·도구

NextAuthPWAFCMJenkins