내 손안에서 펼쳐지는 스마트한 운동 생활! EasyGym은 사용자가 주변의 다양한 운동 시설(헬스장, 복싱장, 필라테스 등) 정보를 손쉽게 찾고, 예약하며, 운동 관련 정보를 활발히 공유할 수 있도록 도움을 주는 웹 서비스입니다.
사용자와 시설 업체 간의 연결을 지원하고, 운동을 사랑하는 모두를 위한 커뮤니티를 만들어갑니다!
- 회원가입 및 로그인:
- 일반 회원 가입 (이메일 인증), 로그인, 로그아웃
- 도로명 주소기반 주소 검색 API 구현
- 로그인/회원가입에 Cloudflare Turnstile CAPTCHA 검증 적용
- 시설 정보 조회 및 검색:
- 운동 시설(헬스장, 복싱, 필라테스) 리스트 및 상세 정보 조회
- 지역별, 운동 종류별 시설 검색 및 지도 기반 위치 제공 (Kakao Maps API 연동)
- 리뷰, 평점 및 신고 시스템
- 결제 시스템:
- 토스 결제 API 구현
- 결제 완료, 취소, 환불 처리
- 커뮤니티 (자유게시판, 공지사항):
- 게시글 작성, 조회 (페이징 처리), 수정, 삭제
- 게시글 내 댓글 작성, 조회, 삭제 (AJAX)
- 💬 챗봇:
- OpenRouter를 통해 Google의 Gemma LLM 모델 연동
- LLM을 사용한 챗봇 사용자 인터페이스 제공
- request 대신 stream 방식을 사용하여 한글자씩 출력하도록 설정, 딜레이 감소 및 시각적 효과
- 시설 등록 및 관리:
- 본인의 운동 시설 정보 신규 등록 (상세 정보, 이미지, 가격, 프로그램 등 입력)
- 등록된 시설 정보 관리
- 회원 관리: 일반 회원 목록 조회, 탈퇴 회원 조회
- 사업자 및 업체 관리:
- 사업자 회원 목록 조회
- 등록된 운동 시설(업체) 목록 조회 및 관리
- 콘텐츠 관리:
- 공지사항 CRUD
- 사용자 신고 내역 조회 및 관리
- 사용자 문의사항 목록 조회 및 답변
easyGym/
├── src/
│ └── main/
│ ├── java/
│ │ └── com/isix/easyGym/ # (Controller, Service, DAO, DTO)
│ │ ├── admin/ # 관리자 모듈
│ │ ├── contact/ # 문의 기능 관련
│ │ ├── detail/ # 시설 상세 정보 기능 관련
│ │ ├── freeboard/ # 자유게시판 기능 관련
│ │ ├── member/ # 회원 기능 관련
│ │ ├── mypage/ # 마이페이지 기능 관련
│ │ ├── notice/ # 공지사항 기능 관련
│ │ ├── payform/ # 결제 기능 관련
│ │ └── report/ # 신고 기능 관련
│ │
│ ├── resources/
│ │ ├── mybatis/
│ │ │ └── mappers/ # MyBatis XML 매퍼 파일 (*.xml)
│ │ │
│ │ └── static/ # 정적 컨텐츠 (css, js, images, sass)
│ │
│ └── webapp/
│ └── WEB-INF/
│ └── views/ # JSP 뷰 파일들
│ └── main.jsp
└── build.gradle
- Controller: 사용자 요청 처리, 데이터 유효성 검사, Service 계층 호출, View(JSP)에 결과 전달
- Service: 비즈니스 로직 수행, 트랜잭션 관리, DAO 계층 호출
- DAO: MyBatis와 연동하여 데이터베이스 CRUD 작업 수행
- DTO: 계층 간 데이터 전송을 위한 객체
- JSP: 사용자에게 보여지는 UI, JSTL 및 EL을 사용하여 동적 컨텐츠 표시
GET /main.do
: 메인 페이지GET /member/loginForm.do
: 일반 회원 로그인 폼POST /member/login.do
: 일반 회원 로그인 처리GET /member/operLoginForm.do
: 사업자 회원 로그인 폼POST /member/operLogin.do
: 사업자 회원 로그인 처리GET /detail/registration.do
: (사업자) 시설 등록 폼POST /detail/signUpForm.do
: (사업자) 시설 등록 처리GET /admin/memberList.do
: (관리자) 회원 목록 조회GET /detail/search.do
: 시설 검색 결과 페이지GET /detail/detail.do?detailNo={시설번호}
: 시설 상세 정보 페이지POST /payform/payformProcess.do
: 결제 처리GET /freeboard/fboardList.do
: 자유게시판 목록GET /mypage/mypageMain.do
: 마이페이지GET /notice/noticeList.do
: 공지사항 목록
EasyGym은 서버 사이드 렌더링을 위해 JSP를 주로 사용하며, 일부 동적인 기능(찜하기, 댓글 등)에는 JavaScript(jQuery)와 AJAX가 활용됩니다.
- 데이터 표시: 컨트롤러에서
ModelAndView
객체에 담겨 전달된 데이터는 JSTL을 사용하여 JSP 페이지에 동적으로 렌더링됩니다. - 동적 상호작용 (AJAX):
- 찜하기 기능: jQuery AJAX를 사용하여 엔드포인트와 비동기 통신 후, 결과를 바탕으로 버튼 UI를 업데이트합니다.
- 게시판 댓글 작성/삭제/조회: 페이지 새로고침 없이 비동기로 데이터를 처리합니다.
- Java (JDK) 17
- Gradle 8.8
- MySQL 8.0.36
- DB 덤프 파일
-
저장소 클론하기
git clone https://github.com/2jang/easyGym.git cd easyGym
-
데이터베이스 설정
- MySQL 서버에 접속하여
easygymdb
스키마(데이터베이스)를 생성합니다.CREATE DATABASE easygymdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
- 제공된 SQL 덤프 파일(
0826_easygymdb.sql
)을 사용하여easygymdb
에 테이블을 생성하고 초기 데이터를 임포트합니다.# MySQL CLI 접속 후 use easygymdb; source /path/to/0826_easygymdb.sql; # 또는 # mysql -u (사용자명) -p easygymdb < /path/to/0826_easygymdb.sql
- MySQL 서버에 접속하여
-
애플리케이션 설정
src/main/resources/application.properties
파일을 열어 아래 항목들을 환경에 맞게 수정합니다.-
데이터베이스 연결:
spring.datasource.url=jdbc:mysql://localhost:3306/easygymdb?allowMultiQueries=true spring.datasource.username=[DB 사용자명] # 예: root spring.datasource.password=[DB 비밀번호] # 예: 1234
-
캡차 설정(Cloudflare Turnstile):
turnstile.secret=YOUR_TURNSTILE_SECRET
- 사이트 키는 각 JSP의 Turnstile 위젯
data-sitekey
에 설정합니다.
- 사이트 키는 각 JSP의 Turnstile 위젯
-
-
프로젝트 빌드 (Gradle Wrapper 사용)
./gradlew build
-
Spring Boot 애플리케이션 실행
./gradlew bootRun
-
애플리케이션 접속: https://localhost:8090 (SSL 기본 설정)
- Backend Framework: Spring Boot 3.3.1, Spring MVC
- Programming Language: Java 17
- View Technology: JSP, JSTL (Jakarta EE)
- Database: MySQL
- Data Persistence: MyBatis
- Build Tool: Gradle
- Server: Tomcat
- Utility: Lombok
- Servlet API: Jakarta Servlet API
- APIs & Libraries:
- Kakao Maps API
- Dialogflow API
- Bootstrap, jQuery, Font Awesome
- 종합적인 운동 시설 정보: 다양한 조건으로 시설을 검색하고 상세 정보 확인 가능
- 커뮤니티 기능: 자유게시판을 통한 사용자 간 정보 교류
- 사업자 시설 등록: 사업자 회원이 직접 자신의 운동 시설 정보를 플랫폼에 등록
- 관리자 기능: 회원, 시설, 콘텐츠 등 서비스 운영에 필요한 제반 관리 기능 제공
- 외부 API 연동: 카카오(지도), Dialogflow(챗봇) 등 활용
- 보안: HTTPS(SSL) 기본 적용, 로그인/가입에 Cloudflare Turnstile CAPTCHA 검증 적용
- DB 연결 오류:
application.properties
정보가 정확한지, MySQL 서버가 정상 동작 중인지 확인합니다.easygymdb
스키마가 생성되어 있고 SQL 덤프가 올바르게 임포트되었는지 확인합니다. - Port 충돌:
server.port=8090
이 다른 애플리케이션에서 사용 중인지 확인하고, 필요시 다른 포트로 변경합니다. - 의존성 문제:
./gradlew clean build
를 통해 프로젝트를 클린 빌드하여 의존성이 올바르게 다운로드되었는지 확인합니다.
EasyGym 프로젝트에 기여해주셔서 감사합니다! 버그 리포트, 기능 제안, Pull Request 등 모든 형태의 기여를 환영합니다.
- 이 저장소를 Fork합니다.
- 새로운 기능이나 수정을 위한 브랜치를 생성합니다. (
git checkout -b feature/새로운기능
) - 변경사항을 커밋합니다. (
git commit -m 'Fix: 버그 수정 / Add: 새로운 기능 추가'
) - Fork한 저장소의 브랜치로 푸시합니다. (
git push origin feature/새로운기능
) - 원본 저장소로 Pull Request를 생성합니다.
이 프로젝트는 MIT 라이센스 하에 배포됩니다. 자세한 내용은 LICENSE
파일을 참고하세요.
- 프로젝트에 열심히 임해준 아이식스조 모두 수고했어요!
⭐ 이 프로젝트가 마음에 드셨다면 Star를 눌러주세요! ⭐