LG U+ 유레카 부트캠프 미니 프로젝트
프로젝트 기간 : 25.05.08 ~ 25.05.16
유레카그램은 유레카 부트캠프 참여자들만을 위한 비공개 커뮤니티 피드형 SNS 입니다.
- 유레카 부트캠프 훈련생만 참여할 수 있는 사적이고 안전한 커뮤니티 공간
- 일상, 생각, 경험 등 훈련생만의 이야기를 자유롭게 나눌 수 있는 피드형 SNS
- 동료 간 친밀감과 신뢰를 쌓아 자연스러운 관계 형성
- 훈련 기간뿐만 아니라 수료 이후에도 이어지는 사적인 네트워크 유지
- 외부 시선 없이 편하게 소통할 수 있는 비공개 전용 공간 제공
- 회원 인증을 거친 비공개 커뮤니티 운영
- 사진, 글 등 다양한 형식의 개인 피드 업로드 및 공유
- 댓글 기능을 통한 가벼운 대화와 피드백
- 모임, 약속, 개인 근황 등 훈련생 일상 공유
- 나만의 기록과 추억을 한 곳에서 모아볼 수 있는 개인 아카이브 기능
- 관리자 페이지를 통한 커뮤니티 품질 유지
| 소속 | 이름 | 역할 | 주요 담당 업무 및 책임 |
|---|---|---|---|
| 백엔드/프론트엔드 |
![]() 서보인 @sbi1024 |
팀장 | 프로젝트 총괄, 프론트엔드 개발 |
![]() 문태신 @taeaeaexin |
팀원 | 일반 사용자 피드 API 개발 | |
![]() 박소연 @so-yeon1 |
팀원 | 관리자 API 개발 |
- Front End
- HTML5
- JavaScript
- CSS3
- Bootstrap
- Back End
- Java
- Spring Boot
- Spring Security
- JWT Token
- MySQL
- Gradle
- Spring Data JPA
- QueryDSL
- JUnit
- 개발 도구 (Tool)
- IntelliJ IDEA
- GitHub
- Postman
- http://localhost:8081
- http://localhost:8082
- 테스트용 계정
테스트 사용자 계정1 : active1@naver.com / 1234 테스트 사용자 계정2 : active2@naver.com / 1234 테스트 사용자 계정3 : active3@naver.com / 1234 테스트 관리자 계정1 : admin@naver.com / 1234
- 사용자는 이메일, 비밀번호, 이름, 닉네임, 전화번호 등의 정보를 입력하여 회원가입할 수 있다.
- 가입된 사용자는 이메일/비밀번호로 로그인하여 JWT 토큰을 발급받는다.
- 로그인 성공 시 토큰은 이후 API 호출에 사용되며, 인증 실패 시 접근이 제한된다.
- 신규 가입 사용자는 기본적으로 승인 대기 상태이며, 관리자가 승인하기 전까지 로그인할 수 없다.
- 사용자는 피드를 작성할 수 있으며, 여러 장의 이미지를 업로드할 수 있다.
- 피드 수정 시 기존 이미지를 유지하거나 새로운 이미지를 추가할 수 있다.
- 피드는 조회, 상세 조회, 수정, 삭제가 가능하다.
- 피드 목록 조회는 무한스크롤(페이징)과 닉네임 필터링을 지원한다.
- 이미지 파일만 업로드 가능하며, 다른 형식의 파일 업로드 시 예외가 발생한다.
- 사용자는 자신의 피드만 모아볼 수 있는 “내 피드” 페이지를 조회할 수 있다.
- 사용자는 특정 피드에 댓글을 작성할 수 있다.
- 작성된 댓글은 조회 및 삭제가 가능하다.
3.4.1 회원 관리
- 관리자는 ROLE_ADMIN 권한이 있어야만 관리자 페이지에 로그인할 수 있다.
- 관리자는 사용자 목록을 조회하고, 닉네임 검색으로 특정 사용자를 찾을 수 있다.
- 관리자는 사용자의 상태를 승인, 차단, 차단 해제로 변경할 수 있다.
3.4.2 피드 관리
- 관리자는 사용자의 피드를 조회 및 삭제할 수 있다.
3.4.3 댓글 관리
- 관리자는 사용자의 댓글을 조회 및 삭제할 수 있다.
gantt
title 유레카그램 개발 일정
dateFormat YYYY-MM-DD
axisFormat %m-%d
section 기획
주제 선정, 요구사항 정리 :done, 2025-05-08, 3d
section 설계
디자인 설계 및 ERD 설계 :done, 2025-05-09, 3d
section 구현
회원 관리 기능 구현 :done, 2025-05-12, 1d
사용자 기능 구현 :done, 2025-05-13, 1d
관리자 기능 구현 :done, 2025-05-14, 1d
section 마무리
최종 발표 준비 :done, 2025-05-15, 1d
최종 발표 :done, 2025-05-16, 1d
| 로그인 페이지 | 회원가입 페이지 |
![]() |
![]() |
| 메인 페이지 (피드 목록) | 피드 작성 페이지 |
![]() |
![]() |
| 피드 상세 페이지 | 피드 수정 페이지 |
![]() |
![]() |
| 내 피드 페이지 | 관리자: 사용자 관리 페이지 |
![]() |
![]() |
HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory경고성 로그 문구 출력- 일부 부모 엔티티가 누락되거나, 페이지 크기보다 적은 데이터가 조회되거나, 중복된 부모 엔티티가 나타나는 문제가 발생
- DB에서 limit은 “행(row)” 기준으로 적용됨
- 1:N fetch join 시, 부모 엔티티가 N개의 자식을 가지면 곱해진 행 개수만큼 결과가 생성됨
- limit이 이 곱해진 행에 적용되다 보니, 부모 기준 페이징이 깨짐
- JPA는 이 조합을 공식적으로 지원하지 않으며, 하이버네이트는 경고를 출력함
- Querydsl에서
fetch join대신limit이 정상 동작하는 방식으로 쿼리 구조 변경 - ID 기반 2단계 조회 방식으로 변경
- 1차 쿼리 – feed 엔티티의 id 목록만 페이징 조회
- 2차 쿼리 – id 목록으로, 연관 데이터 조회
- Image resizing 처리 로직을 구현하지 못해 아쉬움
- 좋아요 기능을 제외했지만, 추후 보니 추가했으면 더 나았을 것 같아 아쉬움
- 댓글 필터링 기능을 구현하지 못한 점이 아쉬움
- 내 Feed 조회 시 Paging 처리를 하지 않아 아쉬움
- 사용자 관리 페이지에서 목록 정렬 기능을 고려하지 않은 점이 아쉬움
- 신고 기능을 구현하지 못해 아쉬움
- 기능적으로 도전적인 부분이 적었던 점이 아쉬움
- Fetch join과 Limit Query 관련 로직 개선 필요성을 느낌
- 예외 상황과 경계 조건에 대한 테스트 커버리지가 부족했던 점이 아쉬움










