LandlordOS 구축: Next.js 16을 활용한 현대적인 부동산 관리 시스템

발행: (2026년 1월 14일 오전 10:08 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

소개

저는 최근에 LandlordOS를 출시했습니다. 이 시스템은 소규모~중규모 임대인(5–50대의 임대 유닛)을 위해 설계된 부동산 관리 시스템입니다. 여러 임대인과 이야기를 나눈 후, 공통된 문제점을 발견했습니다: 그들은 두 극단 사이에 끼어 있었습니다:

  • 엔터프라이즈 소프트웨어 – 월 $200 이상이며, 그들이 절대 사용하지 않을 기능들을 포함하고 있습니다.
  • Google Sheets – 다루기 힘들고 오류가 발생하기 쉽습니다.

LandlordOS는 그 중간에 위치하는 것을 목표로 합니다: 일상 사용에 충분히 간단하면서도 실제 비즈니스 운영을 처리할 수 있을 만큼 견고합니다.

Technical Stack

  • Next.js 16와 App Router (서버‑사이드 렌더링)
  • TypeScript를 사용한 엔드‑투‑엔드 타입 안전성
  • **PostgreSQL (Neon)**을 이용한 신뢰성 높은 데이터 저장
  • Drizzle ORM을 통한 타입‑안전 데이터베이스 쿼리
  • NextAuth.js v5를 이용한 인증
  • Vercel을 사용한 배포 및 Edge Runtime

핵심 기능

  • 자산 관리
    • 상세 정보를 포함한 여러 부동산 추적
    • 부동산 내 개별 유닛 관리
    • 점유 상태 및 가용성 모니터링
  • 세입자 관리
    • 세입자 연락처 정보 저장
    • 세입자를 특정 유닛에 연결
  • 임대 관리
    • 시작/종료 날짜가 포함된 임대 계약 추적
  • 결제
    • 결제 기록 (금액, 날짜, 방법)
    • 세입자별 결제 내역 보기
    • 미지불 잔액 추적
  • 정비 요청
    • 문제 제출 및 추적
    • 우선순위 수준: 낮음 / 보통 / 높음 / 긴급
    • 상태 추적: 대기 중 / 진행 중 / 완료 / 취소됨

보안

보안은 최우선 과제였습니다. 구현된 조치는 다음과 같습니다:

export function validateCsrfToken(token: string, cookieToken: string): boolean {
  // implementation...
}

인증 엔드포인트에 대한 속도 제한

await authLimiter.check(5, identifier); // 5 requests per 15 minutes

XSS 및 SQL 인젝션 방지

// Example of parameterized query with Drizzle ORM
const result = await db
  .select()
  .from(payments)
  .where(eq(payments.id, sanitizedId));

공개 라우트 우회

if (isPublicRoute) {
  // Skip authentication and DB calls in Edge Runtime
  return NextResponse.next();
}

테스트

Comprehensive testing ensured quality:

  • 31개의 단위/통합 테스트 covering:
    • 사용자 인증 (회원가입, 로그인, 비밀번호 검증)
    • 부동산, 세입자 및 유닛 관리
    • 결제 기록
    • 유지보수 요청
    • 보안 (XSS, SQL 인젝션)
      Result: 100 % 통과율
  • 실제 사이트에서 수행된 8개의 엔드‑투‑엔드 테스트 covering:
    • 페이지 로드 검증
    • 사용자 회원가입 흐름
    • 로그인 기능
    • 네비게이션
    • 핵심 기능 테스트
    • Stripe 결제 연동
      Result: 프로덕션에서 100 % 통과율

배포 여정

처음에 Cloudflare PagesNetlify를 시도했지만, Server Components를 사용하는 Next.js App Router는 정적 배포와 호환되지 않습니다. Vercel은 필요한 기능을 기본적으로 지원하므로 프로젝트를 해당 플랫폼에 배포했습니다.

환경 변수

변수목적
DATABASE_URLNeon PostgreSQL 연결 문자열
NEXTAUTH_SECRET세션 암호화 키
NEXTAUTH_URL인증 콜백 URL
STRIPE_SECRET_KEYStripe 결제 처리
NEXT_PUBLIC_GA_MEASUREMENT_IDGoogle Analytics 측정 ID

미들웨어 고려 사항

미들웨어는 Edge Runtime에서 실행되며, 이 환경에는 많은 Node.js API가 없습니다. 초기에는 미들웨어가 공개 라우트를 포함한 all 라우트에 대해 auth()를 호출했으며, 데이터베이스 드라이버가 Edge 환경에서 실행될 수 없어 충돌이 발생했습니다. 해결 방법은 공개 라우트에 대해 조기 반환을 추가하는 것이었습니다 (위의 “Public Route Bypass” 스니펫을 참고하세요).

TypeScript Benefits

  • 개발 중에 수많은 버그를 잡아냈습니다.
  • 모든 것을 타입화하는 초기 비용이 즉시 보상되었습니다.
  • 100 % 테스트 통과율을 강제하여 엣지 케이스를 신중히 처리하도록 했습니다.

향후 개선 사항

  • 임대 계약서/협약서 문서 업로드
  • 이메일을 통한 자동 임대료 알림
  • 재무 보고 및 분석
  • 모바일 앱 (React Native)
  • 다국어 지원

라이브 데모

애플리케이션을 탐색하세요:

피드백 요청

저는 다음 분들의 의견을 듣고 싶습니다:

  • 실제 시나리오에서 사용하고 있는 부동산 관리자
  • 아키텍처에 관심 있는 개발자
  • 유사한 SaaS 제품을 구축하고 있는 모든 분

부동산 관리 시스템에 무엇을 추가하고 싶으신가요?

Back to Blog

관련 글

더 보기 »