직방 3D 단지보기 개발 과정 소개

전세종
직방 기술 블로그
9 min readApr 22, 2021

--

ZED팀은 직방의 데이터를 활용하여 3차원 그래픽으로 시각화하는 역할을 담당하고 있습니다. 최근 직방 아파트 서비스에 3D 단지보기 기능이 추가되어 그 개발 과정을 공유하고자 합니다. 이번 포스팅을 통하여 해당 기능을 개발해온 과정들에 대해 포괄적으로 살펴보고, 추후 포스팅에서는 그 과정에서 직면했던 문제들과 해결 방법에 대하여 좀더 상세히 소개하도록 하겠습니다.

시작

그래서 3D로, 무엇을 할 것인가?

부동산은 3차원 공간으로 존재하는 만큼, 2차원 평면의 UI 만으로 모든 정보를 만족스럽게 제공하기엔 한계가 있습니다. 이를 3차원으로 확장했을때 어떤 정보들을 보여줄 수 있는지 에 대한 고민에서부터 시작하여, 다양한 논의를 거친 후에 ZED팀에서 만들어내기로 한 첫 번째 서비스는 아파트 단지의 3D 뷰였습니다.

3D 단지뷰 (이촌동 래미안 첼리투스)

아파트를 보는 사람들이 궁금해하는 정보는?

아파트 단지를 3D로 보여주기로 결정하면서, 거기에 어떠한 정보를 담아낼지에 대한 고민이 필요했습니다. 결론을 내는 과정에서 크게 두 가지 기준이 필요했는데요, 첫번째는 고객의 입장에서 알고 싶어하는 정보인지, 두 번째로 그것을 3D로 표현하면 어떤 특장점이 있을지. 이 두 가지 요소를 고려하여 우리가 유의미하다고 생각하는 정보들을 정리해 보았습니다.

1. 단지전경과 동호배치

3차원 단지 전경과 동호배치도

단지 전경 을 확인할 수 있는 일반적인 방법은 사진 검색을 하거나 항공사진 또는 로드뷰를 이용하는 것 입니다. 사진은 사실적이지만 모든 공간 정보를 담아낼 수는 없습니다. 최근에는 많은 지도 서비스들이 3D 맵을 지원하고 있지만 직방은 아파트 단지에 초점을 맞춰 평형 타입, 동호배치 등 좀더 부동산에 특화된 정보들을 보유하고 있었고, 이것을 3차원 공간에 맵핑시키면 유용한 정보가 될 수 있으리라 판단했습니다.

2. 조망권 및 일조권

아파트 조망권과 일조권

조망권은 집을 결정하는데 매우 중요한 요소지만 해당 세대를 직접 방문하지 않으면 사실상 확인하기 어렵습니다. 사용자에게 온라인으로 간접적으로나마 집안에서의 뷰를 체험할 수 있도록 하고, 여기에 시간별로 태양의 위치를 보여줄 수 있다면 일조권을 짐작하는데에도 도움이 될 것 같았습니다.

이러한 정보들을 표현하는 것을 목표로 하고, 실행을 위한 준비를 진행했습니다.

준비

라이브러리 선정

먼저 개발 환경을 구성하기 위한 라이브러리 선정부터 시작했습니다. 고려 대상은 three.js, Unreal, Unity였고 다음과 같은 점을 종합적으로 감안하여 Unity를 선택하였습니다.

1. 빠른 속도의 콘텐츠 제작과 프로토타입핑: 3D 단지 보기는 타 프로젝트에서 참고할 사례가 흔치 않았습니다. 따라서 개발하는 구성원의 입장에서도 어떤 모습의 아웃풋이 나올지 불투명했기 때문에 자연스럽게 빠른 프로토타입핑을 중시하는 애자일한 방식으로 개발하게 되었고, 로우레벨 라이브러리로 기반 작업을 깊게 진행하기보다는 빠른 개발 속도에 특화된 엔진이 필요했습니다.

