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

# newjibs · real estate investment simulator

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

Period: 2023.11

newjibs lets users invest a virtual budget in real estate and check returns two years later. It started from the steep rise in housing prices during COVID-19. I built the backend, servers and CI/CD alone.

Sales records reduced from over 4 million to about 60,000

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

Team: 2 people · Backend 1, frontend 1

Role: Team lead · Backend (solo) · Server and CI/CD · Simulated investing, ranking, members and notices · News crawler scheduling

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

- Kakao Map cluster rendering by latitude and longitude
- Real estate information lookup
- Ranking
- Notices and real estate news
- JWT-based member authentication
- Vue.js frontend deployed on Netlify
- Spring Boot, MariaDB and Redis containers shipped to Cloudtype and EC2 by GitHub Actions

## Shrinking the sales data

Problem: Sale records since 2016 exceeded 4 million rows and slowed rendering, and simulated investing did not need all of them. Prices rose sharply after COVID-19 began in 2020, so I used that as the basis for cutting the data.

Solution: Matched 2020 and 2022 sales one-to-one by floor and unit size, keeping price changes for the same homes. I judged that sales of the same home would make the investment results more trustworthy. Sales records fell from more than 4 million to about 60,000, and rendering became faster.

## News crawling getting blocked

Problem: Collecting real estate news with jsoup on the hour got the server flagged as a bot and its IP blocked every time. I wanted to fix this inside the crawler rather than introduce Selenium.

Solution: Found that the on-the-hour timing and the request headers made the crawler look like a bot. The crawler now changes its request headers and adds a random delay before each call. With a less obvious call pattern, it stopped getting blocked.

## Architecture

newjibs deployment diagram: Vue.js on Netlify, GitHub Actions, Cloudtype, EC2, and Spring Boot, MariaDB and Redis in Docker with S3

Deployment to Netlify, Cloudtype and EC2 through GitHub Actions

newjibs start screen with a city illustration and the service name

newjibs start screen with a city illustration

newjibs map of Seoul with clustered listings

newjibs map with the sales history of a selected property listing

newjibs dialog showing simulated investment returns

newjibs screen with real estate news cards


[jansorry · holiday nagging receipts](https://geonwoo.kim/en/portfolio/jansorry) · [triplet · travel expense diary](https://geonwoo.kim/en/portfolio/triplet)
