이번 주 학습 요약
8월 1주차에는 17일차부터 21일차까지 수업을 진행했다.
이번 주는 회원 인증과 데이터베이스 설계부터 시작해 이미지가 포함된 상품 CRUD를 구현하고, 이를 팀 미니프로젝트에 적용하는 흐름으로 이어졌다.
특히 이전까지 각각 연습했던 Streamlit, FastAPI, Supabase를 하나의 서비스로 연결해 보면서 프론트엔드·백엔드·데이터베이스가 어떤 방식으로 데이터를 주고받는지 조금 더 구체적으로 이해할 수 있었다.
주 후반에는 SH 청약 공고를 편리하게 검색할 수 있는 서비스를 만들며 관리자용 공고 관리 기능과 사용자용 공고 조회 기능을 개발했다.
주요 학습 내용
1. 회원 인증과 Supabase 데이터베이스 설계
Supabase 인증 기능을 이용해 이메일 기반 회원가입과 로그인 흐름을 확인했다.
인증은 사용자가 누구인지 확인하는 기능이다. 로그인한 사용자 정보를 기준으로 즐겨찾기나 개인화된 데이터를 구분하려면 인증 정보와 서비스의 데이터베이스가 자연스럽게 연결되어야 한다.
또한 ERD를 작성하며 다음과 같은 데이터의 관계를 정리했다.
- 사용자 정보
- 관리자 정보
- 청약 공고 정보
- 사용자가 저장한 즐겨찾기 정보
테이블을 단순히 여러 개 만드는 것이 아니라, 각각의 데이터가 어떤 ID를 기준으로 연결되는지 먼저 설계하는 과정이 중요하다는 것을 배웠다.
팀원들과 Supabase 테이블과 프로젝트 폴더 구조를 공유하면서 각자 맡은 CRUD 기능을 어떻게 합칠지도 함께 논의했다.
2. 이미지 업로드와 상품 CRUD
상품 데이터에 이미지 정보를 포함하고, 등록한 상품을 다시 조회하는 기능을 실습했다.
상품 등록 과정에서는 텍스트나 숫자만 저장하는 것이 아니라 이미지 파일을 업로드하고, 저장된 이미지 경로를 데이터베이스의 상품 정보와 연결해야 했다.
상품 조회 화면에서는 데이터베이스에서 상품 정보를 가져온 뒤 이미지까지 함께 화면에 출력하도록 구성했다. 이 과정에서 다음과 같은 전체 흐름을 확인할 수 있었다.
- Streamlit 화면에서 상품 정보를 입력한다.
- FastAPI가 요청받은 데이터를 처리한다.
- Supabase에 상품 정보와 이미지 관련 정보를 저장한다.
- 저장된 데이터를 다시 조회한다.
- 상품 정보와 이미지를 Streamlit 화면에 출력한다.
비동기 처리는 이미지 업로드나 외부 서버 요청처럼 시간이 걸릴 수 있는 작업을 효율적으로 처리하는 방법이다. 이번 실습을 통해 async와 await가 단순한 문법이 아니라 서버가 요청을 처리하는 방식과 관련된 개념이라는 점을 이해했다.
3. 팀 미니프로젝트 기획과 역할 분담
주 후반부터는 지금까지 학습한 내용을 활용하는 첫 번째 팀 미니프로젝트를 본격적으로 진행했다.
우리 팀은 SH 청약 공고를 사용자가 편리하게 찾아볼 수 있는 서비스를 만들기로 했다. 이 서비스는 사이트 내부에서 청약 신청을 받는 서비스가 아니다.
사용자가 다음과 같은 조건으로 청약 공고를 검색하고, 관심 있는 공고의 원문 URL을 통해 실제 SH 신청 사이트로 이동하도록 돕는 것이 핵심이다.
- 자치구
- 최대 보증금
- 최대 월세
- 여러 조건을 함께 적용하는 복합 검색
서비스의 목적을 명확하게 정리하면서 청약 신청이나 취소 기능은 개발 범위에서 제외했다. 기능을 많이 만드는 것보다 서비스가 해결하려는 문제를 정확하게 정하는 것이 먼저라는 점을 배울 수 있었다.
Redis와 같은 빠른 데이터 저장소를 어떤 기능에 적용할 수 있을지도 검토했지만, 이번 주에는 우선 Streamlit·FastAPI·Supabase를 연결해 핵심 기능을 완성하는 데 집중했다.
4. 청약 공고 관리 및 검색 기능 구현
관리자 화면에서는 청약 공고를 등록하고 관리할 수 있도록 구성했다.
직접 관리자 계정으로 로그인한 뒤 공고 등록 화면으로 이동해 다음 정보를 입력하고 저장하는 과정을 테스트했다.
- 공고명
- 자치구
- 보증금
- 월세
- 접수 기간
- 공고 원문 URL
자치구 선택 상자와 날짜 입력 기능도 실제 화면에서 점검했다. 입력한 데이터가 Supabase에 정상적으로 저장되고, 사용자 화면에서 조회되는지 확인했다.
백엔드에서는 기존 청약 공고 조회 API의 검색 로직을 점검하고 다음 조건을 사용할 수 있도록 수정했다.
- 지역 검색
- 최대 보증금 검색
- 최대 월세 검색
- 복합 조건 검색
한 가지 조건만 검색하는 것에서 끝나지 않고 여러 조건을 동시에 전달했을 때도 올바른 결과가 나오는지 확인했다.
사용자는 검색 결과에서 필요한 공고를 확인하고, 원문 URL을 통해 실제 신청 사이트로 이동할 수 있다. 이를 통해 우리 서비스가 청약 신청 사이트가 아니라 공고 탐색을 도와주는 서비스라는 방향도 더욱 분명해졌다.
실습 및 문제 해결
이번 주 실습에서는 각각의 기능이 따로 작동하는지만 확인하지 않고 전체 데이터 흐름을 연결하는 데 집중했다.
프론트엔드 화면이 정상적으로 보여도 API 요청이 올바르게 전달되지 않거나, 백엔드에서 사용하는 필드 이름과 데이터베이스의 컬럼 이름이 다르면 기능이 제대로 작동하지 않을 수 있었다.
따라서 다음 순서로 문제를 확인했다.
- Streamlit에서 입력한 값 확인
- FastAPI로 전달되는 요청 데이터 확인
- 백엔드 검색 조건과 처리 결과 확인
- Supabase에 저장된 실제 데이터 확인
- 사용자 화면에 출력되는 결과 확인
특히 검색 기능에서는 지역, 보증금, 월세 조건을 각각 테스트한 뒤 여러 조건을 함께 적용했다. 작은 단위부터 확인하니 오류가 발생한 위치를 찾기가 쉬웠다.
관리자 화면도 로그인부터 공고 등록, 데이터 저장, 사용자 화면 조회까지 실제 사용 순서대로 테스트했다. 코드를 작성하는 것뿐만 아니라 사용자의 입장에서 직접 기능을 확인하는 과정이 중요하다는 것을 느꼈다.
KPT 회고
Keep
Streamlit, FastAPI, Supabase를 각각 분리된 기술로 보지 않고 하나의 서비스 흐름으로 연결해 본 점은 계속 유지하고 싶다.
기능을 만든 뒤 화면에서 직접 테스트하고, 문제가 생기면 프론트엔드·백엔드·데이터베이스를 순서대로 확인한 방식도 효과적이었다.
팀 프로젝트를 진행하면서 서비스의 목적과 개발 범위를 먼저 정리한 것도 좋았다. 덕분에 불필요한 청약 신청·취소 기능을 제외하고 공고 검색이라는 핵심 기능에 집중할 수 있었다.
Problem
테이블 구조, API 요청값, 응답 데이터의 형태를 동시에 확인해야 해서 처음에는 어디에서 문제가 발생했는지 찾기 어려웠다.
팀원이 각자 만든 기능을 합칠 때는 파일 구조와 변수명, 데이터베이스 컬럼에 대한 공통 기준이 필요하다는 점도 느꼈다.
또한 기능 구현에 집중하다 보면 예외 상황이나 사용자 입장에서 불편한 부분을 뒤늦게 발견할 수 있었다.
Try
앞으로는 기능을 만들기 전에 요청값과 응답값을 간단하게 문서로 정리하고, 팀원들과 같은 기준을 공유해 보려고 한다.
검색 기능은 다음과 같이 테스트 조건을 미리 나누어 확인할 계획이다.
- 검색 조건이 없는 경우
- 조건을 하나만 사용한 경우
- 여러 조건을 함께 사용한 경우
- 검색 결과가 없는 경우
- 잘못된 값이 전달된 경우
Git 작업도 기능 단위로 브랜치와 커밋을 나누어 변경 내용을 쉽게 확인할 수 있도록 연습할 예정이다.
다음 주 계획
다음 주에는 이번 주에 구현한 청약 공고 관리 및 검색 기능을 다시 점검하고, 관리자 화면과 사용자 화면의 연결을 더욱 안정적으로 다듬을 계획이다.
즐겨찾기처럼 로그인한 사용자와 연결되는 기능도 데이터베이스 관계를 정확하게 확인하면서 구현해야 한다.
기능을 추가하는 것에만 집중하지 않고 다음 항목도 함께 확인하고 싶다.
- 중복 데이터 방지
- 잘못된 입력값 처리
- 검색 결과가 없을 때의 안내
- 공고 원문 URL 이동 확인
- 팀원 코드 통합 후 전체 기능 테스트
이번 주에는 배운 기술을 실제 팀 서비스에 적용하기 시작했다는 점에서 의미가 컸다. 아직 기능을 연결하고 오류를 찾는 과정이 쉽지는 않지만, 하나의 서비스가 만들어지는 전체 흐름을 조금씩 이해하고 있다.
#AI오케스트레이션 #국비지원개발자과정 #엔코아AI캠퍼스 #Streamlit #FastAPI #Supabase #회원인증 #CRUD #팀프로젝트 #청약정보서비스
'AI 오케스트레이션 캠프 > 주간 회고' 카테고리의 다른 글
| [SK네트웍스 Family 엔코아AI캠퍼스] AI 오케스트레이션 캠프 1기_7월 5주차 회고 (0) | 2026.07.31 |
|---|---|
| [SK네트웍스 Family 엔코아AI캠퍼스] AI 오케스트레이션 캠프 1기_7월 4주차 회고 (0) | 2026.07.24 |
| [SK네트웍스 Family 엔코아AI캠퍼스] AI 오케스트레이션 캠프 1기_7월 3주차 회고 (0) | 2026.07.17 |
| [SK네트웍스 Family 엔코아AI캠퍼스] AI 오케스트레이션 캠프 1기_7월 2주차 회고 (0) | 2026.07.12 |
댓글