Skip to content

cIonecoder/expedia

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

25 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

✈️ Expedia Clone Coding

πŸš€ ν”„λ‘œμ νŠΈ μ‚¬μš© 기술

  • Kotlin, Java
  • Spring Boot, Spring Security, Spring webflux, Spring Cloud
  • Spring Data JPA
  • PostgreSQL, MySQL
  • Kafka, gRPC
  • Docker
  • GitHub Actions
  • K6 + Grafana + InfluxDB

πŸš€ μ†Œκ°œ

  • μ΅μŠ€ν”Όλ””μ•„ 클둠 μ½”λ”©
  • λ°±μ—”λ“œ 섀계에 μ§‘μ€‘ν•˜κΈ° μœ„ν•΄ ν”„λ‘ νŠΈ UI λŠ” 카카였 μ˜€λΈμ„ μ΄μš©ν•œ ν”„λ‘œν†  νƒ€μ΄ν•‘μœΌλ‘œ λŒ€μ²΄ν•¨
  • κ΅¬ν˜„ 방식: 각 단계가 λλ‚˜λ©΄ Tag λ₯Ό μƒμ„±ν•˜μ—¬ 보관
    • v1: Rest Call
      • μ‚¬μš©μž μœ„μ£Όμ˜ κ΅¬ν˜„
      • λΉ„μ§€λ‹ˆμŠ€ 둜직의 깊이 μ΅œλŒ€ν•œ κ°€λ³κ²Œ
    • v2: Event Driven
      • λ‚΄λΆ€ μ„œλΉ„μŠ€κ°„μ˜ ν˜ΈμΆœμ€ gRPC μ‚¬μš©
      • Kafka ν™œμš©
    • v3: async
      • 동기 μ½”λ“œλ₯Ό 비동기 μ½”λ“œλ‘œ μ „ν™˜
      • Spring Webflux + Coroutines μ‚¬μš©
    • v4: Spring cloud
      • Spring Cloud 적용 ν•˜κΈ°

πŸš€ μ•„ν‚€ν…μ²˜

  • Gradle Multi module
    • 루트 λͺ¨λ“ˆμ€ expedia-server 와 platform-server 둜 λ‚˜λ‰˜μ–΄μ ΈμžˆμœΌλ©° 각 λͺ¨λ“ˆ μ•„λž˜ μ„œλΈŒ λͺ¨λ“ˆλ“€μ΄ μ‘΄μž¬ν•˜λŠ” ν˜•νƒœ

μ•„ν‚€ν…μ²˜ 이미지λ₯Ό λ„£μ–΄μ£Όμ„Έμš”.

πŸš€ DB ERD

DB ERD 이미지λ₯Ό λ„£μ–΄μ£Όμ„Έμš”.

