π₯1μ°¨ μ€νλ¦°νΈ - prgrms-web-devcourse-final-project/WEB4_5_GAEPPADAK_BE GitHub Wiki
κ°μ
ν: Team04 | κ°λ°μ λΉ μ§ λ
κΈ°κ°: 2025-04-28 ~ 2025-05-08
λͺ©ν
βκΈ°μ μ κΈ°λ° λ§λ ¨ λ° κ°λ° νκ²½ ꡬμΆμ ν΅ν΄ ν΅μ¬ μ¬μ©μ νλ‘μ°μ MVPμ μ¬μ©μμκ² κ°μΉλ₯Ό μ 곡νλ μ£Όμ κΈ°λ₯μ κ°λ° λ° λ°°ν¬ κ°λ₯ν μνλ‘ μμ±ν©λλ€.β
ν΅μ¬ μ¬μ©μ νλ‘μ°λ₯Ό MVP ννλ‘ κ΅¬ννμ¬ κΈ°μ μ κΈ°λ°μ λ§λ ¨ν©λλ€. κ°λ° νκ²½ κ΅¬μΆ λ° ν΅μ¬ μν€ν μ² μ€κ³λ₯Ό μλ£νμ¬ μ£Όμ κΈ°λ₯λ€μ μ±κ³΅μ μΌλ‘ λ°°ν¬ν©λλ€. μ£Όμ κΈ°λ₯μ μ¬μ©μμκ² μλΉμ€λ₯Ό μ 곡νλ μ΅μ κΈ°λ₯ λ¨μλ₯Ό λ»νλ©°, κΈ°μ μ€ν κ²μ¦ λ° μ£Όμ μμ‘΄μ± ν΄κ²°μ ν΅ν΄ κ°λ° κ°λ₯ν μνλ‘ λ§λλλ€.
μꡬμ¬ν λͺ μΈ
[μ λͺ© μμ](https://www.notion.so/1ed3550b7b55801a8c72d4a964647168?pvs=21)
κΈ°λ₯
- νμκ°μ
- μ΄λ©μΌ, λΉλ°λ²νΈ, λλ€μ, μλ μμΌμ κΈ°μ νμ¬ νμκ°μ μ§ν. μ΄λ©μΌ μ€λ³΅νμΈ λ° μΈμ¦ μ μ°¨κ° ν¬ν¨λ¨.
- Spring Secutiry + JWT μΈμ¦ ν¬ν¨
- λΉλ°λ²νΈλ 8~30μ, μμλ¬Έμ+μ«μ+νΉμκΈ°νΈ ν¬ν¨ν΄μΌ λ¨
- λΉλ°λ²νΈ μνΈν μ μ₯
- λλ€μμ μ€λ³΅ λΆκ°λ₯
- λ‘κ·ΈμΈ
- νλ©΄μ μλ¨ λ©λ΄λ° μ°μΈ‘μμ λ‘κ·ΈμΈν μ μμ
- λ‘κ·ΈμΈ μ μ΄λ©μΌ, λΉλ°λ²νΈ νμ
- JWT(refresh, access) λ°κΈ
- νμ μ 보
- μλ¨ λ©λ΄μμ μμ΄μ½μ λλ¬ λ΄ μ 보λ₯Ό μ‘°ν κ°λ₯
- λ΄ μ 보λ λλ€μ, μ΄λ©μΌ, μλ μμΌ νμΈ κ°λ₯
- μ°μΈ‘ μλ¨μ μλ μμ λ²νΌμ λλ¬ λλ€μκ³Ό νλ¨μ νμ΄λ λμ΄ μλ λΉλ°λ²νΈ λ³κ²½ νλκ° λ³΄μ
- λΉλ°λ²νΈ μ΄κΈ°ν / μ΄λ©μΌ μΈμ¦
- 첫λ²μ§Έ νλ©΄μλ μ΄λ©μΌ μ λ ₯ νλμ μΈμ¦ μ½λ μ λ ₯ νλκ° μμ. μ΄λ©μΌ μ λ ₯μ ν΄ μ΄λ©μΌ λ°μ‘ λ²νΌμ λλ¬ μΈμ¦ μ½λλ₯Ό νμΈ ν κΈ°μ
- μΈμ¦ μ½λ μ λ ₯ λκΈ° μκ°μ 5λΆ
- λλ²μ§Έ νλ©΄μλ μ λΉλ°λ²νΈ νλμ μ λΉλ°λ²νΈ νμΈ νλκ° μμ. λ νλκ° λκ°μ μ λΉλ°λ²νΈλ‘ μμ±λ μ λΉλ°λ²νΈ μ΄κΈ°ν μ±κ³΅ λ° λ‘κ·ΈμΈ νλ©΄μΌλ‘ μ΄λ
- λ©μΈ νλ©΄
- ν€μλ κΈ°λ°μΌλ‘ AIκ° λ΄μ© μμ½ν βν¬μ€νΈβκ° μΈλ€μΌ, μ λͺ©, λ΄μ© μΌλΆλ₯Ό ν¬ν¨ν μ±λ‘ 10κ°κ° μ€μκ°μΌλ‘ 보μ. ν΄λ¦ μ ν¬μ€νΈ νλ©΄μΌλ‘ μ΄λ
- ν¬μ€νΈ νλ¨μλ βμΈκΈ° λ΄μ€β(λ€μ΄λ² λ΄μ€)μ βμΈκΈ° μ νλ·°βκ° μμ΄, κ°κ° 5κ°μ© ν€μλμ κ΄λ ¨λμ΄ μΈκΈ°κ° λμ μμλλ‘ μ’μΈ‘μμ μ°μΈ‘μΌλ‘ νμλ¨
- μ€μκ° ν€μλ
- λ©μΈ νλ©΄, ν¬μ€νΈ νλ©΄, ν€μλ νλ©΄, μΈκΈ° μ νλΈ νλ©΄, μΈκΈ° λ΄μ€ νλ©΄μ μ°μΈ‘μ λ©λ΄λ°λ‘ μ‘΄μ¬
- μ€μκ°μΌλ‘ μΈκΈ° μλ ν€μλ 10κ°κ° λ΄λ¦Όμ°¨μμΌλ‘ 보μ. ν€μλ νλλ₯Ό ν΄λ¦ μ ν€μλ νλ©΄μΌλ‘ μ΄λ
- ν€μλ νλ©΄
- ν΄λΉ ν€μλλ‘ μ§μ¬μ§ ai ν¬μ€νΈλ€ μΆλ ₯
- νμ΄μ§λ€μ΄μ μ μ©
- ν¬μ€νΈ νλ©΄
- μλ¨μ μ λͺ©κ³Ό μΈλ€μΌ, λ΄μ© μ μ²΄κ° λμ΄
- ν¬μ€νΈ λ΄μ© νλ¨μλ λκΈ UIκ° μμ
- λκΈ UI νλ¨μλ ν΄λΉ ν¬μ€νΈμ μΆμ²(λ€μ΄λ² λ΄μ€, μ νλΈ)κ° 5κ°μ© μ‘΄μ¬. ν΄λ¦ μ ν΄λΉ μΆμ²μ URLμ μ μ λ° μ΄λ
- λκΈ
- ν¬μ€νΈ νλ©΄μμ λκΈ λͺ©λ‘μ μ‘°ν
- λ‘κ·ΈμΈν μ¬μ©μ λμ λκΈ μμ±, μμ , μμ
- λ‘κ·ΈμΈν μ¬μ©μ λμ λκΈ μ’μμ/μ’μμ μ·¨μ
- μΈκΈ° λ΄μ€ νλ©΄
- ν€μλμ μ°κ΄λ λ€μ΄λ² λ΄μ€λ€μ 보μ¬μ€
- λ§ν¬λ₯Ό ν΄λ¦ν μ ν΄λΉ λ€μ΄λ² λ΄μ€ urlλ‘ μ΄λ
- νμ΄μ§λ€μ΄μ μ μ©
- μΈκΈ° μ νλΈ νλ©΄
- ν€μλμ μ°κ΄λ μ νλΈ λΉλμ€λ€μ 보μ¬μ€
- λ§ν¬λ₯Ό ν΄λ¦ν μ ν΄λΉ μ νλΈ λΉλμ€ urlλ‘ μ΄λ
- νμ΄μ§λ€μ΄μ μ μ©
- μ€μΌμ€λ¬
- 1μκ° λ¨μ μ€ν
- ν€μλ μμ§ β ν€μλλ‘ λ€μ΄λ² λ΄μ€ λ° μ νλΈμμ κ²μ β μ κ·μ± νκ° β AI LLM κΈ°λ° ν¬μ€νΈ μμ±
- λͺ¨λν°λ§ μμ€ν
QA ν΅ν© ν μ€νΈ
- ν μ€νΈ μ λ΅μ κΈ°ν λ¨κ³μμ μ μν API μꡬμ¬ν λͺ μΈμλ₯Ό κΈ°λ°μΌλ‘ μλ QA ννλ‘ μ§νλμμ΅λλ€.
- λͺ¨λ APIμ λν΄ μμ μ λ ₯/μΆλ ₯, μλ¬ μλ΅ λ±μ μλ리μ€λ‘ μ 리νκ³ , ν μ€νΈ κ²°κ³Όλ₯Ό μλμΌλ‘ κΈ°λ‘νμ¬ μ΄μ λμμ κ²μ¦νμ΅λλ€.
- QA μ§ν λꡬλ‘λ λ΄λΆ Notion ν νλ¦Ώ()μ νμ©νμ΅λλ€.
κ²°κ³Ό
API κ²°κ³Ό
μ΄ 25κ° μ€ 24κ° μ μ μλ νμΈ β 96% μμ±
QA κ²°κ³Ό
ꡬν μλ£λ κΈ°λ₯
- νμκ°μ
- μ΄λ©μΌ, λΉλ°λ²νΈ, λλ€μ, μλ μμΌμ κΈ°μ νμ¬ νμκ°μ μ§ν.
- μ΄λ©μΌ μ€λ³΅νμΈ λ° μΈμ¦/κ²μ¦ μ μ°¨ ꡬν
- λΉλ°λ²νΈλ 8~20μ, μμλ¬Έμ+μ«μ+νΉμκΈ°νΈ ν¬ν¨ν΄μΌ λ¨
- λΉλ°λ²νΈ μνΈν μ μ₯(ν΄μ±μ²λ¦¬)
- λλ€μμ μ€λ³΅ λΆκ°λ₯(2~10μ)
- λ‘κ·ΈμΈ
- νλ©΄μ μλ¨ λ©λ΄λ° μ°μΈ‘μμ λ‘κ·ΈμΈν μ μμ
- λ‘κ·ΈμΈ μ μ΄λ©μΌ, λΉλ°λ²νΈ νμ
- JWT(refresh, access) λ°κΈ(Cookie)
- refresh ν ν°μ κΈ°μ€μΌλ‘ access ν ν° μ λ°κΈ
- 보μ
- Spring Secutiry + JWT μΈμ¦ ν¬ν¨
- Spring Security μ€μ
- JwtFilter μ€μ
- νμ μ 보
- μλ¨ λ©λ΄μμ μμ΄μ½μ λλ¬ λ΄ μ 보λ₯Ό μ‘°ν κ°λ₯
- λ΄ μ 보λ λλ€μ, μ΄λ©μΌ, μλ μμΌ νμΈ κ°λ₯
- λ©μΈ νλ©΄
- ν€μλ κΈ°λ°μΌλ‘ AIκ° λ΄μ© μμ½ν βν¬μ€νΈβκ° μΈλ€μΌ, μ λͺ©, λ΄μ© μΌλΆλ₯Ό ν¬ν¨ν μ±λ‘ 10κ°κ° μ€μκ°μΌλ‘ 보μ. ν΄λ¦ μ ν¬μ€νΈ νλ©΄μΌλ‘ μ΄λ
- ν¬μ€νΈ νλ¨μλ βμΈκΈ° λ΄μ€β(λ€μ΄λ² λ΄μ€)μ βμΈκΈ° μ νλΈβκ° μμ΄, κ°κ° 5κ°μ© ν€μλμ κ΄λ ¨λμ΄ μΈκΈ°κ° λμ μμλλ‘ μ’μΈ‘μμ μ°μΈ‘μΌλ‘ νμλ¨
- μ€μκ° ν€μλ
- λ©μΈ νλ©΄, ν¬μ€νΈ νλ©΄, ν€μλ νλ©΄, μΈκΈ° μ νλΈ νλ©΄, μΈκΈ° λ΄μ€ νλ©΄μ μ°μΈ‘μ λ©λ΄λ°λ‘ μ‘΄μ¬
- κ΅¬κΈ νΈλ λ RSS κΈ°λ° μΈκΈ° ν€μλ μΆμΆ β Spring Batchλ‘ 1μκ° λ¨μ μ§μ
- μΆμΆλ ν€μλλ₯Ό μΈκΈ° κΈ°λ° νν°λ§
- μ€μκ°μΌλ‘ μΈκΈ° μλ ν€μλ 10κ°κ° λ΄λ¦Όμ°¨μμΌλ‘ 보μ. ν€μλ νλλ₯Ό ν΄λ¦ μ ν€μλ νλ©΄μΌλ‘ μ΄λ
- ν€μλ νλ©΄
- ν΄λΉ ν€μλλ‘ μ§μ¬μ§ ai ν¬μ€νΈλ€ μΆλ ₯
- μΆλ ₯λλ ν¬μ€νΈλ₯Ό μ λ ¬ (μ΅μ μ / μ΄λ¦μ)
- 보μ¬μ§λ ν¬μ€νΈμ μ°κ΄λ μΆμ²(μ νλΈ/λ€μ΄λ² λ΄μ€) 리μ€νΈ 5κ° μ‘°ν
- νμ΄μ§λ€μ΄μ μ μ©
- ν¬μ€νΈ νλ©΄
- μλ¨μ μ λͺ©κ³Ό μΈλ€μΌ, λ΄μ© μ μ²΄κ° λμ΄
- ν¬μ€νΈ λ΄μ© νλ¨ λκΈ κΈ°λ₯
- λκΈ UI νλ¨μλ ν΄λΉ ν¬μ€νΈμ μΆμ²(λ€μ΄λ² λ΄μ€, μ νλΈ)κ° 5κ°μ© μ‘΄μ¬. ν΄λ¦ μ ν΄λΉ μΆμ²μ URLμ μ μ λ° μ΄λ
- λκΈ
- ν¬μ€νΈ νλ©΄ νλ¨μμμ λκΈ λͺ©λ‘μ μ‘°ν
- λ‘κ·ΈμΈν μ¬μ©μ λμ λκΈ μμ±, μμ , μμ
- λ‘κ·ΈμΈν μ¬μ©μ λμ λκΈ μ’μμ/μ’μμ μ·¨μ
- μΈκΈ° λ΄μ€ νλ©΄
- ν€μλμ μ°κ΄λ λ€μ΄λ² λ΄μ€λ€μ 보μ¬μ€
- νμ΄μ§λ€μ΄μ μ μ©
- μΈκΈ° μ νλΈ νλ©΄
- ν€μλμ μ°κ΄λ μ νλΈ λΉλμ€λ€μ 보μ¬μ€
- νμ΄μ§λ€μ΄μ μ μ©
- μ€μΌμ€λ¬
- 1μκ° λ¨μ μ€ν
- ν€μλ μμ§ β ν€μλλ‘ λ€μ΄λ² λ΄μ€ λ° μ νλΈμμ κ²μ β λ€μ΄λ² λ΄μ€ μ€ νλλ‘ μμ ν¬μ€νΈ μμ±
- λ°°ν¬
- κ°λ° λ° λ©μΈ λΈλμΉ PRμ μλ λ°°ν¬ νλ‘μΈμ€
- κ°λ° μλ²μ μ΄μ μλ² λΆλ¦¬ν΄ λ°°ν¬
- μ΄μ μλ²μ DBλ₯Ό RDSμ μ°κ²°
λ°±λ‘κ·Έ
미ꡬν
- λ©μΈ νλ©΄
- ν€μλ κΈ°λ°μΌλ‘ AIκ° βν¬μ€νΈβλ₯Ό λ΄μ©μ μμ½ν΄ μμ±
- μ€μΌμ€λ¬
- ν€μλ μ κ·μ± νκ° λ‘μ§
- λ€μ΄λ² λ΄μ€ μ€ νλλ‘ μμ μ μ₯λ ν¬μ€νΈλ₯Ό AI LLM Generated ν¬μ€νΈλ‘ λ³κ²½
- λͺ¨λν°λ§
- λͺ¨λν°λ§ κ°λ° λ° λ°°ν¬ μλ² μ μ©
- μλ² λ‘κ·Έ λͺ¨λν°λ§ (μ κ·)
- νμκΈ°λ₯
- νμ μ 보 μμ
- μ°μΈ‘ μλ¨μ μλ μμ λ²νΌμ λλ¬ λλ€μκ³Ό νλ¨μ νμ΄λ λμ΄ μλ λΉλ°λ²νΈ λ³κ²½ νλκ° λ³΄μ
- νμ νν΄(sort delete νμ)
- λΉλ°λ²νΈ μ΄κΈ°ν
- 첫λ²μ§Έ νλ©΄μλ μ΄λ©μΌ μ λ ₯ νλμ μΈμ¦ μ½λ μ λ ₯ νλκ° μμ. μ΄λ©μΌ μ λ ₯μ ν΄ μ΄λ©μΌ λ°μ‘ λ²νΌμ λλ¬ μΈμ¦ μ½λλ₯Ό νμΈ ν κΈ°μ
- μΈμ¦ μ½λ μ λ ₯ λκΈ° μκ°μ 5λΆ
- λλ²μ§Έ νλ©΄μλ μ λΉλ°λ²νΈ νλμ μ λΉλ°λ²νΈ νμΈ νλκ° μμ. λ νλκ° λκ°μ μ λΉλ°λ²νΈλ‘ μμ±λ μ λΉλ°λ²νΈ μ΄κΈ°ν μ±κ³΅ λ° λ‘κ·ΈμΈ νλ©΄μΌλ‘ μ΄λ
κ°μ μ¬ν
- 곡ν΅(κΈ°μ )
- μλ² μκ°λ κΈ°μ€μ UTCλ‘ ν΅μΌ
- μλ¦Ό μμ€ν
ꡬμΆ
- μΈλΆ API(μ νλΈ λ±)μ νΈμΆ μ ν νλ λμ μλ¦Ό μμ€ν ꡬμΆ
- AI LLM ν ν° μ¬μ©λ λμ μλ¦Ό μμ€ν ꡬμΆ
- μ€μκ° ν€μλμ ν΄λΉνλ μΈκΈ° ν¬μ€νΈ μ‘°ν(GET
/posts/top
) μ€λ₯ ν΄κ²°
νκ³
β μν μ
- μ°μ μμ κΈ°λ° μΌμ κ³ν μ립 λ° μ€νλ¦°νΈ μ΄λ° λͺ©ν λͺ ννκ° μ λμ΄ νμ κΈ°λ₯μ΄ λ¨Όμ ꡬνλ¨.
- νμ κ° νμ μ ν΅ν΄ μλ QAλ₯Ό μννκ³ , μ΄ 25κ° API μ€ 24κ°κ° μ μ μλν¨μ νμΈνμ¬ κΈ°λ₯ μμ±λλ₯Ό κ²μ¦ν¨.
- μ£Όμ κΈ°λ₯ κ°λ°μ μ§μ€νμ¬, νμ κΈ°λ₯κ³Ό μ€μΌμ€λ¬λ₯Ό μ μΈν λλΆλΆμ ν΅μ¬ κΈ°λ₯μ μΌμ£ΌμΌ λ΄μ ꡬν μλ£ν¨.
π€ μμ¬μ΄ μ
- νμ κΈ°λ₯κ³Ό μ€μΌμ€λ¬ μ‘ κ΅¬νμ΄ μ§μ°λ¨ β μμμΉ λͺ»ν μ€λ₯μ λν μΌμ΄ λΆμ‘±ν κΈ°νμ΄ μμΈμΌλ‘ 보μ.
- QAκ° μλμΌλ‘λ§ μ΄λ€μ Έ λ°λ³΅μ±μ΄λ μλν λ©΄μμ λΆμ‘±ν¨.
π§ κ°μ ν μ
- λ€μ μ€νλ¦°νΈμλ λ¨μ κΈ°λ₯μ μ°μ μ μΌλ‘ λ§λ¬΄λ¦¬νκ³ , μλνλ ν μ€νΈ λμ μ κ³ λ €ν΄ QA ν¨μ¨μ λμ΄μ.