[portfolio](https://geonwoo.kim/ko/portfolio) › SSAFY

# 뉴집스 · 부동산 모의투자

https://geonwoo.kim/ko/portfolio/newjibs

기간: 2023.11

가상 예산으로 부동산에 투자하고 2년 뒤 수익률을 확인하는 모의투자 서비스입니다. 코로나 시기 가파르게 오른 부동산 가격에서 출발했습니다. 백엔드와 서버·CI/CD를 혼자 맡았습니다.

거래 데이터 400만 건을 약 6만 건으로 축소

- [github](https://github.com/NewJibs/newjibs-be)

팀: 2명 · 백엔드 1, 프론트엔드 1

역할: 팀장 · 백엔드 단독 · 서버·CI/CD · 모의투자·랭킹·회원·공지 · 뉴스 크롤러 스케줄링

Java 8 · Spring Boot 2.7.16 · Spring Data JPA · Spring Security · MariaDB · Redis · AWS S3 · AWS EC2 · Cloudtype · Docker · GitHub Actions

- 카카오 지도의 위·경도 클러스터 렌더링
- 부동산 정보 조회
- 랭킹
- 공지사항과 부동산 뉴스
- JWT 기반 회원 인증
- Vue.js 프론트엔드의 Netlify 배포
- GitHub Actions로 Cloudtype·EC2에 올린 Spring Boot·MariaDB·Redis 컨테이너

## 거래 데이터 축소

문제: 2016년 이후 매매 데이터가 400만 건이 넘어 렌더링이 느려졌고, 모의투자에는 전체가 필요하지 않았습니다. 코로나19가 시작된 2020년 이후 가격이 크게 오른 점을 기준으로 데이터를 줄이기로 했습니다.

해결: 2020년과 2022년 거래 중 층수와 평수가 같은 가구를 1:1로 매핑해 같은 집의 가격 변화만 남겼습니다. 같은 가구의 매매 데이터를 써야 투자 결과를 더 믿을 수 있다고 봤습니다. 400만 건이 넘던 거래 데이터가 약 6만 건으로 줄었고, 렌더링도 빨라졌습니다.

## 뉴스 크롤링 차단

문제: jsoup으로 매 정각 부동산 뉴스를 수집하자 bot으로 인식돼 서버 IP가 매번 차단됐습니다. Selenium을 도입하기보다 크롤러 안에서 해결하려 했습니다.

해결: 정각마다 호출하는 시점과 요청 헤더 때문에 bot으로 인식된다는 점을 찾았습니다. 크롤러에서 요청 헤더를 바꾸고 호출 시점에 랜덤 지연을 넣었습니다. 호출 패턴이 덜 드러나 차단을 피할 수 있었습니다.

## 아키텍처

Netlify의 Vue.js, GitHub Actions, Cloudtype, EC2와 Docker 위의 Spring Boot, MariaDB, Redis, S3를 보여 주는 뉴집스 배포 구조도

GitHub Actions를 중심으로 Netlify, Cloudtype, EC2에 배포하는 구성입니다.

도시 일러스트와 서비스 이름이 보이는 뉴집스 시작 화면

도시 일러스트를 배경으로 한 뉴집스 시작 화면

서울 지도 위에 매물이 군집으로 표시된 뉴집스 화면

지도와 선택한 매물 거래 내역이 함께 보이는 뉴집스 화면

모의투자 수익 결과 창이 열린 뉴집스 화면

부동산 뉴스 카드 목록이 있는 뉴집스 화면


[명절 잔소리 영수증](https://geonwoo.kim/ko/portfolio/jansorry) · [트리플랫 · 여행 금융 다이어리](https://geonwoo.kim/ko/portfolio/triplet)
