이 글은 BuildingHub 시리즈의 4번째 기록입니다. (총 6개)

오늘 한 일

남아 있던 백로그 다섯 중 넷을 처리했다. 하나는 배포 전에 완결할 수 없어 미뤘다.

올린 사진을 자동으로 줄인다

지금까지 원본을 그대로 저장했다. 4000×3000 사진을 올리면 그대로 나갔다.

서버 런타임에는 이미지 디코더가 없고, 클라우드 이미지 서비스는 유료 부가 상품이다. 브라우저 캔버스로 줄여 보내기로 했다. 긴 변 1920px, WebP. 273KB 짜리가 11KB로 들어간다. 큰 원본이 네트워크를 타지 않는 이점도 따라온다.

벡터 파일은 래스터로 바꾸지 않는다. 확대할 때 뭉개진다. 이미 잘 압축된 원본을 오히려 키우는 경우에는 원본을 쓴다.

조작 이력

누가 언제 승인·반려·배포했는지 답할 수 없으면 운영 책임을 가릴 수 없다. 로그인·예약 처리·콘텐츠 배포·이미지·공지까지 사람이 한 행위를 남긴다. 조회는 남기지 않는다. 남겨도 읽을 사람이 없고 표만 불어난다.

화면에서는 묶음별로 거를 수 있다. 예약만, 콘텐츠만 보고 싶을 때가 대부분이다.

좌석 배치도

사진만으로는 몇 명이 어떻게 앉는지 보이지 않는다. 극장식·강의식·ㄷ자·회의 테이블 네 형태를 정의에서 그린다.

사업자등록증 첨부

공개 이미지와 달리 아무나 받으면 안 된다. 저장 위치를 나누고, 담당자이거나 본인 확인을 통과해야 내려받게 했다.

미룬 것

예약 승인·반려 안내 메일은 도메인 인증과 발신 설정이 있어야 실제로 나간다. 배포 전에 만들면 “보냈다고 표시만 하는” 물건이 되는데, 그건 없는 것보다 나쁘다고 보고 배포와 함께 하기로 정했다.


막힌 부분

좌석 154개를 다 그리면 배치가 안 보인다

문제. 대회의실은 154석이다. 점을 154개 찍으면 화면이 검게 뭉치고 정작 “어떤 배치인가”가 안 읽힌다.

  • 해결: 형태를 보여주는 데 필요한 만큼만 그린다. 극장식은 70석까지, 강의식은 24석까지
  • 따라온 문제: 그러면 도면이 사실과 달라진다. “154석 기준”이라 써 놓고 70개만 그리면 도면이 거짓말을 한다
  • 최종: 그린 수와 실제 수가 다르면 캡션에 밝힌다. “실제 154석. 도면은 배치 형태를 보이기 위해 일부만 그렸습니다”

흰 바탕에 흰 글씨

문제. 배치도의 “디스플레이” 라벨이 보이지 않았다. 화면에서는 그냥 빈 자리로 보인다.

  • 원인: 라벨 색을 흰색으로 정해 뒀다. 어두운 가구 위에 얹는 글씨를 기준으로 만든 규칙인데, 이 라벨만 흰 바탕 위에 있었다
  • 해결: 바탕이 밝은 자리용 라벨을 따로 뒀다
  • 남은 조치: 색이 배경과 같은지 검사에 넣었다. 눈으로는 “여기 뭔가 없나” 정도라 넘어가기 쉽다

비공개 파일을 이름으로만 지키지 않는다

문제. 첨부 파일 이름은 내용 해시라 추측이 사실상 불가능하다. 그것만 믿고 열어 둘 수도 있었다.

  • 판단: 이름을 모르면 못 연다는 건 잠금이 아니라 운이다. 주소가 한 번 새면 그대로 끝난다
  • 해결: 담당자이거나, 예약번호와 연락처가 함께 맞아야 준다. 응답에 캐시를 걸지 않는다 — 권한이 바뀌어도 브라우저에 남으면 곤란하다
  • 확인: 비로그인 차단, 연락처 불일치 차단, 본인 확인 허용, 담당자 허용 네 경우를 검사에 넣었다

이력이 본 작업을 막으면 안 된다

문제. 조작 이력을 남기는 코드가 예약 승인 안에 들어간다. 이력 기록이 실패하면 승인도 같이 실패하게 둘 것인가.

  • 판단: 그러면 주객이 바뀐다. 기록은 운영을 돕는 장치지 운영의 조건이 아니다
  • 해결: 기록 실패는 삼킨다. 승인은 통과시킨다

시각이 아홉 시간 어긋났다

문제. 이력 화면의 시각이 실제보다 아홉 시간 이르게 보였다.

  • 원인: 데이터베이스는 세계 표준시로 적는데 화면에서 그대로 보여줬다
  • 해결: 보여주는 자리에서 우리 시간대로 바꾼다. 저장은 표준시로 두는 편이 낫다 — 표시 기준이 늘어나도 저장을 건드릴 일이 없다

검사끼리 같은 자리를 잡았다

문제. 첨부 검사가 실패했는데 첨부와 무관한 이유였다.

  • 원인: 앞선 검사가 이미 그 회의실의 그 시간대를 잡아 뒀다. 중복 차단이 정상 동작한 것이고 검사가 자리를 잘못 고른 것이다
  • 해결: 새 검사는 앞선 검사가 안 쓰는 자리를 고른다

다음에 할 일

  • 예약 승인·반려 안내 메일 발송 (배포와 함께)
  • 공개 배포 — 데이터베이스와 저장소를 원격에 만들어야 해서 승인 대기

Series: BuildingHub


Suggested Posts