[Control Tower] 개발 및 운영 회고
·
Projects/Team Projects
1. 프로젝트 개요한 줄 소개: "복잡한 항공 인력 스케줄링과 인사 행정을 한눈에 관리하는 SaaS 플랫폼"개발 기간: 2026.01.06 - 2026.03.03 (팀 프로젝트)기술 스택: Java, Spring Boot, React, MySQL, AWS (EC2), Spring AI, Nginx주요 기능: 대시보드를 통한 실시간 인력 현황 모니터링ERD 설계를 기반으로 한 체계적인 인사 데이터 관리Spring AI를 활용한 명함 인식 회원가입 및 이미지 기반 근태 정정 신청AWS를 활용한 안정적인 클라우드 배포2. 나의 역할이번 프로젝트에서 형상관리자와 풀스택 개발자 역할을 겸임했습니다.Frontend: 전체적인 프론트엔드 UI/UX 구현 (React)Backend: 근태/휴가 관리 시스템, 건강 프로..
[Control Tower]Spring Boot + AWS RDS + Nginx 배포기: 삽질하며 배운 인프라의 중요성
·
Projects/Team Projects
🧐 왜 EC2와 RDS를 분리했는가?처음 배포를 구상할 때 EC2 한 대에 모든 것을 넣을 수도 있었지만, 실제 상용 서비스 수준의 아키텍처를 지향하며 **컴퓨팅(EC2)**과 **데이터 저장(RDS)**을 분리했습니다.보안: DB를 사설망에 격리하고 EC2의 보안 그룹을 통해서만 접근을 허용하여 데이터 노출 위험을 줄였습니다.가용성: 서버가 다운되어도 데이터는 안전하게 보존되며, RDS의 자동 백업 기능을 활용할 수 있기 때문입니다.확장성: 트래픽이 몰릴 때 WAS와 DB의 자원 점유를 분리하여 성능 저하를 방지했습니다.🛠 배포 아키텍처: Nginx 리버스 프록시와 보안사용자가 api.도메인으로 접속하면 Nginx가 이를 받아 내부의 **8080 포트(Spring Boot)**로 넘겨주는 리버스 프..
[Control Tower] AWS S3 + CloudFront로 React 앱 정적 배포하기 (보안과 성능 최적화)
·
Projects/Team Projects
1. 도입부: "왜 S3 단독 배포가 아닌 CloudFront인가?"React 프로젝트 빌드 파일을 S3에 올리고 '정적 웹 사이트 호스팅'을 켜는 것만으로도 배포는 가능합니다. 하지만 'Control Tower'와 같은 SaaS 서비스를 운영하기에는 다음과 같은 한계가 있었습니다.보안 이슈: S3 단독 호스팅은 HTTP만 지원하여 데이터 전송 시 보안에 취약합니다.속도 문제: 특정 리전에만 데이터가 존재하여 글로벌 사용자에게 일관된 속도를 제공하기 어렵습니다.비용과 효율: 데이터 전송료(Data Transfer Out)와 캐싱 부재로 인한 비효율이 발생합니다.이를 해결하기 위해 **CloudFront(CDN)**를 결합하여 HTTPS 보안과 글로벌 캐싱 성능을 동시에 확보했습니다.2. 아키텍처 설계 및..
[Control Tower] Spring AI로 구현한 항공사 사원 가입 자동화 (명함 OCR & 프롬프트 엔지니어링)
·
Projects/Team Projects
🧐 배경: "입사 첫날의 번거로운 회원가입을 1초 만에"항공사 HR SaaS인 'Control Tower' 프로젝트를 진행하며 가장 신경 쓴 부분 중 하나는 사용자 경험(UX)입니다. 기업용 서비스 특성상 이름, 부서, 직급 등 입력해야 할 정보가 많았고, 이는 신규 입사자에게 다소 피로한 첫인상이 될 수 있었습니다.여기서 아이디어를 얻었습니다. "신규 직원이 이미 발급받은 명함을 찍기만 하면, 모든 정보가 자동으로 채워지면 어떨까?" 단순히 기능을 추가하는 것을 넘어, 서비스의 전문성을 높이는 '스마트 온보딩'을 기획하게 되었습니다.🛠 기술적 선택: 왜 Tesseract 대신 'Spring AI'인가?처음에는 전통적인 OCR 라이브러리(Tesseract 등)를 검토했지만, 두 가지 결정적인 한계가 ..
[Control Tower] Spring AI(Gemini)로 근태 증빙서류 자동 완성(OCR) 구현하기 🚀 (Zero-Click UX 적용기)
·
Projects/Team Projects
🎯 도입 배경: 직원의 귀찮음을 AI로 해결할 수 없을까?항공사 HR SaaS 서비스인 'Control Tower'를 개발하면서 근태 정정 신청 기능을 구현하고 있었습니다. 직원이 지각이나 결근을 했을 때, 대중교통 지연 확인서나 병원 진단서 같은 '증빙 서류'를 제출해야 한다.기존 시스템은 직원이 1) 캘린더에서 날짜를 고르고 2) 신청 폼에 들어가서 3) 출퇴근 시간과 사유를 수기로 적은 뒤 4) 서류를 첨부하는 번거로운 과정을 거쳐야 했다."어차피 서류에 날짜, 시간, 사유가 다 적혀있는데 AI가 알아서 읽고 폼을 채워주면 안 될까?" 이 작은 물음에서 출발하여, Spring AI(Gemini)를 활용한 멀티모달 OCR 기능을 도입하고 프론트엔드 UX까지 전면 개편한 과정을 공유한다.🛠️ Ste..
[Control Tower] 2차 개발 구현 계획(Spring Ai & OCR)
·
Projects/Team Projects
1. 구현 계기: "사용자의 번거로움을 어떻게 줄일 수 있을까?"이전 프로젝트에서는 PDF를 활용한 기능을 구현해 보았으나, 이번 '근태 정정 신청' 기능을 개발하며 새로운 고민이 생겼습니다.기존 방식은 증빙 자료(이미지)를 필수로 제출하더라도, 그 안의 세부 내용은 사용자가 일일이 수동으로 입력해야 하는 번거로움이 있었습니다. 저는 이 과정에서 "사용자가 이미지를 업로드하면 시스템이 자동으로 내용을 읽어주면 어떨까?"라는 아이디어를 떠올렸고, 이를 위해 Spring AI를 도입하게 되었습니다.2. Spring AI란?Spring AI는 자바 개발자들이 생성형 AI 기능을 애플리케이션에 쉽고 빠르게 통합할 수 있도록 돕는 스프링 프레임워크 기반의 프로젝트입니다. 파이썬 중심의 AI 생태계를 스프링의 익숙..
[Control Tower] 1차 개발 회고: 협업의 가치와 성장을 기록하다
·
Projects/Team Projects
🗓️ 개발 일정UI/UX 디자인 및 Frontend 구현: 2026.01.08 ~ 2026.01.22Backend API 개발: 2026.01.23 ~ 2026.02.06💻 내가 담당한 역할 (My Role)이번 프로젝트에서 항공사 전용 HR SaaS의 뼈대와 핵심 근태 관리 로직을 담당했습니다.1. Design & UI ImplementationFigma Design: 서비스 전체 UI 설계 및 프로토타이핑Frontend Development: Figma 결과물을 바탕으로 JSX 및 styled-components 구현Common Components: Header, Sidebar, Footer 등 공통 레이아웃 제작2. Backend Development (Attendance & Leave)Empl..
[Control Tower] 개발 효율은 AI로, 팀 성장은 믿음으로 (Cursor, DDD, Git 회고)
·
Projects/Team Projects
오늘은 멘토링, 팀 프로젝트, 기술 면접 준비까지 꽉 찬 하루였다. 단순히 코드를 짜는 행위를 넘어, 개발 효율을 극대화하는 방법과 팀원과 함께 성장하는 태도에 대해 깊이 고민했던 하루를 기록해본다.1. 개발 효율과 아키텍처 (Cursor & DDD)🤖 AI 활용: Cursor 공통 프롬프트 제작팀원들 중 AI에게 질문하는 것(프롬프트 작성)을 어려워하는 분들이 있어, 제미나이(Gemini)와 대화하며 우리 프로젝트에 딱 맞는 'Cursor 공통 프롬프트'를 완성했다.이 프롬프트를 팀에 공유하고 적용해보니, 요구사항 분석(Gap Analysis) → 백엔드 구현 → 프론트엔드 리팩토링으로 이어지는 흐름이 통일되면서 개발 능률이 눈에 띄게 높아졌다. 도구 하나만 잘 세팅해도 개발 경험(DX)이 달라진다...
[Control Tower] 프론트엔드 혼자서 이틀 만에 백엔드 API 명세서 역설계하기 (feat. AI)
·
Projects/Team Projects
현재 진행 중인 '항공사 HR SaaS 프로젝트(Control Tower)'의 프론트엔드 로직을 고도화하고, 팀원들과의 효율적인 협업을 위해 API 명세서를 재정비하는 시간을 가졌다.특히 슈퍼 관리자와 일반 직원의 테마를 분리하는 작업과, AI를 활용해 프론트엔드 코드에서 백엔드 명세를 역추출하여 단기간에 문서를 완성한 경험을 정리해 본다.1. 멀티 테마(Theme) 적용: 역할에 따른 UI 분리 전략SaaS의 특성상 사용자가 '플랫폼 관리자(Super Admin)'**인지 '입점 항공사 직원(User/Admin)'인지에 따라 UI 경험이 달라야 했다. 기존에는 모든 페이지에 일괄적인 스타일이 적용되어 역할 구분이 모호하다는 이슈가 있었다.해결: 유저 권한에 따라 테마를 동적으로 분기 처리Control ..
[Control Tower] Git 충돌 해결부터 사이드바 권한 분리까지
·
Projects/Team Projects
오늘은 팀 프로젝트를 진행하며 **형상 관리자(Configuration Manager)**로서 겪었던 Git 이슈들과, 프론트/백엔드 초기 세팅 과정에서 해결한 문제들을 정리해 본다.1. 🛠️ Git 형상 관리: .gitignore가 중요한 이유프로젝트 초반, 팀원들의 개발 환경(IDE, OS) 차이와 민감한 정보 파일 때문에 Git 충돌이 빈번하게 발생했다. 특히 Gradle 빌드 파일들이 계속 충돌을 일으켜 배포 흐름이 끊기는 문제가 있었다.🚨 문제 상황 (Trouble)보안 이슈: DB 비밀번호 등이 담긴 application_secret.yaml 파일이 실수로 원격 저장소(Remote Repo)에 올라갈 뻔함.빌드 충돌: 팀원마다 로컬 경로가 다른데 .gradle/ 캐시 파일이나 build/ ..