πŸš€ νŒ€ μ»¨λ²€μ…˜

  • Style Guide
  • Test(TDD + ATDD): κΈ°λ³Έ 틀은 μ•„λž˜μ™€ κ°™μœΌλ©° 본인이 νŽΈν•œ λ°©ν–₯에 λ”°λΌμ„œ μž‘μ—… κ°€λŠ₯
    • Kotlin: μΈμˆ˜ν…ŒμŠ€νŠΈλŠ” Feature Spec, 도메인 λ ˆμ΄μ–΄ ν…ŒμŠ€νŠΈλŠ” Describe Spec 을 적용
    1. μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 기반으둜 μ‹€νŒ¨ν•˜λŠ” μΈμˆ˜ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±(fail-acceptance)
    2. λ¬Έμ„œν™” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±(documentation)
    3. μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ μž‘μ„±(fail-unittest)
    4. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό ν†΅κ³Όμ‹œν‚€κΈ° μœ„ν•œ 도메인 둜직 μž‘μ„± (production)
    5. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 성곡 μ‹œν‚€κ³ (success-unittest)
    6. μΈμˆ˜ν…ŒμŠ€νŠΈλ₯Ό 성곡 μ‹œν‚€κΈ°(success-acceptance)
  • Package: Layered Architectures
    • νŒ¨ν‚€μ§€κ°„ μ˜μ‘΄μ„± λ°©ν–₯을 ν•œ 곳으둜 흐λ₯΄κ²Œλ” 섀계
    • interfaces
      • μ‚¬μš©μžμ—κ²Œ 정보λ₯Ό 보여주고 μ‚¬μš©μžμ˜ λͺ…령을 ν•΄μ„ν•˜λŠ” 일을 μ±…μž„μ§„λ‹€.
      • DTO, Mapper, Controller
    • application
      • μˆ˜ν–‰ν•  μž‘μ—…μ„ μ •μ˜ν•˜κ³  ν‘œν˜„λ ₯ μžˆλŠ” 도메인 객체가 문제λ₯Ό ν•΄κ²°ν•˜κ²Œ ν•œλ‹€. 이 κ³„μΈ΅μ—μ„œ μ±…μž„μ§€λŠ” μž‘μ—…μ€ 업무상 μ€‘μš”ν•˜κ±°λ‚˜ λ‹€λ₯Έ μ‹œμŠ€ν…œμ˜ μ‘μš© 계측과 μƒν˜Έ μž‘μš©ν•˜λŠ” 데 ν•„μš”ν•œ 것듀이닀. 이 계측은 μ–‡κ²Œ μœ μ§€λ˜κ³ , 였직 μž‘μ—…μ„ μ‘°μ •ν•˜κ³  μ•„λž˜μ— μœ„μΉ˜ν•œ 계측에 ν¬ν•¨λœ 도메인 객체의 ν˜‘λ ₯μžμ—κ²Œ μž‘μ—…μ„ μœ„μž„ν•œλ‹€.
      • xxxFacade
    • domain
      • 업무 κ°œλ…κ³Ό 업무 상황에 λŒ€ν•œ 정보, 업무 κ·œμΉ™μ„ ν‘œν˜„ν•˜λŠ” 일을 μ±…μž„μ§„λ‹€.
      • Service, Command, Query, Entity
    • infrastructure
      • μƒμœ„ 계측을 μ§€μ›ν•˜λŠ” μΌλ°˜ν™”λœ 기술적 κΈ°λŠ₯을 μ œκ³΅ν•œλ‹€.
      • Low level κ΅¬ν˜„μ²΄
  • VCS
    • Git μ „λž΅μ€ Forking Workflow 방식을 μ±„μš©ν•œλ‹€.
      • Github Open Source Contribute 방식(Forking Workflow)을 μ±„μš©ν•œλ‹€.
      • 개인 μ €μž₯μ†Œλ‘œ Fork ν›„ μ§„ν–‰
      • λͺ¨λ“  μž‘μ—…μ„ μ§„ν–‰ν•˜κΈ° 전에(브랜치 μƒμ„±ν•˜κΈ° μ „)에 이슈λ₯Ό λ¨Όμ € 생성해야 ν•œλ‹€.
    • Remote μ €μž₯μ†Œμ˜ Merge λŠ” β€œλ°˜λ“œμ‹œ μ½”λ“œ 리뷰가 μ§„ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.”
      • μ½”λ“œ 리뷰 없이 Merge λŠ” μ—†λ‹€.
    • 이슈 κ΄€λ¦¬λŠ” Github κΈ°λŠ₯을 ν™œμš©ν•œλ‹€.
      • λͺ¨λ“  μž‘μ—…μ„ μ§„ν–‰ν•˜κΈ° 전에(브랜치 μƒμ„±ν•˜κΈ° μ „)에 이슈λ₯Ό λ¨Όμ € 생성해야 ν•œλ‹€.
      • Label
        • codereview: code review
        • hotfix: bug fix
        • docs: documentations
        • enhance: new feature or request
        • discussion: Discussion
    • Branch
      • feature/이슈번호
      • λͺ¨λ“  μž‘μ—…ν•œ feature λΈŒλžœμΉ˜λŠ” Merge 후에도 μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€.
    • Commit Message Template
      • init
      • feature
      • hotfix
      • refactor
      • docs
      • chore
      • feature: μˆ™λ°• ν›„κΈ° κΈ°λŠ₯
        line break
        λ‚΄μš© μž‘μ„±
        

πŸš€ κ΅¬ν˜„ κ³Όμ •

βœ… Version-1

Login

login

  • Redis 에 RefreshToken

μ£Όλ¬Έ 생성 μš”μ²­

simple-v1-create-order-not-payment

  • 결제 μ„œλΉ„μŠ€ 미적용