프로젝트 개요
Tree:ID는 도시 내 수목(나무)을 체계적으로 등록·관리하고, 수목 인증 제도를 운영하기 위한 플랫폼의 백엔드 시스템입니다. 관리 기관이 수목 데이터를 대량 등록하고, 일반 사용자가 주변 나무를 탐색하며 관심 수목에 좋아요·조회 등의 반응을 남길 수 있습니다.
Kotlin과 Spring Boot 3 기반의 멀티 모듈 구조로 설계되었으며, app 모듈(API 레이어)과 domain 모듈(엔티티·리포지토리)을 분리하여 관심사를 명확히 구분합니다. QueryDSL을 활용한 동적 쿼리, AWS S3 Presigned URL 방식의 파일 업로드, 카카오 주소 검색 API 연동, 포트원 본인인증 등 다양한 외부 서비스를 통합했습니다. 관리자(Admin)와 클라이언트(Client)를 분리한 듀얼 앱 구조로 역할별 API를 독립적으로 관리합니다.
기능 플로우
주요 기능
- 회원 관리 및 인증: 이메일 기반 회원가입 시 인증 코드를 발송하여 본인 확인을 진행합니다.
JWT토큰 기반 인증을 사용하며, 포트원 API를 통한 실명 인증(본인인증)도 지원합니다. 회원 정보에는 이름, 성별, 생년월일, 이메일, 전화번호를 관리하며, 탈퇴 사유 기록 및 정지(밴) 처리 기능을 제공합니다. - 수목 등록 및 관리: 나무의 고유 코드, 도로명/지번 주소, 위경도 좌표, 수고(높이), 흉고직경, 수관폭, 식재연도 등 상세 측량 데이터를 등록합니다. 관리 기관과 관리 번호를 포함한 행정 정보도 함께 관리됩니다. 수목별 첨부 이미지를
AWS S3Presigned URL 방식으로 업로드합니다. - 수종(TreeType) 관리: 수목의 종류를 체계적으로 분류합니다. 관리자가 수종을 추가·수정·삭제하며, 각 수종별로 연결된 수목 개수를 조회할 수 있습니다. 검색 기능을 통해 수종 목록을 필터링합니다.
- 수목 인증 시스템: 수목별 인증 유무, 인증 기관, 인증 날짜를 관리합니다. 관리자가 개별 수목에 인증을 부여하거나 해제할 수 있으며, 인증된 수목은 별도로 필터링하여 조회할 수 있습니다.
- 수목 관리 이력(TreeManagement): 수목별 관리 활동 이력을 기록하고 추적합니다. 관리자가 관리 이력을 등록·수정·삭제하며, 시간순 조회를 통해 수목의 관리 내역을 파악할 수 있습니다.
- 좋아요 및 조회 기능: 사용자가 관심 있는 수목에 좋아요를 등록/해제할 수 있으며, 수목 상세 조회 시 조회수가 자동으로 집계됩니다. 좋아요 수와 조회수를 기반으로 인기 수목을 파악할 수 있습니다.
- 엑셀 대량 등록:
Apache POI기반의 엑셀 파일 업로드를 통해 수목 데이터를 대량으로 등록합니다. 엑셀 템플릿 파일을 제공하여 데이터 형식을 표준화하며, 업로드 이력을 배치 로그로 관리합니다. - 배치 처리(trees-batch): 별도의
Node.js배치 모듈로 DB의 전체 수목 목록을 JSON으로 변환하여AWS S3에 업로드합니다. 클라이언트 앱에서 빠른 지도 렌더링에 활용됩니다. - 약관 관리: 이용약관을 추가·수정·삭제할 수 있으며, 회원가입 시 필수 약관 동의 여부를 검증합니다. 약관 유형별 분류와 검색 기능을 제공합니다.
- 관리자 대시보드 API: 회원 관리(정지 처리), 수목·수종 관리, 엑셀 업로드, 약관 관리, 배치 이력 조회 등 서비스 운영에 필요한 관리자 전용 API를 별도로 제공합니다.



