팀 프로젝트2026.03 — 2026.05코드잇

위리브

아파트 관리 · 입주민 소통 플랫폼

아파트 관리사무소와 입주민이 공지 · 민원 · 주민투표로 소통하는 서비스의 백엔드를 맡았다. 최고 관리자 · 관리자 · 입주민이 아파트마다 다른 권한을 갖는 인증 · 승인 흐름과 실시간 알림, DB 스키마, CI · 배포 자동화를 만들었다.

GitHub ↗서비스 보기 ↗

위리브 키 비주얼 — 입주민 공지사항 화면과 관리자 민원 관리 화면

한눈에 보기

기간
2026.03 — 2026.05
팀
코드잇 클라우드 기반 Node.js 백엔드 부트캠프 팀 프로젝트
내 역할
백엔드 — 팀 저장소 커밋 63건 중 40건, PR 27건 작성
기술
TypeScript · Express 5 · PostgreSQL · Prisma · Socket.io · Jest · AWS(EC2 · S3)

직접 만든 기능

  • 초기 DB 스키마와 마이그레이션 — 유저 · 입주민 · 게시판 · 투표 관계
  • 인증 API(회원가입 · 로그인 · 토큰 재발급)와 역할별 가입 승인
  • 실시간 알림 — Socket.io 방 단위 발송, SSE 수신
  • 프로필 이미지 업로드(S3, 이후 Cloudflare R2로 전환)
  • CI 초기 설정 · EC2/PM2 배포 자동화 · Swagger 명세 · 아파트 API

화면

배포 서버가 종료돼, 팀 저장소를 로컬에서 띄우고 데모 계정으로 가입 · 승인 · 로그인해 찍은 화면. 표 · 레이아웃은 로컬에서만 반응형으로 보정했다

입주민 사용 흐름 영상 · 25초

  • 입주민 회원가입

  • 입주민 공지사항

  • 주민투표

  • 관리자 민원 관리

  • 입주민 가입 승인

입주민 회원가입1 / 5

위리브 입주민 회원가입 화면 — 입주민 정보 입력과 아파트 · 동 · 호수 선택

흐름

가입 승인 흐름

  1. PENDING승인 대기
  2. APPROVED승인 · 로그인 가능
  • ADMIN 가입 → SUPER_ADMIN 승인관리자는 아파트 신청과 함께 가입하고, 최고 관리자 방으로 가입 알림
  • USER 가입 → ADMIN 승인입주민은 아파트 · 동 · 호를 골라 가입하고, 그 아파트 관리자 방으로 가입 알림
  • PENDING → REJECTED거절된 계정은 관리자가 한 번에 정리
  • 다른 아파트 ADMIN → 차단다른 아파트 관리자의 승인 시도와 권한 밖 API 호출은 막음

승인은 한 단계 위 역할만 할 수 있고, 관리자는 자기 아파트 입주민만 승인한다.

문제 해결 과정

아파트 · 역할마다 다른 권한 — 인증과 승인 흐름

  1. 문제

    최고 관리자 · 관리자 · 입주민이 아파트마다 다른 권한을 가져, 다른 아파트 관리자가 남의 입주민을 승인하거나 권한 밖 API를 부르면 안 됐다

  2. 해결 — 무엇을 바꿨나

    가입 상태(승인 대기 · 승인 · 거절)와 역할을 나누고, 승인은 한 단계 위 역할만, 관리자는 자기 아파트 입주민만 할 수 있게 했다. 토큰은 httpOnly 쿠키로 주고, 재발급 토큰은 재발급 경로로만 보내지게 했다

  3. 결과

    Jest · Supertest 통합 테스트 8가지(가입 · 중복 가입 · 로그인 · 입주민 승인 · 다른 아파트 승인 차단 · 관리자 승인 · 권한 밖 호출 차단 · 거절 계정 정리)로 권한 규칙을 고정했다

실시간 알림 — 받을 사람에게만

  1. 문제

    가입 신청 · 공지 · 민원이 생기면 알맞은 사람에게만 바로 알려야 했고, 클라이언트가 알림을 주기적으로 조회하는 방식은 요청이 계속 쌓였다

  2. 해결 — 무엇을 바꿨나

    알림은 받는 사람마다 DB에 저장한 뒤 Socket.io 방(사용자 · 아파트별 관리자 · 최고 관리자)으로 보냈다. 반복 조회는 연결 하나를 유지하는 SSE로 바꿔 서버가 30초마다 읽지 않은 알림을 보내고, 연결이 끊기면 타이머를 정리하게 했다

  3. 결과

    아파트가 달라도 관리자 알림이 섞이지 않고, 클라이언트는 연결 하나로 알림을 받는다

설계 결정

  • DB 스키마 설계

    초기 스키마와 마이그레이션을 맡아 유저 · 입주민 관계, 게시판 · 투표 테이블을 정리했다.

  • 이미지 업로드

    프로필 이미지는 파일명에 UUID를 붙여 충돌을 막고, DB에는 키만 저장해 URL은 응답에서 조합했다. 이후 저장소를 S3에서 Cloudflare R2로 바꿨다.

  • CI · 배포 자동화

    GitHub Actions CI를 처음 설정하고, main에 머지하면 EC2에 배포해 PM2로 재시작하게 했다. 서버 접속 정보와 AWS 키는 GitHub Secrets로 관리했다.

  • API 문서

    Swagger로 인증 · 사용자 · 알림 API 명세를 작성해 프론트엔드와 맞췄다.

검증

  • 인증 통합 테스트 8가지

    Jest · Supertest · Prisma로 가입부터 승인 · 권한 차단 · 거절 계정 정리까지 실제 DB에서 확인했다.

  • CI

    PR을 올리면 GitHub Actions가 검사를 돌리도록 저장소 초기에 설정했다.

← 프로젝트 목록으로