해운대 지도를 3D 도시로 만들었다. 그런데 바다 모양이 이상했다. 파도도, 반사도, 투명한 깊이감도 없는 밋밋한 파란 판.
물 표현을 고치기로 했다. 셰이더를 바꾸면 될 것 같았다.
고치기 전에 원본을 열어봤다
바로 코드로 가는 대신, 이 지도의 원본 데이터를 먼저 확인했다. 오픈스트리트맵에서 받아온 해운대 데이터다.
바다 폴리곤 수를 세어봤다. 0개.
물·만·해변, 전부 0. 있는 건 해안선 2개뿐이었다. 해운대인데 데이터 안에 물이 한 방울도 없었다.
그럼 지금까지 보이던 바다는 뭐였나
생성 코드를 따라가 보니, 해안선을 육지 반대쪽으로 밀어서 만든 평평한 단색 띠가 바다의 전부였다. 물이 아니라 파랗게 칠한 널빤지였다.
내가 고치려던 “바다의 품질”은 존재하지 않는 대상이었다. 널빤지에 아무리 좋은 물 셰이더를 발라도 바다가 되지 않는다. 깊이도 경계도 데이터에 없으니까.
개선 순서를 뒤집었다
작업 순서를 데이터부터로 바꿨다. 지도 요청 쿼리에 만·바다·해변 항목을 추가해서 물 폴리곤을 실제로 받아오는 게 먼저다. 표현은 그다음이다.
화면에 보인다고 데이터에 있는 게 아니었다. 대체물이 자리를 채우고 있으면 없다는 사실이 안 보인다. 이게 이번에 배운 것이다.
재발방지 체크리스트
① 품질 불만이 생기면 표현 코드보다 먼저 입력 데이터의 개수를 센다.
② “화면에 보인다”와 “데이터에 있다”는 다른 사실이다. 대체물을 의심한다.
③ 지역 이름이 보장하는 건 없다. 쿼리가 실제로 가져온 것만 존재한다.
④ 개선 순서는 데이터 → 로직 → 표현. 없는 것은 아무리 잘 그려도 없다.
① 품질 불만이 생기면 표현 코드보다 먼저 입력 데이터의 개수를 센다.
② “화면에 보인다”와 “데이터에 있다”는 다른 사실이다. 대체물을 의심한다.
③ 지역 이름이 보장하는 건 없다. 쿼리가 실제로 가져온 것만 존재한다.
④ 개선 순서는 데이터 → 로직 → 표현. 없는 것은 아무리 잘 그려도 없다.