동아리 프로젝트 참여
학술동아리 홈페이지 개발
소프트웨어학부 학술 동아리 TUX 홈페이지 백엔드 개발
제가 소속한 동아리인, 학술 동아리 ‘TUX’의 홈페이지를 개발하면서, Backend 개발을 담당하였습니다.
2024년 10월을 기준으로 58명의 동아리원들이 가입하여, 자료실과 갤러리 기능을 이용하고 있습니다.
기간
- 기간: 2023-07 ~ 2023-09
역할
⚙️ Backend 개발 (기여도 100%)
- 데이터베이스 인덱스 설정을 통해 성능 개선
- N+1 문제 완화를 위해 EntityGraph 적용 관련 블로그 게시글
- 게시판, 갤러리 기능 개발
- 첨부파일 업로드, 추천/비추천 기능 개발
- 스프링 시큐리티 이용 회원 및 로그인 기능 개발
🌐 Frontend 개발 (기여도 20%)
- CRA(Create React App) → Vite 빌드 도구 마이그레이션
- Redux 적용 및 API 호출 구조화
🛠️ 서버 관리 및 배포
문제 해결 및 성능 개선
인덱스 설정 및 N+1 문제 완화
문제 배경
게시판 목록을 조회하는 과정에서 데이터베이스 인덱스가 제대로 활용되지 않았고, 댓글과 회원 정보를 개별적으로 조회하는 N+1 문제가 발생하고 있었음. 이로 인해 주요 조회 쿼리의 응답 속도가 저하되고, 개별적인 DB 쿼리가 다수 발생하는 비효율적인 구조였음.
개선 방법
자주 사용되는 조회 조건에 대해 적절한 인덱스를 추가하고, JPA의 @EntityGraph
어노테이션을 활용해 게시글과 회원 정보를 Fetch Join으로 한 번에 조회하도록 개선함. 이로써 게시판 목록 조회시 회원에 대한 N+1 문제를 해결함.
결과
테스트 데이터 20만 행 기준, 게시판 조회 시간이 2.473초 → 0.007초로 약 99.67% 감소함. 또한, 기존에 회원 정보를 개별 쿼리로 조회하던 방식에서 Join 기반의 단일 쿼리로 전환하여 성능을 개선함.
댓글 수와 좋아요 수에 대해서는 여전히 N+1 문제가 존재하지만, 향후에는 이를 게시글에 집계 형태로 저장해두는 방향이 효과적일 것으로 판단함.
CRA → Vite 빌드 도구 마이그레이션
문제 배경
Create React App(CRA)이 2025년 2월 14일부로 공식적으로 deprecated 되었고, 최소한의 유지보수를 제외한 지원이 중단됨.
Vite 선택 이유
React 팀의 권장 도구 중, 설정이 간단하고 빌드 속도가 빠른 Vite가 소규모 프로젝트에 적합하다고 판단하여 선택함.
결과
CRA에서 Vite로 마이그레이션한 결과, 빌드 시간이 12.0초 → 4.2초로 약 65% 단축됨.
Redux 적용 및 API 호출 구조화
문제 배경
기존 프로젝트는 각 페이지 컴포넌트에서 useState
와 useEffect
를 사용해 개별적으로 데이터를 fetch하고 상태를 관리하고 있었음. 이로 인해 상태 관리 로직이 분산되어 코드의 일관성이 떨어지고 변경이 어려운 구조였음.
개선 방법
전역 상태 관리를 위해 Redux를 도입하고, API 호출 로직을 별도의 파일로 분리하여 재사용 가능하도록 정리함. 페이지 컴포넌트는 필요한 데이터(로그인 정보 등)를 Redux를 통해 받아 사용하도록 리팩터링함.
결과
상태 관리 흐름이 명확해지고 중복 코드가 줄임. 결과적으로 더 구조를 갖춘 프로젝트로 개선되었음.
사용 기술
- Backend:
Java
Spring
JPA
- DB:
MariaDB
- Frontend :
React
Redux
Vite
주요 기능
- 회원관리, 회원가입 및 로그인 처리
- 커뮤니티 및 자료실 기능
- 갤러리 기능
결과물


