사내 업무 포털

흩어져 있던 내부 서비스 링크·프로젝트 현황·기술 문서를 한 시작 페이지로 모은 내부망 포털입니다. 상단 검색창 하나로 서비스·프로젝트·과제·위키 문서를 함께 찾습니다.

연표로 돌아가기
문제
내부 서비스 주소와 프로젝트 현황, 기술 문서가 여러 곳에 흩어져 있었고, 포털은 외부 인터넷이 끊긴 내부망에서도 화면과 검색이 그대로 동작해야 했습니다.
담당
설계 문서 작성부터 서버 렌더링 화면, 서비스 상태 점검과 화면 미리보기 수집, 프로젝트 목록 동기화, 위키와 통합 검색, 컨테이너 배포까지 맡았습니다.
설계 판단
사용자와 화면 규모가 작아 단일 페이지 애플리케이션 대신 FastAPI 서버 렌더링과 최소한의 스크립트를 골랐습니다. 목록마다 있던 검색창은 같은 낱말에 화면마다 다른 결과를 내어 상단 통합 검색 하나로 모았습니다.
검증 기준
배포 전에 전체 테스트와 위키 문서 점검 스크립트를 통과시키고, 이미지 빌드 직후 앱 모듈을 불러오는 스모크 테스트로 기동에 실패하는 이미지를 전송 전에 걸러 냅니다. 자동 테스트는 11개 파일 70개이고, 요청 값으로 파일을 여는 모든 경로가 허용 범위 밖 파일을 읽지 못하는지는 회귀 시험으로 고정했습니다.
결과 범위
내부망에서 운영 중입니다. 처음 계획한 네 모듈 가운데 유틸 위젯과 파일 공유는 취소했고, 계획에 없던 프로젝트·과제·기술 문서 화면과 통합 검색이 더해져 화면 대부분을 차지합니다.

사내 서비스 주소와 프로젝트 현황, 기술 문서가 여러 곳에 흩어져 있어, 시작 페이지 하나로 모으는 내부망 포털을 만들었습니다.

서비스 타일에 상태 배지를 붙여 살아 있는지 바로 보이게 하고, 프로젝트와 과제는 카드 목록에서 필터로 좁히거나 상단 통합 검색으로 찾은 뒤 상세는 위키 문서 하나로 이어지게 했습니다.

문서는 마크다운 파일로 두고 화면이 그것을 읽는 구조라, 기록을 남기는 사람이 도구를 새로 배우지 않아도 됩니다.

통합 검색은 외부 서비스나 모델 내려받기 없이 동작하게 했습니다. 전문 검색 순위에 문자 단위 유사도(n-gram 해시)를 섞고 제목 일치 가산을 더했으며, 질의에서 유형·상태·기관·기술·연도 조건을 먼저 읽어 후보를 거릅니다. 색인은 원본의 해시값이 바뀔 때만 다시 만듭니다. 문맥의 뜻까지 이해하는 검색은 아니라서 임베딩 모델 도입은 검색이 실패한 사례가 쌓일 때로 미뤘습니다.

요청 값으로 파일을 여는 경로(위키 문서, 프로젝트 코드, 대표 이미지, 화면 캡처, 서비스 미리보기)는 상위 경로 이동, 절대 경로, 백슬래시, URL 인코딩, 심볼릭 링크로 허용 범위 밖 파일을 읽을 수 없게 막았고 이를 시험으로 고정했습니다. 서비스 목록은 코드 상수 대신 JSON 파일로 빼 이미지를 다시 빌드하지 않고 고치게 했습니다. 기동 때만 동봉 목록으로 물러서고 다시 읽는 중의 오류에는 물러서지 않게 가른 것은, 공통 대체 경로를 두면 손으로 더한 서비스가 지워지는 것을 컨테이너 검증에서 확인했기 때문입니다.

서비스 미리보기는 헤드리스 브라우저가 라이트·다크 한 벌씩 주기적으로 찍습니다. 서비스마다 브라우저 컨텍스트를 새로 열어 쿠키가 섞이지 않게 하고, 임시 파일에 찍은 뒤 교체해 반쪽짜리 이미지를 읽지 않게 했습니다. 로그인해서 찍는 방식이 대상 서비스에 세션을 계속 쌓는 부작용을 발견해 공개 진입 버튼을 눌러 들어가는 방식으로 바꾸었습니다.

배포는 이미지를 로컬에서 빌드해 전송·적재하는 방식으로 고정하고, 전송 파일의 해시를 로컬과 원격에서 대조해 다르면 교체 전에 중단합니다. 문서와 화면 캡처만 바뀐 경우는 이미지를 다시 빌드하지 않고 부분 배포합니다. 같은 작업 트리를 두 갈래로 고치다가 소스와 구성이 어긋난 이미지가 올라가 컨테이너가 재시작을 반복한 일이 있어, 빌드 직후 앱 모듈을 불러오는 시험과 편집 중에는 전체 배포를 보류하는 규칙을 두었습니다.

화면

검색 상자 아래에 상태 배지가 붙은 서비스 타일과 프로젝트 카드, 오른쪽에 최근 문서 목록이 있는 포털 첫 화면검색 상자 아래에 상태 배지가 붙은 서비스 타일과 프로젝트 카드, 오른쪽에 최근 문서 목록이 있는 포털 첫 화면
포털 시작 페이지. 서비스 타일의 배지는 주기 점검 결과를 그대로 보여 줍니다.

더미 데이터로 채운 그림입니다. 실제 화면과 배치·문구가 다를 수 있습니다.

구조와 흐름

포털 구성

마크다운 문서과제 · 프로젝트 · 기술색인전문 검색 + 문자 n-gram사내 서비스 목록상태 점검살아 있는지 배지AI 사용량 집계프로젝트 · 과제 카드통합 검색자연어 조건 해석서비스 타일위키 문서 화면시작 페이지
PythonFastAPISQLiteDocker