이전까지는 Claim 생성, 목록 조회, Evidence 추가/조회/삭제 정도까지 구현한 상태였고,
이번 Day3에서는 기능적으로 한 단계 더 나아가서 Evidence 답글 기능과 서울시장 후보 데이터 연동까지 붙여봤다.
단순히 CRUD를 하나씩 더 만드는 느낌보다는,
이제부터는 실제 서비스처럼 데이터 간 관계를 만들고, 외부 데이터를 불러와 서비스에서 활용할 수 있는 형태로 적재하는 작업을 시작한 날에 가까웠다.
이번 Day3에서 구현한 내용
이번에 구현한 핵심은 크게 두 가지다.
첫 번째는 Evidence 답글 기능이다.
기존에는 Claim에 대해 Evidence를 달 수만 있었다면, 이제는 Evidence에도 다시 답글을 달 수 있게 만들었다.
즉, 하나의 주장에 대해 근거가 달리고, 그 근거에 대해 다시 보충 설명이나 반박을 이어갈 수 있는 구조를 만든 셈이다.
두 번째는 data.go.kr 연동을 통한 서울시장 후보 데이터 적재 기능이다.
공공데이터를 직접 호출해서 후보 정보를 가져오고, 이를 로컬 환경에서 동기화할 수 있도록 API를 붙였다.
그리고 저장된 후보 데이터를 별도 조회 API로 확인할 수 있게 만들었다.
1. Evidence 답글 기능 구현
이번 작업에서 가장 먼저 확인한 건 “근거에도 답글이 필요하다”는 점이었다.
처음에는 Claim 아래에 Evidence만 있으면 될 것 같았는데, 실제로 흐름을 생각해보면 근거 하나만으로 끝나는 경우보다 그 근거에 대한 보완 설명이나 추가 근거가 이어지는 경우가 훨씬 자연스러웠다.
그래서 이번에는 Evidence를 단순한 1단계 데이터가 아니라, 스레드처럼 이어질 수 있는 구조로 가져가기로 했다.
실제로 점검해본 결과,
프론트에서도 답글이 잘 달렸고, 백엔드에서도 답글 저장과 조회가 정상적으로 동작하는 것까지 확인했다.
이 부분은 단순히 UI에서 버튼 하나 더 만든 수준이 아니라,
이후에 부모-자식 관계를 어떻게 더 명확하게 가져갈지,
그리고 parentEvidenceId 같은 구조를 어떻게 정리할지로 이어질 수 있는 중요한 기반 작업이었다.
2. 서울시장 후보 데이터 연동
Day3의 또 다른 핵심은 공공데이터 연동이었다.
이번에는 서울시장 후보 데이터를 대상으로,
로컬 환경에서 후보 정보를 가져와 적재하는 API를 붙였다.
조회 API도 함께 만들어서 적재된 데이터를 실제로 확인할 수 있게 했다.
구현 후 확인한 API는 아래와 같다.
후보 동기화 API
POST /admin/datago/sync/candidates/seoul?sgTypecode=3
후보 조회 API
GET /candidates/seoul/mayor
실제로 로컬에서 동기화 API를 호출했을 때 아래처럼 결과가 정상적으로 나왔다.
{"inserted":4,"updated":2,"total":6}
이 결과를 보고 후보 데이터가 단순 조회만 되는 게 아니라,
새 데이터는 insert, 기존 데이터는 update되도록 동기화 흐름이 살아 있다는 것도 확인할 수 있었다.
처음에는 README에 적어둔 sync 경로로 호출했을 때 404가 떠서 경로가 잘못된 줄 알았는데,
확인해보니 원인은 경로가 아니라 @Profile("local") 이었다.
즉 이 API는 local 프로필로 서버를 띄웠을 때만 활성화되는 admin API였고,
local 프로필로 다시 실행하니 정상적으로 동작했다.
이 과정에서 단순히 “API가 안 된다”에서 끝나는 게 아니라,
컨트롤러 매핑 문제인지, 프로필 문제인지, 실행 환경 문제인지를 하나씩 확인하는 과정도 같이 경험할 수 있었다.
Day3에서 확인한 구현 상태
이번 작업을 점검하면서 실제로 확인한 상태는 아래와 같다.
- Claim 조회 API 정상 동작
- Evidence 답글 기능 정상 동작
- 서울시장 후보 조회 API 정상 동작
- 서울시장 후보 동기화 API 정상 동작
- README 내용과 실제 구현 내용 정합성 확인 완료
처음에는 “README만 수정된 건가?” 싶었는데,
실제로 서버를 띄우고 curl로 하나씩 확인해보니 Day3에서 적어둔 기능들이 실제 코드에도 반영되어 있었다.
이번 작업에서 느낀 점
이번 Day3는 단순히 기능 하나 더 붙인 날이라기보다,
프로젝트가 조금씩 서비스다운 형태를 갖추기 시작한 날에 가까웠다.
답글 기능은 데이터 구조가 단순 리스트에서 관계형 구조로 넘어가는 시작점이었고,
공공데이터 연동은 내부 데이터만 다루던 프로젝트에서 외부 데이터를 끌어와 서비스에 연결하는 첫 단계였다.
특히 이번에는 기능 구현보다도
“지금 이 기능이 진짜 구현된 상태인지”,
“README와 실제 코드가 일치하는지”,
“실행 환경 때문에 안 되는 건 아닌지”를 직접 확인하는 과정이 꽤 중요했다.
개발을 하다 보면 구현 자체보다
현재 상태를 정확히 파악하는 것이 더 중요할 때가 있는데,
이번 Day3가 딱 그런 날이었다.
다음 작업은
다음은 답글 구조를 좀 더 명확하게 다듬는 방향으로 갈 생각이다.
지금 답글은 잘 동작하지만, 내부적으로는 부모-자식 관계를 더 명확히 드러내는 구조가 있으면 이후 확장하기 더 편해진다.
그래서 다음 단계에서는
parentEvidenceId를 기준으로 구조를 점검하거나 보강하는 작업을 먼저 보게 될 것 같다.
기능이 되느냐에서 끝나는 게 아니라,
이제부터는 구조를 얼마나 명확하게 가져가느냐가 더 중요해지는 구간으로 들어가는 느낌이다.
마무리 한 줄
Day3에서는
Evidence 답글 스레드 기능과
서울시장 후보 공공데이터 동기화/조회 기능을 구현하고 점검했다.
이제 프로젝트가 단순 CRUD를 넘어서
조금씩 관계와 흐름이 있는 서비스 형태로 바뀌고 있다.
'개발' 카테고리의 다른 글
| 4화 | 댓글보다 대시보드, 그리고 전국 지도에서 서울 상세 지도까지 (0) | 2026.04.12 |
|---|---|
| Codex Mac 앱 출시! 기존 Codex CLI랑 뭐가 달라졌을까? (그리고 뭐가 좋은지) (0) | 2026.02.07 |
| 2화 | Evidence(근거) 기능 확장: 추가/조회/삭제까지 (0) | 2026.02.07 |
| 1화 | 똑바로해라 시작하기 – Spring Boot + PostgreSQL 연동, Claim API 만들고 Web Submit까지 연결 (0) | 2026.01.25 |
| 0화 | 똑바로해라 시작하기 – 바이브코딩 + Codex CLI + Warp로 올인 개발 (0) | 2025.09.27 |