</>동방건우 GitHub

Java · Spring · PostgreSQL · GitHub Actions

상태 로직을 구현하고,
데이터 수집을
자동화합니다

Spring 기반 팀 프로젝트에서는 분양·포인트 상태 로직을 구현했고, 개인 프로젝트에서는 외부 API 수집을 GitHub Actions와 정적 JSON 구조로 분리했습니다.

Portfolio Points 주요 구현 흐름
  1. PETIQUE신청·승인·완료로 이어지는 분양 상태 흐름 구현과 PostgreSQL/Supabase/Render 후속 개선
  2. Review Tag출석·퀘스트·상점·관리자 지급에서 발생하는 포인트 변경을 공통 기준으로 처리
  3. Data ProjectsAPI 키가 브라우저에 노출되지 않도록 Actions 수집과 JSON 조회를 분리
ClientReact / JSP
BackendSpring / Node Script
DataPostgreSQL / JSON
DeployRender / Pages
2Spring 기반 서비스
3외부 API 데이터 자동화
5공개 프로젝트
CI/CDActions 기반 수집·배포

Backend Focus

서비스 로직과 데이터 자동화를 배포 흐름까지 연결합니다

기능 구현에서 멈추지 않고, 상태 로직·데이터 수집·배포 설정이 하나의 흐름으로 이어지도록 구성했습니다.

01

상태 전이와 서비스 로직

분양 신청→승인→완료, 출석→포인트→상점처럼 사용자 행동에 따라 이어지는 상태 전이를 서버 로직으로 구현했습니다.

PETIQUE · Review Tag
02

DB 전환과 실행 환경

PETIQUE 후속 버전을 PostgreSQL, Supabase, Render 환경에서 실행되도록 SQL 문법과 실행 설정을 보완했습니다.

SQL patch · HikariCP · JVM/Tomcat
03

API 수집 자동화

외부 API 호출을 브라우저에서 분리하고, GitHub Actions가 데이터를 수집·검증·JSON화하도록 구성했습니다.

KAMIS · OpenDART · Opinet

대표 개선 사례

PETIQUE: 분양 상태 로직과 PostgreSQL 배포 환경을 보완한 사례

기존 JSP/Spring MVC 팀 프로젝트에서 분양 기능을 맡았고, 후속 버전에서는 PostgreSQL/Supabase/Render 환경에 맞춰 SQL, 이미지 업로드, 실행 설정을 보완했습니다. 신청·승인·완료로 이어지는 상태 전이가 배포 환경에서도 동작하도록 구성했습니다.

PETIQUE 서비스 화면

시연 페이지는 포트폴리오용 데이터로 구성했으며, 후속 개선 범위는 개선 메모에 별도로 기록했습니다.

Before

기존 팀 프로젝트

  • Oracle 기반 JSP/Spring MVC 구조
  • 분양 신청·승인·거절·완료 기능 구현
  • 상태별 버튼과 권한 분기 처리
After

후속 개선

  • PostgreSQL/Supabase 기준 SQL 보완
  • Render 환경에 맞춘 pool/thread/JVM 설정
  • 이미지 업로드, CSRF, BCrypt, 입력값 정제 점검
담당 역할분양 리스트·상세·신청자 관리 화면, 신청/승인/완료 상태 흐름 구현
중점 구현상태 전이, 권한 검증, 소유자 변경, 후기 연결을 서버 로직 기준으로 구현
개선 포인트DB 문법 차이, 원격 이미지 업로드, 제한된 배포 리소스에 맞춰 실행 설정을 조정
범위 구분 팀 프로젝트 GitHub는 팀 프로젝트에서 맡은 분양 기능 범위를, 개선 메모는 PostgreSQL/Supabase/Render 후속 보완 범위를 설명합니다.

Projects

프로젝트 목록

Spring 기반 서비스 프로젝트와 신규 데이터 자동화 프로젝트를 구분해 보여줍니다.

최종 점검 · 2026.05

Spring 서비스 프로젝트

팀 프로젝트에서 맡은 서버 로직과, 이후 보완한 실행 환경·데이터 구조·배포 설정을 함께 정리했습니다.

JSP / Spring MVCPETIQUE 화면

PETIQUE

5인 팀 프로젝트 · 분양 기능 담당

반려동물 분양 게시판의 신청, 승인, 거절, 완료, 후기 연결 흐름을 담당했고, 후속 버전에서 PostgreSQL·Supabase·Render 실행 환경을 보완했습니다.

역할
분양 상태 전이, 권한별 버튼, 신청자 관리, 완료 후 소유자 변경
백엔드 포인트
서버 단 검증, PostgreSQL SQL 보완, Render 실행 설정, 원격 이미지 업로드
JavaSpring MVCJSPPostgreSQLRender
Spring Boot / ReactReview Tag 대시보드