2. 기존 직방 앱과의 연동: 3D 단지보기 서비스는 하나의 독립적인 앱이 아니라 직방 서비스 위에서 동작하여야 했고, 따라서 빌드시 모듈로 익스포트 하여 직방 앱에 포함시키는 기능이 꼭 필요했습니다.

3. 배포가 용이하고 유지보수가 간편한 툴 개발: 부득이한 상황으로 수작업이 불가피해질 될 경우, 그 작업을 지원할 수 있는 툴 제작이 쉽고 간편해야 합니다. 유니티는 플러그인 커스터마이징이 용이하고, 팀내 개발 구성원 모두에게 익숙한 도구였기 때문에 버그나 요구사항 발생시 빠른 대응이 가능했습니다.

4. 다양한 아트애셋 활용 가능성: 3D 콘텐츠인 만큼 시각적인 아름다움 또한 중요한데, 그 요구들을 충족하기 위한 아티스트 인력은 부족한 실정이었습니다. 따라서 기존의 애셋 생태계가 활성화되어 있고, 이러한 애셋들을 큰 어려움 없이 가져다 쓸 수 있는 플랫폼이 필요했습니다.

활용 가능한 데이터 확인

엔진을 채택한 이후에는 우리가 프로젝트를 위해 활용 가능한 정보가 무엇인지 파악하는 과정이 필요했습니다. 직방은 기존의 아파트 서비스를 제공하는 과정에서 전국의 아파트 단지 데이터를 확보하고 있었으며 이것을 기반으로 시각화에 활용할 수 있는 값을 다음과 같이 선별하였습니다.

1. 단지의 지리적인 위치: 아파트 단지의 위치값을 활용하여 단지 주변의 지형과 그밖의 지리적 정보들을 표현하였습니다.

2. QGIS: QGIS는 오픈소스 기반의 지리정보 시스템이며, 지리정보를 수집, 가공하는데 가장 폭넓게 이용되고 있는 시스템 중 하나입니다. 이를 이용하여 건물 영역의 폴리곤 데이터를 추출하고, 이를 이용하여 아파트 단지의 모델링을 생성하였습니다.

QGIS 데이터 기반으로 단지 폴리곤생성

3. 평면도 데이터: 직방은 아파트의 세대별 평형 타입 정보와 거기에 대응하는 평면도 데이터를 보유하고 있습니다. 이것을 변환하여 세대별로 3차원 평면도 모델링을 생성하였고, 평면도의 창문 위치를 이용하여 세대별 조망권 포인트를 만들었습니다.

평면도 파일을 3D 모델링으로 변환
평면도 창문 위치를 찾아 조망권 포인트로 사용

개발 과정

구현 목표를 실행하는 과정에서 해결해야 했던 다양한 과제들을 소개합니다. 간단하게 해결한 문제들도 있고, 별도의 포스팅이 필요할 만큼 복잡한 이슈들도 있었습니다. 보완이 필요한 내용들은 다음 포스팅에서 자세히 공유드리도록 하겠습니다.

직방 앱에 Unity 엔진 연동

3D단지보기 기능은 standalone 앱이 아닌 직방 내부의 기능으로서 동작해야 했습니다. 직방은 react-native 기반으로 동작하는 앱이고 여기에 Unity 기반의 모듈을 올려야 하는 상황이었습니다. Unity 는 2019 버전부터 unity as a library 기능을 지원합니다. 해당 기능을 활용하여 모듈을 익스포트하고 android/ios 플랫폼에 적용한 결과 큰 문제없이 동작하였습니다. 보다 구체적인 세팅 과정이 궁금하신 분들은 다음 페이지를 참고하세요:
https://github.com/Unity-Technologies/uaal-example

QGIS 데이터로 생성한 아파트 폴리곤 정보를 JSON으로 변환

QGIS 데이터에 지정된 영역과 건축물의 높이 정보로 아파트 폴리곤을 생성하고, 이것을 json 데이터로 통신할 수 있도록 경량화하는 작업을 진행했습니다.

