κΈ°μ‘΄ λ§λΌν€ λν μΌμ μ¬μ΄νΈ(http://marathon.pe.kr/index_calendar.html)λ₯Ό λͺ¨λ°μΌμ μ΅μ ννμ¬ μ 곡νλ SpringBoot κΈ°λ° μΉ μ ν리μΌμ΄μ μ λλ€.
- π± λͺ¨λ°μΌ μ΅μ νλ λ°μν UI/UX
- π λ€μν 쑰건μΌλ‘ λ§λΌν€ λν κ²μ
- μ’ λͺ©λ³ νν° (νμ½μ€, νν, 10K, 5K, κΈ°ν)
- μμΌλ³ νν°
- μ μμνλ³ νν° (μ μμ€, μ μμλ£, μ μμμ )
- μ§μλ³ νν° (μ κ΅ 17κ° μλ)
- λ λ/μλ³ νν°
- πββοΈ μ€μκ° λν μ 보 μ 곡
- π λν μΌμ μΊλ¦°λ λ·°
- π λν μ μ λ§ν¬ μ°κ²°
- πΎ PWA μ§μ (μ± μ€μΉ κ°λ₯)
- Backend: Spring Boot 3.2.0, JPA/Hibernate
- Frontend: Thymeleaf, HTML5, CSS3, JavaScript
- Database: H2 (κ°λ°), PostgreSQL (μ΄μ)
- Build Tool: Gradle 8.4
- Deployment: Docker, CloudType.io
- Java 17 μ΄μ
- Gradle 8.x μ΄μ (λλ Gradle Wrapper μ¬μ©)
# μ μ₯μ ν΄λ‘
git clone [repository-url]
cd marathon-mobile-app
# μ ν리μΌμ΄μ
μ€ν
./gradlew bootRunμ ν리μΌμ΄μ μ΄ μ€νλλ©΄ http://localhost:8080 μμ νμΈν μ μμ΅λλ€.
# νλ‘μ νΈ λΉλ
./gradlew build
# μ ν리μΌμ΄μ
μ€ν
./gradlew bootRun
# ν
μ€νΈ μ€ν
./gradlew test
# JAR νμΌ μμ±
./gradlew bootJar# Docker μ΄λ―Έμ§ λΉλ
docker build -t marathon-mobile-app .
# 컨ν
μ΄λ μ€ν
docker run -p 8080:8080 marathon-mobile-app- GitHubμ μμ€μ½λ νΈμ
- CloudType.ioμμ μ νλ‘μ νΈ μμ±
- GitHub μ μ₯μ μ°κ²°
- λΉλν©: Java μ ν
- λΉλ λͺ
λ Ή:
./gradlew bootJar - μ€ν λͺ
λ Ή:
java -jar build/libs/marathon-mobile-app.jar - ν¬νΈ: 8080 μ€μ
- μλ λ°°ν¬ μλ£
# λ°μ΄ν°λ² μ΄μ€ μ€μ (PostgreSQL μ¬μ©μ)
SPRING_DATASOURCE_URL=jdbc:postgresql://[host]:[port]/[database]
SPRING_DATASOURCE_USERNAME=[username]
SPRING_DATASOURCE_PASSWORD=[password]
# νλ‘νμΌ μ€μ
SPRING_PROFILES_ACTIVE=prod
GET /- λ©μΈ νμ΄μ§GET /api/events- λ§λΌν€ μ΄λ²€νΈ API (JSON)- 쿼리 νλΌλ―Έν°: category, dayOfWeek, registrationStatus, region, year, month
src/
βββ main/
β βββ java/com/marathon/app/
β β βββ MarathonMobileApplication.java
β β βββ controller/
β β β βββ MarathonController.java
β β βββ model/
β β β βββ MarathonEvent.java
β β β βββ MarathonEventRepository.java
β β βββ service/
β β β βββ MarathonEventService.java
β β β βββ MarathonCrawlerService.java
β β βββ config/
β β βββ DataInitializer.java
β βββ resources/
β βββ templates/
β β βββ index.html
β βββ static/
β β βββ css/style.css
β β βββ js/app.js
β β βββ manifest.json
β βββ application.properties
βββ test/
βββ java/com/marathon/app/
build.gradle # Gradle λΉλ μ€μ
settings.gradle # Gradle νλ‘μ νΈ μ€μ
gradle/ # Gradle Wrapper νμΌλ€
gradlew # Gradle Wrapper μ€ν μ€ν¬λ¦½νΈ (Unix)
- λͺ¨λ°μΌ νΌμ€νΈ: λͺ¨λ°μΌ νκ²½μ μ΅μ νλ UI/UX
- λ°μν λμμΈ: λ€μν νλ©΄ ν¬κΈ°μ μ μ
- Progressive Web App: μ± μ€μΉ λ° μ€νλΌμΈ μ§μ
- μ€μκ° λ°μ΄ν°: μλ ν¬λ‘€λ§μΌλ‘ μ΅μ μ 보 μ 곡
- μ¬μ©μ μΉνμ : μ§κ΄μ μΈ νν°λ§ λ° κ²μ κΈ°λ₯
- μ€μ λ§λΌν€ μ¬μ΄νΈ ν¬λ‘€λ§ ꡬν
- μ¬μ©μ μ¦κ²¨μ°ΎκΈ° κΈ°λ₯
- νΈμ μλ¦Ό κΈ°λ₯
- λν νκΈ° λ° νμ μμ€ν
- μΉ΄μΉ΄μ€λ§΅/λ€μ΄λ²λ§΅ μ°λ
MIT License
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
μ΄μλ κ°μ μ¬νμ΄ μμΌμλ©΄ GitHub Issuesλ₯Ό ν΅ν΄ λ¬Έμν΄μ£ΌμΈμ.