Review Tag

파이널 프로젝트 · 포인트/상점 흐름 담당

출석, 퀘스트, 상점, 관리자 지급에서 발생하는 포인트 변경을 공통 서비스 기준으로 처리하고, 잔액 검증과 이력 저장을 함께 구현했습니다.

역할
출석·퀘스트·상점·관리자 지급에 따른 포인트 적립/차감 처리
백엔드 포인트
JWT 인증, MyBatis, 공통 포인트 처리, Oracle 기반 이력 관리
Java 21Spring BootMyBatisOracleJWT

Data Automation

신규 프로젝트 3개의 공통 연동 구조

외부 API 호출을 프론트에서 분리하고, GitHub Actions가 수집한 데이터를 정적 JSON으로 생성하도록 구성했습니다.

  1. External API
  2. GitHub Actions
  3. Node Script
  4. Validate / Normalize
  5. Static JSON
  6. React UI

신규 데이터 프로젝트

KAMIS, OpenDART, Opinet 데이터를 수집·정규화하고 정적 JSON으로 제공한 개인 프로젝트입니다.

팜프라이스 노트 화면
KAMIS API

팜프라이스 노트

농산물 가격 추이를 수집하고, 날짜·가격을 정규화해 React 대시보드에서 조회합니다.

  • Actions 수집 후 JSON 생성
  • 품목/품종 코드 fallback
  • 가격 데이터 검증
ReactViteGitHub Actions
상장노트 화면
OpenDART API

상장노트

OpenDART 공시 데이터를 정리해 상장·공모청약 일정을 조회하는 학습용 데모입니다. 투자 판단이나 청약 권유가 아닌 데이터 처리 경험을 보여주는 프로젝트입니다.

  • ZIP/XML 문서 처리
  • CP949/EUC-KR 인코딩 대응
  • 공시 문맥 기반 일정 추출
ReactAdmZipiconv-lite
리터세이브 화면
Opinet API

리터세이브

지역별 주유소 가격 데이터를 정리하고, 좌표 변환과 가격 이력 JSON을 분리해 제공합니다.

  • 인증 파라미터 fallback
  • KATEC → WGS84 변환
  • 현재 데이터와 이력 분리
Reactproj4Static JSON

Troubleshooting

문제 상황과 해결 과정

프로젝트에서 마주친 문제를 문제·조치·결과 순서로 정리했습니다.

01

Oracle → PostgreSQL 전환

문제 Oracle 기준 SQL과 실행 방식이 PostgreSQL/Supabase 환경에 바로 맞지 않았습니다.

조치 시퀀스, boolean, limit, cast, index, view 패치를 PostgreSQL 기준으로 보완했습니다.

결과 Render/Supabase 배포 구조에서 동작 가능한 후속 버전을 구성했습니다.

02

저사양 배포 환경 대응

문제 제한된 서버 환경에서는 커넥션과 스레드 수가 과하면 안정성이 떨어질 수 있습니다.

조치 HikariCP pool, Tomcat thread, JVM 옵션을 제한된 리소스에 맞게 낮춰 잡았습니다.

결과 과한 커넥션·스레드 사용을 피하는 실행 설정으로 배포 환경을 구성했습니다.

03

포인트 로직 분산

문제 적립·차감·환불·구매 흐름이 화면 기능별로 흩어지면 이력 관리가 어려워집니다.

조치 포인트 공통 처리 기준을 두고 잔액 검증과 이력 저장을 같은 흐름에서 처리했습니다.

결과 각 기능에서 발생한 포인트 변화가 같은 기준의 이력으로 남도록 구성했습니다.

04

API Key 노출 위험

문제 React가 외부 API를 직접 호출하면 키가 브라우저에 노출될 수 있습니다.

조치 GitHub Actions에서 데이터를 수집하고 정적 JSON만 공개하도록 분리했습니다.

결과 화면은 JSON 조회만 담당하고, 수집 책임은 Actions 파이프라인으로 분리했습니다.

05

OpenDART 문서 처리

문제 공시 원문은 ZIP/XML 구조와 한글 인코딩 문제가 함께 발생할 수 있습니다.

조치 AdmZip, iconv-lite로 압축과 인코딩을 처리하고 문맥 기반 추출을 구성했습니다.

결과 원문 문서 기반으로 일정 정보를 정리하는 흐름을 구성했습니다.

06

좌표·인증 파라미터 예외

문제 Opinet 응답은 인증 파라미터와 좌표 체계 처리가 필요했습니다.

조치 code/certkey/both fallback과 KATEC → WGS84 변환을 적용했습니다.

결과 지도 이동과 가격 조회에 필요한 좌표 데이터를 화면에서 활용할 수 있게 했습니다.

