You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1. 일기 작성 2. 일기 요약 AI 모델을 통한 일기 줄거리 자동 요약 3. 감정 분류 AI 모델을 통한 "주요 감정" 자동 결정 4. 주요 감정에 대한 피드백 제공
1. 공감의 글 작성 2. 악성 필터링 AI 모델을 통한 악성글 자동 분류 3. 게시글 자동 숨김 처리 4. 게시글 작성자에게 숨김 처리 알림 전송
🎯 상세 구현 내용
📌 AI 서버 연동 & 알림 처리
📌 신고 기능 & 공감 버튼
🔍 문제점 및 해결 방안💡
1️⃣ AWS EC2에서 Oracle DB 사용 중 다운 현상 발생
🔍 문제점
로컬에서 구축한 Oracle DB를 AWS 환경에서 사용하기 위해 EC2에 Docker로 직접 설치해야 했음.
하지만 Oracle 21c 버전은 프리티어 EC2의 메모리를 초과하여 지속적으로 다운되는 문제 발생.
💡 해결 방안
보다 가벼운 Oracle 11g 버전으로 다운그레이드하여 다시 구축.
11g 버전에서는 Sequence를 PK의 Default 값으로 설정하는 구문이 지원되지 않음, 이에 따라 테이블 스키마와 일부 SQL 쿼리를 수정.
EC2 요금제를 업그레이드하여 더 높은 메모리와 성능을 제공하는 인스턴스로 변경, 이를 통해 DB 안정성 확보.
Docker 볼륨을 활용하여 DB 데이터를 영구 저장하도록 구성, 이를 통해 컨테이너 재시작 시에도 데이터 유지 가능하도록 개선.
2️⃣ AI 모델 응답 지연 문제
🔍 문제점
AI 모델을 활용한 "일기의 방"과 "공감의 방" 기능에서 요청 처리 시간이 길어짐.
AI 응답이 지연되면서 기존 웹 서비스의 전체적인 성능 저하 발생.
💡 해결 방안
Spring Boot의 @Async 어노테이션을 활용하여 AI 모델 호출을 별도의 스레드에서 실행하도록 처리.
FastAPI 서버 실행을 비동기(Async) 방식으로 변경하여, Spring Boot 요청 흐름을 방해하지 않도록 개선.
이로 인해 AI 모델이 실행되는 동안에도 웹 서비스가 원활하게 동작할 수 있도록 최적화.
3️⃣ Spring Boot와 FastAPI 연동 문제
🔍 문제점
Spring Boot가 FastAPI 실행을 기다리는 동안 세션 생성보다 응답이 먼저 커밋되는 문제 발생.
응답이 커밋된 후 세션을 만들려고 하면 java.lang.IllegalStateException: Cannot create a session after the response has been committed 오류 발생.
FastAPI 프로세스 실행으로 인해 Spring Boot의 응답 흐름이 블로킹되는 현상이 원인.
💡 해결 방안
FastAPI 실행 로그를 Spring Boot에서 출력하도록 설정하여 디버깅 편의성 향상.
Spring Boot에서 FastAPI 실행을 비동기(@Async)로 처리하여 메인 스레드 블로킹 방지.
Interceptor에서 기존 세션만 조회하도록 변경하여, 응답이 커밋된 후 새로운 세션을 생성하지 않도록 로직 수정.
이로 인해 FastAPI와 Spring Boot가 안정적으로 연동되면서 세션 관련 오류 방지.
4️⃣ CORS 문제
🔍 문제점
localhost와 127.0.0.1 간 요청 시 CORS 정책으로 인해 Cross-Origin Request Blocked 오류 발생.
일부 페이지에서 요청을 보낼 때 특정 출처만 허용되도록 설정되어 있어 API 요청이 차단됨.
💡 해결 방안
서버의 Access-Control-Allow-Origin 헤더를 수정하여 두 출처(localhost, 127.0.0.1) 모두 허용하도록 변경.
Spring Boot의 CorsRegistry를 활용하여 allowedOrigins() 메서드로 허용할 출처를 명시적으로 등록.
이를 통해 CORS 문제를 해결하고, 개발 환경에서도 원활한 API 호출 가능하도록 개선.
🎯 상세페이지
홈 화면 상세보기
홈 화면
상세 기능
슬라이딩
3가지 서비스 연결
회원가입 및 로그인 상세보기
회원가입 및 로그인
상세 기능
【 회원가입 기능 】
아이디 중복 검사
닉네임 중복 검사사
【 로그인 기능 】
공감의 방 상세보기
공감의 방
상세 기능
【 공감의 방 주요 기능 】
4가지 공감의 방
(joy / sad / cheer / worry)
공감글 작성 모달
공감글 상세보기 모달
4가지 공감 버튼
(joy / sad / cheer / worry)
(본인 게시글에는 불가)
【 AI 악성글 필터링 기능 】
AI 악성글 필터링 적용
필터링 결과에 따른 글 숨김 처리
【 알림 및 신고 기능 】
숨김 처리 후 작성자에 알림 제공
신고 기능
(신고 받은 글 작성자에 알림 제공)
신고 누적수 5회 이상 숨김 처리
일기의 방 상세보기
일기의 방
상세 기능
【 일기의 방 주요 기능 】
일기 작성 및 파일 첨부
TOAST UI Editor 적용
【 AI 감정 분류 및 피드백 기능 】
AI 감정 분류 결과 제공
감정에 따른 피드백 제공
힐링의 방 상세보기
힐링의 방
상세 기능
【 힐링 플레이리스트 추천 】
크롤링으로 수집한 플레이리스트
그 날의 키워드에 따라
랜덤 플레이리스트 추천
Youtube Player API로
플레이리스트 영상 제공
【 힐링 어플 추천 】
외부 어플 추천 및 연결 링크 제공
마이페이지 상세보기
마이페이지
상세 기능
회원정보 수정
【 My Journal 】
나의 일기를 월별, 감정분류별로
최신순/오래된 순으로 확인 가능
【 My Mission 】
출석 미션과 일기 작성 미션으로
획득 성공한 별자리 확인 가능
【 My Emotion 】
작성한 일기의 감정 분포와
공감 글의 감정 분포 확인 가능
관리자 페이지 상세보기
관리자 페이지
상세 기능
【 사이트 실시간 현황 페이지 】
오늘의 사이트의 사용자 수 통계
전체 회원의 이벤트 참여도 통계
일기의 방과 공감의 방의
서비스별 감정 분포 통계
전 통계 차트 PDF 다운로드 가능
【 회원 관리 페이지 】
회원 현황 확인 및 관리
스팸 계정 일괄 차단 기능
탈퇴 계정 수정 불가
【 회원 통계 페이지 】
특정 기간별로
회원가입률 및 탈퇴율 확인 가능
【 감정 통계 페이지 】
오늘의 일기 감정분포 및
오늘의 공감의 방 감정분포 확인
전체 일기 감정 추이 및
전체 공감의 방 감정 추이 확인
전 통계 차트 PDF 다운로드 가능
【 공감글 관리 페이지 】
악성글 필터링 수동 처리 기능
공감글 일괄 처리 기능
공감글 상세 내용 확인
【 이벤트 관리 페이지 】
이벤트 등록 및 수정, 삭제 가능
【 이벤트 참여율 페이지 】
이벤트별 특정 기간(월별, 연도별)
참여율 통계 확인 가능
오늘의 이벤트 참여율 통계
분기별 이벤트 참여율 통계
💬 회고
일기의 방과 공감의 방에서 글이 등록되면 AI 모델이 동작해야하는데 예측값을 반환하는 과정에서 지연시간이 생겼다. 그래서 비동기 처리와 별도의 스레드로 작업을 하게 해서 서비스를 이용하는데 큰 지장이 없도록 구현하였다. 이 과정에서 비동기와 스레드에 대한 이해가 한층 깊어지는 계기가 되었다.
알림 기능을 구현할 때, Interceptor를 활용하여 알림 상태를 갱신하는 작업을 진행했지만, 오류가 발생하면 모든 페이지에 영향을 미치는 문제가 있어 어려움을 겪었다.
이러한 오류는 서비스 전체의 구조를 제대로 이해하지 못하면 수정하는 데 많은 시간이 소요되기 때문에, 시스템 구조에 대한 깊은 이해가 얼마나 중요한지 다시 한번 깨닫는 계기가 되었다.
또한, 팀장 역할을 병행하며 개발을 진행하다 보니 충분한 작업 시간을 확보하지 못한 점이 아쉬웠다. 하지만 팀원들을 도와주며 함께 문제를 해결하는 과정에서 많은 것을 배울 수 있었고, 그만큼 보람찬 경험이었다.