한눈에
- 천문 정보·커뮤니티가 흩어져 있던 걸 한 곳에 모은 팀 프로젝트다. 나는 그중 6개 기능을 백엔드부터 화면까지 혼자 맡았다.
- 핵심은 외부 서비스를 엮어 만든 기능이다 — Gemini로 우주 용어를 아는 챗봇, DeepL로 8개 언어 뉴스 번역, Astrometry.net으로 밤하늘 사진 속 천체 분석.
- 코드는 AI를 페어로 구현했고, 나는 무엇을 어떤 규칙으로 만들지 정의하고 외부 서비스 연동 방식을 설계·검수했다.
내가 맡은 범위
천문 정보(뉴스·용어·관측)와 커뮤니티가 여기저기 흩어져 있던 걸 한 곳에 모으자는 팀 프로젝트다. 팀은 각자 원하는 기능을 골라 백엔드부터 화면까지 통째로 책임지는 방식으로 나눴다.
기획 단계에서 기능 아이디어를 여럿 냈고, 그중 6개를 직접 끝까지 만들었다 — 천문 용어집, 그 용어집을 토대로 한 우주 뉴스·다국어 번역·우주 챗봇, 그리고 밤하늘 갤러리와 AstroGram. (회원·인증, 3D 태양계, 상점, 게임, 운세 등은 다른 팀원이 맡았다.)
여기에 더해, 팀이 함께 쓰는 두 가지도 맡았다 — 천체 분석용 파이썬 서버를 스프링부트가 자동으로 띄우고 정리하는 인프라, 그리고 관측 점수에 들어가는 천문 계산(Skyfield로 태양·달의 위치·고도·위상을 구함)이다.
내가 내린 설계 결정
이 프로젝트에서 내 일은 “어떤 외부 서비스를, 어떤 규칙으로 엮어 기능을 완성할지”를 정하는 것이었다. 까다로웠던 결정들이다.
모든 것의 토대 — 우주 용어집 700개
이 플랫폼의 출발점은 우주 용어 700개를 8개 언어로 정리한 용어집이다. 일반 AI나 번역기는 “적색 왜성”, “사건의 지평선” 같은 천문 용어를 어설프게 다룬다. 그래서 용어집을 먼저 만들고, 그 위에 챗봇·뉴스·툴팁을 올렸다 — 같은 용어집을 챗봇은 답변 근거로, 뉴스 번역은 용어 통일 기준으로, 본문 툴팁은 설명 출처로 함께 쓴다. 하나를 잘 만들어 셋이 나눠 쓰는 구조다.
전문 용어를 아는 챗봇 — 모르면 검색까지
용어집의 한국어 용어·설명을 Gemini에 통째로 올려두고, 그걸 근거로 답하게 했다(RAG). 사전에 없는 일반 질문(예: “이번 유성우 언제야?”)은 실시간 구글 검색으로 메우게 했다.
AI 서버가 붐비면 답이 끊기므로, 모델을 2개 준비해 주 모델(Gemini 2.5 Flash)이 세 번까지 재시도하고도 실패하면 예비 모델(2.0 Flash)로 자동 전환하도록 정했다. 대화는 최근 10번까지 기억하게 상한을 둬, 맥락은 이어지되 비용·지연이 무한정 늘지 않게 했다.
번역기가 천문 용어를 틀리지 않게, 그리고 본문 위 툴팁
NASA 뉴스를 8개 언어로 번역해 보여주는데, 일반 번역기는 “Accretion Disk”를 엉뚱하게 옮긴다. 그래서 번역 직전에 용어집을 DeepL에 임시로 만들어 “Accretion Disk → 강착 원반”처럼 표준 용어를 강제하고, 번역이 끝나면 그 용어집을 지우도록 정했다. 같은 기사를 매번 다시 번역·요약하면 비용이 계속 드므로, 한 번 처리한 결과는 DB에 저장해 다음부터는 그대로 꺼내 쓰게(캐싱) 했다. 기사 속 이메일·전화·링크는 오역되지 않도록 원문 그대로 두는 규칙도 뒀다.
번역된 본문에서도 용어집을 쓴다 — 본문에 나온 우주 용어를 자동으로 찾아 표시하고, 마우스를 올리면 그 용어의 설명을 말풍선(툴팁)으로 띄운다. 용어마다 8개 언어 설명을 미리 심어 둬, 화면 언어를 바꿔도 추가 요청 없이 툴팁이 바로 그 언어로 바뀐다.
왼쪽: NASA 뉴스 8개 언어 번역 목록. 오른쪽: 본문 용어에 마우스를 올리면 뜨는 설명 툴팁(아래는 AI 요약).
밤하늘 사진 속 천체를 자동으로 찾아 겹쳐 표시
사용자가 올린 별 사진을 보고 “이게 무슨 별·별자리인지”를 자동으로 알려주는 기능이다. 직접 풀기 어려운 천체 위치 분석은 Astrometry.net이라는 전문 서비스에 사진 주소를 넘겨 좌표를 받아오는 방식으로 정했다. 분석을 빠르게 하려고 사진의 EXIF 정보(초점거리·GPS·촬영 시각)로 탐색 범위를 미리 좁히는 규칙을 넣었다.
받은 좌표로 별·천체 데이터베이스에서 그 사진 범위에 들어오는 천체만 골라, 각 천체의 하늘 좌표를 사진의 픽셀 위치로 환산한다. 그리고 캔버스 두 장을 겹쳐 — 한 장엔 원본 사진, 그 위 한 장엔 천체를 — 그린다: 별은 밝기에 따라 크기가 다른 점, 성운·은하는 원, 별자리는 별을 잇는 선으로. 설명이 있는 천체는 금색으로 키워 “누를 수 있다”고 표시하고, 누르면 그 천체의 이름·등급·신화·과학적 설명을 팝업으로 보여준다. 사진 위에 겹쳐 보여줄 데이터(별 5,084개·성운 등 211개·별자리 88개)는 내가 정한 기준(맨눈으로 보이는 밝기, 설명이 있는 천체)으로 추려 구성했다.
왼쪽: 분석된 사진 위에 별자리 선·별·천체를 겹쳐 그림. 오른쪽: 천체를 누르면 뜨는 상세 정보(별자리 설명).
끝없이 이어지는 대댓글, 한 번 누르면 켜지는 좋아요
AstroGram은 사진을 올리고 댓글·좋아요·팔로우를 하는 소셜 피드다(풀스택). 대댓글이 깊이 제한 없이 이어지도록, 댓글이 자기 부모 댓글을 가리키는 구조로 짰다. 좋아요·팔로우는 누르면 켜지고 다시 누르면 꺼지는 토글 하나로 통일해, 화면이 현재 상태를 몰라도 한 번의 동작으로 처리되게 했다. 피드는 스크롤하면 다음 글이 이어지고(무한 스크롤), 검색도 갖췄다.
왼쪽: 무한 스크롤 피드. 오른쪽: 게시물 상세와 답글이 들여쓰기로 구분되는 계층형 댓글.
분석용 파이썬 서버를 스프링이 알아서 띄우고 정리하게
밤하늘 갤러리의 천체 분석은 자바가 아니라 별도의 파이썬 서버(FastAPI)가 한다. 이 서버를 사람이 매번 따로 켜고 꺼야 하면 운영이 번거롭고 빠지기 쉽다. 그래서 스프링부트가 시작될 때 필요한 파이썬 패키지를 자동으로 설치하고 분석 서버를 띄우며, 종료될 때 관련 프로세스를 남김없이 정리하도록 만들었다. 관측 점수를 매일 정해진 시각에 다시 계산하는 정기 작업도 함께 걸었다.
갖춘 기능
내가 만든 6개 기능을 정리했다.
- 천문 용어집 — 700개 우주 용어를 8개 언어로 정리, 챗봇·번역·툴팁이 공유
- 우주 뉴스 — NASA 뉴스 수집, AI 요약, 용어 툴팁, 결과 캐싱
- 다국어 번역 — DeepL 동적 용어집으로 8개 언어 번역, 천문 용어 일관성
- 우주 챗봇 — 용어집 기반 RAG 답변, 실시간 검색 보완, 모델 2개 폴백, 대화 기억
- 밤하늘 갤러리 — 천체사진 자동 분석, 사진 위 천체 오버레이, 천체 상세 정보
- AstroGram — 무한 스크롤 피드, 무한 깊이 대댓글, 좋아요·팔로우, 검색
전체 기능 펼쳐 보기
천문 용어집
- 700개 우주·천문 용어를 8개 언어 용어·설명으로 정리한 데이터셋
- 챗봇(근거 사전)·뉴스 번역(용어 통일)·용어 툴팁이 같은 용어집 공유
우주 뉴스
- NASA 공식 뉴스에서 제목·이미지·본문·날짜를 자동 수집
- Gemini로 기사 핵심을 언어별로 요약
- 본문 속 전문 용어에 자동 하이라이트 + 마우스 올리면 설명 툴팁
- 한 번 번역·요약한 결과는 DB에 저장해 재사용(외부 API 비용 절감)
다국어 번역
- 영어 원문 + 한·일·중·스페인·프랑스·독일·러시아 8개 언어 번역
- 번역 직전 700개 용어집을 DeepL에 임시 생성해 천문 용어를 표준 표기로 통일
- 기사 속 이메일·전화·링크는 번역하지 않고 원문 보존
우주 챗봇
- 우주 용어 700개를 한국어로 정리한 사전을 Gemini에 올려, 그 내용을 근거로 답변(RAG)
- 사전에 없는 질문은 실시간 구글 검색으로 보완
- 주 모델 3회 재시도 후 실패하면 예비 모델로 자동 전환(서버 혼잡 대응)
- 한 대화에서 최근 10번까지 맥락 기억
- 답변이 비거나 AI 서버가 모두 실패해도 멈추지 않고 안내 문구 표시
밤하늘 갤러리
- 올린 천체사진을 Astrometry.net에 보내 촬영 방향(천구 좌표) 분석
- EXIF의 초점거리·GPS·촬영 시각으로 분석 범위를 좁혀 속도 향상
- 분석 좌표로 별·천체 DB에서 사진 범위 안 천체만 조회
- 사진 위에 별(밝기별 점)·성운(원)·별자리(선)를 겹쳐 표시
- 천체를 누르면 이름·등급·신화·과학적 설명을 팝업으로 표시
- 별 5,084개·성운 등 211개·별자리 88개 데이터로 구성(밝기·설명 기준 선별)
- 공개/비공개 저장, 본인 게시물만 수정·삭제
AstroGram (소셜 피드)
- 사진·글 게시물 작성, 본인 글만 수정·삭제
- EXIF로 장비·위치 정보 자동 채우기
- 깊이 제한 없는 대댓글(댓글이 부모를 가리키는 구조)
- 게시물·댓글 좋아요, 팔로우/언팔로우(토글)
- 스크롤하면 이어지는 피드(무한 스크롤), 최신·인기 정렬
- 본문·작성자 검색
정직하게 — 내가 한 일
이 6개 기능의 코드는 AI를 페어로 구현했다. 그리고 천체 위치 분석(Astrometry.net), 번역(DeepL), AI 답변·요약(Gemini), EXIF 읽기 같은 어려운 일은 검증된 외부 서비스·라이브러리가 맡는다.
그래서 내 진짜 일은 그 서비스들을 직접 만드는 게 아니라, 무엇을·어떤 규칙으로 엮어 하나의 제품으로 완성할지 정하고 검수하는 것이었다 — 어떤 서비스를 쓸지, 데이터를 어떤 기준으로 추릴지, 비용과 실패를 어떻게 막을지. 흩어진 외부 도구들을 실제로 동작하는 하나의 천문 플랫폼으로 합쳐낸 것이 이 프로젝트에서 내가 한 일이다.