평면도 / 지형 리소스 생성

EC2 인스턴스를 이용하여 전국 단지들의 평면도/지형을 일괄 변환

단지 주변 지역의 지형과 건물을 이루고 있는 각 세대들의 평면도를 3D 모델링으로 변환하고, 이 리소스들을 번들링하여 CDN에 업로드하였습니다. 전국 2만 6천여개의단지와 6만여개의 평면도 정보들을 변환하기 위해 AWS EC2를 활용하였고, EC2 인스턴스를 유연하게 관리하기 위해 CDK를 이용하였습니다.

건물 폴리곤과 지형 간의 높이 맞추기

건물 폴리곤과 지형 간의 fit을 맞추기

지형에는 고저차이가 있고, 건물은 그 지형에 따라 세워집니다. 이전 단계에서 생성한 건물 폴리곤은 평면 위의 모델링일 뿐이며, 이러한 지형 높이를 반영하지 못합니다. 따라서 건물 폴리곤에서 지면에 닿는 면을 탐색 후에 위치를 조정하고 비어있는 단지는 메워 주는 로직을 구현하여 지형 높이를 맞추었습니다.

툴을 이용하여 평면도 방향 정보 저장

평면도와 건물의 방향을 맞추기 위한 유니티 플러그인 형태의 편집툴 제공

아파트의 조망권을 확인하기 위해서는 아파트 세대들의 방향을 실제와 동일하게 맞춰야 하고 조망을 볼 수 있는 창호지점의 위치를 알아야 합니다. 이 정보를 확보하기 위해서 불가피하게 직접 원본의 모습을 육안으로 보고 수작업하는 과정이 필요했으며, 전문 지식이 없는 작업자분들도 빠른 시간 내에 교육받고 처리할 수 있도록 커스터마이징한 유니티 편집 툴을 만들어 배포하였습니다.

데이터 검증

데이터의 유효성을 검증하여 서비스 가능 여부를 dashboard로 관리

이러한 과정을 거쳐 생성된 단지 데이터는 작업 실수 등의 이유로 오류가 빈번히 발생합니다. 이 문제를 트래킹 및 수정하기 위해 백엔드팀에서 데이터 검증 시스템을 구축해 주셨고, 이 시스템은 주기적으로 전체 단지에 대하여 배치를 돌며 유효성 검증 과정을 거칩니다. 이런 과정들은 라이브 서비스 중인 단지 데이터의 오류를 감지하고 신규분양 단지들의 작업 오류를 빨리 찾아내는데 많은 도움이 되었습니다.

결론

성과

시행 착오도 있었고 아쉬운 점도 많았지만, 이러한 과정을 거쳐 직방 앱에 3D 단지 보기 기능을 성공적으로 런칭하였으며, 현재 라이브에서 소기의 성과를 거두고 있습니다. 현재 3D 단지보기 서비스는 수도권 전체 단지를 100% 오픈한 상태이며 4월에 전국 단지 배포를 목표로 진행 중에 있습니다. 또한 신규분양 단지가 오픈될 경우 지금까지의 시스템으로 반나절 안에 3D 단지뷰를 새로 추가하여 분양에 관심이 있는 사용자들을 빠르게 유입시킬 수 있는 프로세스를 구축하였습니다.

개선 및 보완점

향후 현재 사용되는 지형/평면도 변환 기능의 고도화로 신규분양 단지 배포시의 생산성을 높이고, 아파트 단지내에 조경 및 편의시설을 추가적으로 배치하여 보다 유용한 정보를 제공하는 작업을 시도 및 연구 중입니다. 성공적으로 개발하여 다시한번 여러분께 공유드릴 기회가 오면 좋겠습니다.

다음 ZED팀 포스팅에선 이번 포스팅에서 소개한 기술들을 좀더 자세히 살펴보는 내용으로 찾아뵙도록 하겠습니다. 감사합니다.

--

--