Development Records

프로젝트별 개발 기록

프로젝트별 기술 스택, 주요 기능, 문제 해결 과정을 한 번에 확인할 수 있도록 구성했습니다.

PETIQUE분양 흐름 담당 + PostgreSQL/Supabase/Render 후속 개선

기술 스택

Java, Spring MVC, JSP, JSTL, JdbcTemplate, PostgreSQL, Supabase, Render, Docker, ImgBB, BCrypt, CSRF

주요 기능

분양글 작성/조회, 신청, 승인, 거절, 완료, 취소, 후기 연결, 권한별 버튼, 신청자 관리, 알림·마이페이지 연계

트러블슈팅

기존 PETIQUE 프로젝트를 PostgreSQL 실행 환경에 맞춰 SQL과 설정을 보완하고, Render 환경에 맞춰 DB pool, thread, JVM 옵션을 조정했습니다.

Review Tag포인트/출석/상점 기능과 이력 관리

기술 스택

Java 21, Spring Boot, MyBatis, Oracle, Spring Security, JWT, React, Vite, Axios, Vercel

주요 기능

콘텐츠 탐색, 리뷰 작성, 퀴즈, 출석, 일일 퀘스트, 포인트 적립·차감, 상점, 인벤토리, 관리자 기능

트러블슈팅

포인트 변경을 공통 처리 기준으로 모아 잔액 검증과 이력 저장을 함께 처리하고, 출석·상점·관리자 지급 흐름이 같은 이력 기준으로 남도록 구현했습니다.

팜프라이스 노트KAMIS 가격 데이터 + 정적 JSON 배포

기술 스택

React, Vite, JavaScript, Node.js, KAMIS API, Gemini API, GitHub Actions, GitHub Pages

주요 기능

농산물 가격 추이, 기간별 그래프, 현재가·평균가·최고가·최저가, 관심 품목, AI 리포트

트러블슈팅

API Key가 브라우저에 노출되지 않도록 Actions에서 실데이터를 수집하고, 날짜·가격 정규화와 품종 코드 fallback을 구현했습니다.

상장노트OpenDART 공시 기반 일정 조회 데모

기술 스택

React, Vite, JavaScript, Node.js, OpenDART API, AdmZip, iconv-lite, GitHub Actions, GitHub Pages

주요 기능

회사명·공시명 검색, 진행 상태 필터, 일정 요약, 공시 원문 링크, 상세 모달, 다크모드

트러블슈팅

ZIP/XML 문서와 한글 인코딩을 처리하고, 공시 원문에서 청약·상장 관련 일정 정보를 문맥 기반으로 추출했습니다.

리터세이브Opinet 가격 데이터와 좌표 변환

기술 스택

React, Vite, JavaScript, Node.js, Opinet API, proj4, GitHub Actions, GitHub Pages

주요 기능

유종·지역별 최저가 주유소 조회, 가격 정렬, 페이지네이션, 카카오맵 길찾기, 가격 이력

트러블슈팅

인증 파라미터 fallback을 구성하고, KATEC 좌표를 WGS84로 변환해 지도 이동에 사용할 수 있도록 처리했습니다.

Tech Stack

프로젝트에서 실제 사용한 기술

사용 기술은 실제 프로젝트에 적용한 범위가 보이도록 그룹별로 구성했습니다.

Backend

JavaSpring BootSpring MVCSpring SecurityJSPJSTLMyBatis

PETIQUE, Review Tag의 서비스 로직과 API 구현에 사용했습니다.

Database

PostgreSQLSupabaseOracleSQLIndexDB ViewSQL Patch

PETIQUE 후속 개선은 PostgreSQL/Supabase 기준으로 보완했고, Review Tag는 Oracle 기반으로 구현했습니다.

Frontend

ReactViteJavaScriptjQueryHTMLCSS

데이터 조회 화면과 JSP 기반 화면 흐름 구현에 사용했습니다.

Data & API

KAMIS APIOpenDART APIOpinet APITMDB APIGemini APIJSONXML

외부 데이터 수집, 정규화, 정적 JSON 생성에 사용했습니다.

Deploy & Automation

GitHub ActionsGitHub PagesVercelRenderCloudflare Pages

정적 데이터 생성, 서비스 배포, 포트폴리오 배포에 사용했습니다.

Security & Quality

BCryptCSRF입력값 정제CORS환경변수 관리

인증, 입력값 처리, 배포 연결 과정에서 기본 보안 항목을 점검했습니다.

Contact

기능 구현을 실제 서비스 흐름으로 연결합니다

데모는 포트폴리오 시연용 데이터로 구성했으며, 외부 API 키와 환경변수는 공개하지 않았습니다.