-
μμ νλ«νΌ APIλ₯Ό νμ©ν νμ΄ / μΆκ΅¬ μμ μ 곡
-
κ°μ΄ νμ΄μ ν νμμ λͺ¨μ§νλ κ²μν / νμ κ΄λ¦¬
-
ν΄μΈ μΆκ΅¬ κΈ°λ‘ APIλ₯Ό νμ©ν ν΄μΈ μΆκ΅¬ κΈ°λ‘ λ° μμ μ 곡
-
λ μ¨ APIλ₯Ό νμ©νμ¬ μ κ΅ νμ΄μ₯μ λ μ¨ μ보 μ 곡
- SSAFY 9κΈ° 1νκΈ° νλ‘μ νΈ μ°μμ
-
2023.05.18(λͺ©) ~ 2023.05.26(κΈ)
- 9μΌκ° μ§ν
******************** μΆκ° ********************
- 6μ λ°©νκΈ°κ°μ μ΄μ©νμ¬ λ°°ν¬ μλ£
-
λ°μΈμ€ / κΉνμ€ (2μΈ)
-
κΈ°λ₯ λ³ μν λΆλ΄
- MySQL
-
Java 11
- μ΅μ΄ 8λ²μ μ μ¬μ©νμΌλ, Football-Data.org λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©νκΈ° μν΄ 11λ²μ μΌλ‘ μ κ·Έλ μ΄λ
-
SpringBoot 2.7.11
-
MyBatis
-
IDE : IntelliJ
-
Build Tool : MVN
-
Dependencies
- Spring Web
- Spring Boot Dev Tools
- Spring Configuration Processor
- MyBatis FrameWork
- MySQL Driver
- Lombok
-
Vue 2
- router
- axios
- vuex
-
css
- bootstrap 5
-
emailjs
- μ¬μ©μκ° κ΄λ¦¬μμκ² λ¬Έμ μ΄λ©μΌμ λ¨κΈ°κ² ν΄μ£Όλ λΌμ΄λΈλ¬λ¦¬
-
sweetalert
- alertλ₯Ό μλ¦λ΅κ² λ§λ€μ΄μ£Όλ λΌμ΄λΈλ¬λ¦¬
-
λλ
- μΈλΆ font μ¬μ΄νΈ
-
Youtube API
-
Google Maps API
-
κΈ°μμ² λ¨κΈ°μ보 API / μ€κΈ°μ보 API
-
Football-Data.org API
-
μ κ΅ νμ΄μ₯(μΆκ΅¬μ₯) μ’ν λ°μ΄ν°
-
μ κ΅ μΆκ΅¬μ₯ μλ κ²½λ λ°μ΄ν°
-
μ κ΅ x,y μ’ν (κΈ°μμ² μ 곡)
- github
-
Notion
-
Discord
-
front : netlifyλ‘ https λ°°ν¬
-
back : AWS EC2λ‘ http server λ°°ν¬
- κ°λΉμλ₯Ό νμ©νμ¬ custom domain ꡬμ )
- νλ ₯μ ip νμ©
-
database : AWS RDSλ‘ database server λ°°ν¬
-
ec2λ‘ λ°°ν¬ν http serverλ₯Ό httpsλ‘ λ³ννκΈ° μν΄ AWS EC2 target group / loadbalancer, AWS Certificate Manager, Route 53 λ± νμ©μ©
-
λλΆλΆ users ν μ΄λΈμ νλλ‘ μΈλν€ μ°κ²°μ΄ λμ΄μλ€.
-
soccerfields, xypoints, regioncodes, bigregioncodesλ μΈλΆ μμ λ°μ΄ν°λ₯Ό ν μ΄λΈμ ννμ λ§κ² λ³νν ν csvλ‘ λ³ννμ¬ dbμ μ½μ νμλ€.
- soccerxy ν μ΄λΈμ xoccerfieldsμ xypointsμ joinμΌλ‘ μμ±νλ€.
-
μλ¨ NavBar, μ€μ μ¬μ§μ΄ μμΉν Carousel, νλ¨ ContentsBar λͺ¨λμμ μ£Όμ νμ΄μ§ μ΄λ κ°λ₯
-
NavBarλ₯Ό ν΅ν΄ Login / SignUp κ°λ₯
- ID / PW λ° κ°μ’ μ 보λ₯Ό μ λ ₯νμ¬ νμ κ°μ κ°λ₯
-
λ‘κ·ΈμΈ μ jwt(json-web-token) κΈ°μ μ νμ©ν μ ν¨μ± κ²μ¬ μ§ν
- jwt μ ν¨μ± κ²μ¬μμ μ€ν¨ν κ²½μ°, 컨ν μΈ μ¬μ© λΆκ°λ₯ (μλ¬)
- μλͺ»λ λ‘κ·ΈμΈ μ μλ¬ νμ (sweetalert)
- λ‘κ·ΈμΈ μ΄ν NavBarμ λ³ν
-
κΈ λ±λ‘ μ μ€μ ν λͺ¨μ§ μΈμμ λ°λΌ μ΄λ―Έ λͺ¨μ§μ΄ μλ£λ κΈμ λ§κ° νμ
-
λͺ¨μ§ κΈμ μ λͺ©, κΈ μμ±μ, νμ΄ μ₯μ, μμ€, μ±λ³, νμ΄ μμμκ°, μ‘°νμ νμ
- νμ΄μ₯ μ₯μ μ ν ν μμΉ λ³΄κΈ° λ²νΌ ν΄λ¦ μ, μλ¨ κ΅¬κΈ λ§΅μμ λλ΅μ μΈ νμ΄μ₯μ μμΉ νμ
- λͺ¨μ§ κΈ λ±λ‘ ν λ³ν
-
λͺ¨μ§ κ²μκΈ μμΈ νμ΄μ§ μλ¨ λΆλΆ
-
Google Map APIλ‘ λͺ¨μ§ κΈμ νμ΄μ₯ μμΉ μ§λ μ 곡
-
ν ν μ΄λΈμμλ λ§€μΉλ νμ μ 보λ₯Ό νμΈν μ μλ€.
- μ΄ νμ ν©λ₯ν νμλ€λ§ ν΄λΉ ν μ΄λΈμ νμΈν μ μλ€.
- μ΄ νμ ν©λ₯νμ§ μμ λ€λ₯Έ νμλ€μ μ΄ ν μ΄λΈμ λ³Ό μ μλ€.
- ν μ΄λΈμλ ν©λ₯ν νμ λ²νΈ(μμ), νμμ λν¬(μ λ’°λ νμΈ), μ΄λ¦, μ νλ²νΈ, ν¬μ§μ , μ€λ ₯, μ±λ³μ νμΈν μ μλ€.
-
λͺ¨μ§ κΈ λ±λ‘ μ μ€μ ν κ²λ€μ΄ μ¬μ§μΌλ‘ 보μ¬μ§λ€. (νμ΄ μ₯λΉ λμ¬ μ¬λΆ, μ€μ κ°λ₯ μ¬λΆ, μ£Όμ°¨ κ°λ₯ μ¬λΆ, μλ£ λ°μ κ°λ₯ μ¬λΆ)
-
νμ΄ μν μκ°, νμ΄μ₯ μμΉ, μΈλΉ λΉμ©, μν(λͺ¨μ§/λ§κ°), μ€λ ₯, λͺ¨μ§ μΈμ νν©, μ±λ³, μ‘°νμ νμ
-
λͺ¨μ§ κΈμ μ λͺ© / λ΄μ© νμ
- μ μ² λ²νΌ ν΄λ¦ μ λ³ν
-
μ μ² μ·¨μ μ λ³ν
- μ μ²νμ§ μμ νμμ ν΄λΉ κΈμ ν ν μ΄λΈμ λ³Ό μ μλ€.
- κ΅κ° λν νμ λλ₯Έ ν νλ©΄
-
νΉμ μμ ν΄λ¦ μ νλ©΄
-
μ νλΈ μμ μμ² κ°λ₯
-
μ΄ μμμ λν 리뷰 κΈ λͺ©λ‘
- 리뷰 λ²νΈ / μ λͺ© / μμ±μ λν¬ / μμ±μ μ΄λ¦ / μ‘°νμ / μμ±μκ°
- μμ 리뷰 μμ± / μμ± ν λ³ν
-
리뷰 μμΈ νμ΄μ§
- μμ / μμ μ λ‘λ μ±λ / 리뷰 μ λͺ© / λ΄μ© / μ’μμ μ¬λΆ / μ‘°νμ / μμ±μΌμ
-
리뷰 μμ / μμ κ°λ₯
-
μμΈ νμ΄μ§μμ μ’μμ λλ₯Έ ν ννΈ λ³ν
-
μ‘°νμλ μ€λ₯Έ λͺ¨μ΅
-
κΈ°μμ²μ λ¨κΈ° μ보 API / μ€κΈ° μ보 APIμ μΈλΆ csv μμ λ°μ΄ν°λ₯Ό νμ©νμ¬ ν΄λΉ μ§μκ³Ό νμ΄μ₯μ λ μ¨, κΈ°μ¨ μ보 λ° νμ¬ μμΈ λ μ¨λ₯Ό μ 곡νλ€.
- μΈλΆ μμ λ°μ΄ν°μ κ²½μ°, csvλ‘ λ³νν ν db ν μ΄λΈμ λ§λ ννλ‘ λ³ννκ³ db ν μ΄λΈμ μ½μ ν ν, join λ±μ ν΅ν΄μ ν΄λΉ μλΉμ€μ μλ§λ ννμ λ°μ΄ν°λ‘ λ§λ€μ΄λλ€.
-
μ κ΅ μ€, μ λ ₯νλ κ°μ λ°λΌ μ νν μ μλ ν보 κ΅°μ΄ λ°λλ€. (μ μ κ° μ λ ₯ν λλ§λ€ νλ³΄μ§ λ³κ²½)
- νμ¬λ λ κ°μ§ μ 보 νμΈ κ°λ₯
-
리그 / λΌμ΄λ μ λ ₯ μ λ‘λ©
-
ν΄λΉ μ 보 μ 곡
- λ¦¬κ·Έλ³ μ΅κ³ λμ μλ μμ λμΌν λ°©μμΌλ‘ μ 곡
- κ΄λ¦¬μμκ² μ¬μ©μκ° μ§μ λ¬Έμ λ©μμ§λ₯Ό λ¨κΈΈ μ μλ€.
-
λ¬Έμ λ©μμ§λ EmailJs λΌλ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄, κ΄λ¦¬μμ μ΄λ©μΌλ‘ μ μ‘ λλ€.
- κ΄λ¦¬μλ μ μ μ νΌλλ°±μ λΉ λ₯΄κ² μμ©νκ³ ν΄κ²°ν μ μλ€.
- λ΄κ° μ λ‘λν μ΄λ―Έμ§, ID, μ΄λ¦, λλ€μ, λ±κΈ, ν¬μ§μ , μ νλ²νΈ μ λ³΄κ° νμλμ΄μλ€.
-
λ΄ μ 보μ μμ μ΄ κ°λ₯νλ€.
-
λ§μ°¬κ°μ§λ‘ νμ νν΄λ κ°λ₯νλ€.
- λ΄κ° μ’μνλ 리뷰λ₯Ό ν΄λ¦νλ©΄, λ΄κ° μ’μμ λλ λ μμμ 리뷰 κΈλ€μ΄ λνλκ³ , ν΄λ¦νλ©΄ ν΄λΉ 리뷰μ μμΈ νμ΄μ§λ‘ μ΄λνλ€.
λ€μμ΄ κΈ°λλλ νλ‘μ νΈ
μΈνΌ 1νκΈ°λ₯Ό μ§ννλ©΄μ μ΄λμ λ κΈ΄ κΈ°κ°μ κ°μ§ ν νλ‘μ νΈλ₯Ό μ²μν΄λ΄€λλ°, μ§μ§ μ½μ§ μμλ€..
νλ‘μ νΈλ₯Ό μ§ννλ©° λ§λ μλ§μ μλ¬λ€.. ^^ μμ§ μμ κ²λλ€..
μ΄λ° λ§μ μκΈ°λ€μ΄ μ μκ² μμ΄ λ§μ κΉ¨λ¬μμ μ£Όμκ³ , λ€μ λ²μ λ λ μ¬λ°κ³ , λ μ ν μ μμ κ²μ΄λΌλ νμ μΌλ‘ λ€κ°μμ΅λλ€!
λ μ€λλ§μ μ΄λ κ² λ¬΄μΈκ°μ λΉ μ Έ μ΄μ μ μΌλ‘ μνλ κ² κ°μ, μΈ νΌμ κΈ΄ κ΅μ‘κΈ°κ°μ μ§λλ©΄μ μμν μμ΄μλ μ΄μ μ΄λ μμμ λ€ μ μ°Ύμ κ² κ°μ μ’μμ΅λλ€!
-
Vue 2 λ²μ μμ Listλ λ°°μ΄μ λ³κ²½κ°μ§ λΆκ°λ₯ μ΄μλ₯Ό λ¦κ² μμ, μ΄λ₯Ό ν΄κ²°νλλ° μκ°μ΄ μ€λκ±Έλ¦¬κ³ μΌλΆλ ν΄κ²°νμ§ λͺ»ν΄μ λ§€λλ½μ§ λͺ»νλ€.
- Vue 3 λ²μ μ μ¬μ©νμΌλ©΄ λ μΎμ νμ κ² κ°λ€.
-
κΈ°λ₯μ κΈκΈνμ¬ λμμΈμ μΌλ‘ μ κ²½μ λ§μ΄ λͺ»μ΄κ² κ°λ€.
-
μ²μμ μ€κ³λ₯Ό νμ€ν μνκ³ μμν΄μΌ νλλ°, κ·Έλ¬μ§ λͺ»ν΄μ μ€κ°μ€κ°μ DBλΆν° Back / Front λͺ¨λ μμ ν΄μΌ νλ μΌμ΄ λ§μμ, ν¨μ¨μ μ΄μ§ λͺ»νλ€.
-
ν λͺ¨μ§ κ²μνμμ λ±λ‘ μ, λ¬λ ₯ APIλ₯Ό νμ©νμ¬ λ¬λ ₯μ μλμΌλ‘ μΌμ μ΄ λ±λ‘λκ³ μ΄λ₯Ό μ μ μκ² λ³΄μ¬μ£Όμ§ λͺ»νλ€.
- λ§μ΄ νμ΄μ§μμλ λ΄κ° κ°μ λμ΄μλ ν ν μ΄λΈμ 보μ¬μ£Όμ§ λͺ»νλ€.
- νμ΄ κ²½κΈ° μκ°μ΄ μ§λ ν, μλμΌλ‘ λͺ¨μ§ κΈκ³Ό ν ν μ΄λΈμ΄ μμ λλ κΈ°λ₯μ λ£μ§ λͺ»νλ€.
-
νμ λΌλ¦¬ μΉκ΅¬λ νλ‘μ° νλ‘μ κΈ°λ₯μ μΆκ°νμ¬ μλ‘ μͺ½μ§λ₯Ό λλκ±°λ μ±ν μ ν μ μλ κΈ°λ₯μ λ£μ§ λͺ»νλ€.
-
λ€μλ²μλ μ’ λ μ΅μ λ²μ μ SpringBoot, Vueλ₯Ό νμ©νκ³ MyBatis λμ JPAλ₯Ό νμ©ν΄λ³΄κ³ μΆλ€.
-
github repositoryμ Setting μ€, mainμ directλ‘ commitνμ§ λͺ»νκ² νλ μ€μ μ νμ©
- λ°λμ κ°μ λ€λ₯Έ branchμ commitμ ν ν, pull request / mergeλ₯Ό ν΅ν΄ githubμ conflict checking κΈ°λ₯μ μ κ·Ή νμ©
- νλ‘μ νΈμ μμμ΄λ μΆ©λ μλ μμ ν νλ‘μ νΈ μν
-
apiλ₯Ό λ§μ΄ νμ©νλλ°, μ¬κΈ°μ μ¬μ©λ api keyλ μ€ν 곡κ°μ κ°λ¦΄λ§ν μ 보λ₯Ό μ¬λ¬κ°μ§ λ°©λ²μΌλ‘ κ°λ Έμ
- gitignore
- vueμ .env.local νμΌ
-
μΈλ ν€λ‘ λ€λ₯Έ ν μ΄λΈκ³Ό μ°κ²°λμ΄ μλ ν μ΄λΈμ νλͺ©μ μμ / μμ ν λ λ€λ₯Έ ν μ΄λΈμ νλͺ©κ³Ό μ°κ²°μ΄ λμ΄μμ΄ μλ‘ μν₯μ μ€ μ μλ€.
-
ν μ΄λΈ μ€μ νμ
ON DELETE CASCADE ON UPDATE CASCADE
-
'\xf0\x9f\x93\x81' λ₯Ό dbμ λ£μμ μλ€λ©° μλ¬ λ°μ
-
mysqlμ μ΄λͺ¨ν°μ½μ λ£μ μ μλλ‘ μ€μ ν΄μΌ νλ€.
-
λ°μ΄ν°λ² μ΄μ€ μμ±μ
CREATE SCHEMA IF NOT EXISTS ssaccer CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ;
- ν μ΄λΈ μμ± μ λμ μΆκ°
ENGINE = InnoDB DEFAULT CHARACTER SET = utf8mb4 COLLATE utf8mb4_general_ci;
-
csv νμΌ λ΄μ νκΈμ΄ μμΌλ©΄ db ν μ΄λΈμ μ½μ μ μλ¬κ° λνλλ€.
-
μμ νμΌμ μ μΌ μ columnλ§ νκΈλ‘ λ°κΎΌ ν, csv νμΌμ λ©λͺ¨μ₯μΌλ‘ μ°λ€
-
λ€λ₯Έ μ΄λ¦μΌλ‘ μ μ₯μμ μλ νμΌ νμμ utf-8λ‘ λ°κΎΈκ³ , νμΌ μ΄λ¦μμ κ·Έλλ‘ λμ΄μ μ μ₯νλ€.
- κΈ°μμ² λ¨κΈ° μ보 API νμ© μ€,
java: constructor JSONParser in class jdk.nashorn.internal.parser.JSONParser cannot be applied to given types; required: java.lang.String,jdk.nashorn.internal.objects.Global,boolean found: no arguments reason: actual and formal argument lists differ in length
μ κ°μ μλ¬ λ°μ
- IntelliJμμ μλ Importκ°
import jdk.nashorn.internal.parser.JSONParser
λ‘ λλλ°, Importλ₯Ό μλ κ±Έλ‘ ν΄μΌ νλ€.
import jdk.nashorn.internal.parser.JSONParser
-
vue νμΌ μ΄λ¦μ μ΄λ―Έ ν¬ν¨λ νμΌ μ΄λ¦κ³Ό λ/μλ¬Έμλ§ λ€λ¦ λλ€. νμΌμ λ€μκ³Ό κ°μ μ΄μ λ‘ νλ‘κ·Έλ¨μ μμ΅λλ€.ts(1149) λΌλ μλ¬
-
jsconfig.json νμΌμ compilerOptions μμ "forceConsistentCasingInFileNames" : false, μΆκ°
-
DB ν μ΄λΈ κ°μ Join μ 3κ°μ ν μ΄λΈμ μ‘°μΈνκ³ , μ‘°μΈ μ‘°κ±΄(ON)μ LIKEλ₯Ό νμ©νμ¬ μ‘°μΈμ μ²μ ν΄λ΄€λ€.
- λ³ λ€λ₯Όκ±΄ μλ€. μλ νλ―μ΄ λκ°μ΄ νλ©΄ λλ€.
-
DTOλ₯Ό μ²μ νμ©ν΄λ΄€λ€.
-
JOINμ ν λ λ³΄ν΅ κ°κ° λ€λ₯Έ ν μ΄λΈλ‘λΆν° λ€λ₯Έ 컬λΌλ€μ κ°μ Έμ€κΈ° λλ¬Έμ selectμ κ²°κ³Όλ¬Όμ νμ μ μ§μ ν μ μλ€.
-
λ°λΌμ μ΄ λ μ΄λ¬ν λ°κ΅¬λ μν μ ν΄μ£Όλ DTOλ₯Ό μμ±ν΄μ μ΄ κ°μ²΄λ₯Ό λ¦¬ν΄ νμ μΌλ‘ μ¬μ©νλ©΄ λλ€.
-
μ΄ λ μμ±νλ λ°κ΅¬λ DTOλ λ¨μ§ μ΄λ° μν λ§ νκΈ°μ entityκ° μλλ―λ‘, DB tableκ³Ό μ°κ²°λμ΄ μλ κ²μ΄ μλλ€.



































