Skip to content

🚘 티디디❓- μ‚¬μš©μž κ²½ν—˜μ„ κ³΅μœ ν•˜λŠ” μžλ™μ°¨ μ‹œμŠΉ ν”Œλž«νΌ

Notifications You must be signed in to change notification settings

softeerbootcamp/Team1-TDD

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš˜μ‚¬μš©μžκ°„ μ°¨λŸ‰ κ²½ν—˜μ„ κ³΅μœ ν•˜λŠ” μ›Ή 기반 C2C μ‹œμŠΉ ν”Œλž«νΌ TDDμž…λ‹ˆλ‹€.(https://letstdd.site)

μ†Œκ°œ

TDD μ„œλΉ„μŠ€λŠ” μ‚¬μš©μžλ“€κ°„ μ‹œμŠΉμ„ κ³΅μœ ν•¨μœΌλ‘œμ„œ μ°¨λŸ‰μ— λŒ€ν•œ λ‹€μ±„λ‘œμš΄ κ²½ν—˜μ„ μ œκ³΅ν•˜κ³ μž κΈ°νšλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” TDDμ„œλΉ„μŠ€λ₯Ό 톡해 μ‚¬μš©μžλ“€μ—κ²Œ μ°¨λŸ‰μ— λŒ€ν•œ μš°μˆ˜ν•œ μ ‘κ·Όμ„±κ³Ό λ‹€μ–‘ν•œ κ²½ν—˜μ„ ν™•λŒ€ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ‚¬μš©μžλ“€κ°„μ˜ μ‹œμŠΉμ„ κ³΅μœ ν•¨μœΌλ‘œμ„œ μ°¨λŸ‰μ— λŒ€ν•œ μš°λ¦¬λŠ” 이 λΆˆνŽΈν•¨λ“€μ„ ν•΄κ²°ν•˜κ³ μž ν–ˆμŠ΅λ‹ˆλ‹€. 세뢀적인 κ³ λ―Ό 사항듀을 혼자 가지고 μžˆμ§€ 말고, κ²½ν—˜μ„ μ΄μš©ν•΄λ³΄λ©΄μ„œ μ‹œμž‘ν•΄λ³΄μ„Έμš”.

μžλ™μ°¨ μ‹œμŠΉμ„ 해보고 싢은 μœ μ €μ™€ μžλ™μ°¨λ₯Ό λŒ€μ—¬ν•΄μ£Όκ³  이득을 μ·¨ν•˜κ³  싢은 μœ μ €λ₯Ό λ§€μΉ­ν•΄μ£ΌλŠ” ν”Œλž«νΌμž…λ‹ˆλ‹€. μ°¨λ₯Ό κ΅¬λ§€ν•˜κΈ° μ „ λ‹€μ–‘ν•œ μ°¨λ₯Ό 직접 μ²΄ν—˜ν•΄ 보고싢은 μ‚¬μš©μž, μ‹€μ œ μ‚¬μš©μžμ˜ μ‹€μ‚¬μš© ν›„κΈ°λ₯Ό 듣고싢은 μ‚¬μš©μžλ₯Ό λ§€μΉ­ν•΄μ€λ‹ˆλ‹€.

λˆ„κ°€ μ΄μš©ν•˜λ‚˜μš”?

  • 주변에 μ‹œμŠΉν•  곳이 λ§ˆλ•…νžˆ μ—†λŠ” μ‚¬μš©μž
  • λ‹€μ–‘ν•œ μ°¨λ₯Ό μ²΄ν—˜ν•΄λ³΄κ³  싢은 μ‚¬μš©μž
  • μ‹€μ œ μ‚¬μš©μžμ˜ 객관적인 리뷰λ₯Ό 듣고싢은 μ‚¬μš©μž

μž₯점

  • 주변에 μ‹œμŠΉν•  수 μžˆλŠ” 곳이 λ§ˆλ•…μΉ˜ μ•Šμ€ μ‚¬λžŒλ“€μ—κ²Œ 비ꡐ적 κ°€κΉŒμš΄ 거리와 λ‹€μ–‘ν•œ μ‹œκ°„λŒ€μ— μ‹œμŠΉν•  수 μžˆλŠ” 기회λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.
  • λ‚΄κ°€ μ›ν•˜λŠ” μ˜΅μ…˜μ˜ μ°¨λŸ‰, λ‚˜μ™€ λΉ„μŠ·ν•œ ν™˜κ²½μ—μ„œ μƒν™œν•˜λŠ” μ‚¬λžŒμ˜ μ°¨λŸ‰μ„ κ²½ν—˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ‹€μ œ μ°¨λŸ‰ μ†Œμœ μžμ˜ 객관적인 리뷰λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν™•μž₯μ„±

μ§€κΈˆμ€ "μ°¨"λΌλŠ” 도메인, "μ‹œμŠΉ"μ΄λΌλŠ” μ„œλΉ„μŠ€μ— ν•œμ •λ˜μ–΄ μžˆμ§€λ§Œ 이λ₯Ό ν™•μž₯μ‹œμΌœ λͺ¨λ“  물건에 λŒ€ν•΄ μ‚¬μš©μžλ“€λΌλ¦¬ μ²΄ν—˜ν•  수 μžˆλ„λ‘ λ§€μΉ­μ‹œμΌœμ£ΌλŠ” ν”Œλž«νΌμœΌλ‘œ λ°œμ „ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

tdd

Let’s TDD. Try, Drive, Delightly. TDDμ—μ„œ T와 Dλ₯Ό 가지고 핸듀을 μΆ”μƒν™”ν–ˆμŠ΅λ‹ˆλ‹€. 전체적인 λͺ¨μ–‘은 곡유 핀을 ν˜•μƒν™”ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯ 캑쳐

(μ‹œμ—° μ˜μƒ)

Database ERD

스크란샷 2023-02-22 α„‹α…©α„Œα…₯ᆫ 11 00 06

ν”„λ‘œμ νŠΈ νŠΉμ§•

Github Actionκ³Ό Docker둜 κ΅¬μ„±ν•œ CI/CD

dev λΈŒλžœμΉ˜μ— mergeλ˜λŠ” ν˜Ήμ€ pushλ˜λŠ” λͺ¨λ“  λ‚΄μš©μ€ λΉŒλ“œ/ν…ŒμŠ€νŠΈλ₯Ό μžλ™μœΌλ‘œ μˆ˜ν–‰ν•˜μ—¬ ν΄λΌμš°λ“œ μ„œλ²„(aws ec2)에 배포되고 μžˆμŠ΅λ‹ˆλ‹€.

Dockerλ₯Ό μ΄μš©ν•΄ 이미지 λ‹¨μœ„λ‘œ Github Action을 톡해 배포 νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μ„±ν–ˆμœΌλ©° ν΄λΌμš°λ“œ μ„œλ²„μ—μ„œ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ„μš°λŠ” κ²ƒμœΌλ‘œ λ°°ν¬ν–ˆμŠ΅λ‹ˆλ‹€.

β†’ Github action λ³΄λŸ¬κ°€κΈ°

Swagger와 ν•¨κ»˜ν•œ ν”„λ‘ νŠΈμ™€μ˜ ν˜‘μ—…

API λ¬Έμ„œ μžλ™ν™” 도ꡬ인 Swaggerλ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘ νŠΈμ—”λ“œ 개발자 λΆ„λ“€κ³Ό ν˜‘μ—…ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒκ³Ό 같이 μ½”λ“œκΈ°λ°˜ API Docs μžλ™μƒμ„±μ„ 톡해 ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμžλΆ„λ“€μ΄ 일일이 json을 λ©΄λŒ€λ©΄ ν˜Ήμ€ μ½”λ“œλ‘œ 확인해 λ³Ό ν•„μš”μ—†μ΄ ν˜‘μ—…ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

β†’ swagger API Docs λ³΄λŸ¬κ°€κΈ°

image

Code conventionκ³Ό ν•¨κ»˜ν•˜λŠ” ν˜‘μ—…

μ½”λ”© μ»¨λ²€μ…˜μ„ μ€€μˆ˜ν•˜λ©΄ 가독성이 쒋아지고 μ„±λŠ₯에 영ν–₯을 μ£Όκ±°λ‚˜ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€λŠ” 잠재적인 μœ„ν—˜ μš”μ†Œλ₯Ό μ€„μ—¬μ€˜ μœ μ§€λ³΄μˆ˜ λΉ„μš©μ„ 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

IntelliJ의 Code style Formatterλ₯Ό μ΄μš©ν•˜μ—¬ μ½”λ“œ μ»¨λ²€μ…˜μ„ μ€€μˆ˜ν•  수 μžˆλ„λ‘ κ°•μ œν–ˆκ³  IntelliJ의 Plugin 쀑 ν•˜λ‚˜μΈ Check style 정적 μ½”λ“œ 뢄석 도ꡬλ₯Ό μ΄μš©ν•˜μ—¬ μ§€μ •λœ κ·œμΉ™μ— μ–΄κΈ‹λ‚˜λŠ” 경우 commit μ‹œ κ²½κ³ λ₯Ό 톡해 μ½”λ“œ μ»¨λ²€μ…˜μ„ μ€€μˆ˜ν–ˆμŠ΅λ‹ˆλ‹€.

image

μ½”λ“œ 리뷰와 ν•¨κ»˜ν•˜λŠ” 개발

μ½”λ“œ λ¦¬λ·°μ—†μ΄λŠ” 개발 브랜치인 dev 에 merge ν•  수 없도둝 κ°•μ œν–ˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ 리뷰λ₯Ό 톡해 μ½”λ“œμ˜ ν’ˆμ§ˆμ„ κ°œμ„ ν•˜κ³  λ‹€λ₯Έ νŒ€μ›λ“€μ΄ κ°œλ°œν•œ λ‘œμ§μ„ μ΄ν•΄ν•˜κ³  ν˜‘μ—…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

β†’ μ½”λ“œλ¦¬λ·° λ³΄λŸ¬κ°€κΈ°

HTTPS SSL

SSL μΈμ¦μ„œλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°„μ˜ 톡신을 제3μžκ°€ λ³΄μ¦ν•΄μ£ΌλŠ” μ „μžν™”λœ λ¬Έμ„œμž…λ‹ˆλ‹€.

SSLν”„λ‘œν† μ½œμ„ μ΄μš©ν•˜μ—¬ μ„œλ²„μ™€ ν΄λΌμ΄μ–ΈνŠΈ μ‚¬μ΄μ˜ λͺ¨λ“ λ°μ΄ν„°λ₯Ό μ•”ν˜Έν™” ν–ˆμŠ΅λ‹ˆλ‹€.

image

βš™οΈ 아킀텍쳐

image

배포

image

πŸ›  기술 μŠ€νƒ

βœ”οΈ Frond-end

βœ”οΈ Back-end

βœ”οΈ Deploy

μ‚¬μš©ν•œ 기술과 이유

  • Typescript: TypescriptλŠ” Object의 νƒ€μž…μ„ λͺ…μ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό μ‹€μ œλ‘œ μ‚¬μš©ν•˜κΈ° 전에 μžˆμ„λ§Œν•œ νƒ€μž… μ—λŸ¬λ“€μ„ 미리작기 μœ„ν•΄ μ‚¬μš©ν•©λ‹ˆλ‹€. 또 κ°œλ°œλ„κ΅¬μ—κ²Œ κ°œλ°œμžκ°€ μ˜λ„ν•œ λ³€μˆ˜λ‚˜ ν•¨μˆ˜λ“±μ˜ λͺ©μ μ„ λ”μš± λͺ…ν™•ν•˜κ²Œ 전달 κ°€λŠ₯ν•˜κ³  μ „λ‹¬λœ 정보λ₯Ό 기반으둜 μ½”λ“œ μžλ™μ™„μ„±μ΄λ‚˜ 잘λͺ»λœ λ³€μˆ˜/ν•¨μˆ˜ μ‚¬μš©μ— λŒ€ν•œ μ—λŸ¬ μ•Œλ¦Ό 같은 ν’λΆ€ν•œ ν”Όλ“œλ°±μ„ 받을 수 있게 λ˜λ―€λ‘œ 순수 μžλ°”μŠ€ν¬λ¦½νŠΈμ— λΉ„ν•΄ 생상성 ν–₯상을 κΎ€ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
  • SCSS: CSSλŠ” HTML νƒœκ·Έλ₯Ό κΎΈλ―Έκ±°λ‚˜ 효과λ₯Ό λ„£μ–΄ μ£ΌλŠ” λ“± λ””μžμΈ μš”μ†Œλ₯Ό μΆ”κ°€ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ „μ²˜λ¦¬ κ³Όμ •μž…λ‹ˆλ‹€. ν”„λ‘œμ νŠΈ 규λͺ¨κ°€ 컀지면 CSSλŠ” λΆˆκ°€ν”Όν•˜κ²Œ 가독성이 λ–¨μ–΄μ§€λŠ” λ“± μœ μ§€λ³΄μˆ˜μ˜ 어렀움을 μ£ΌλŠ” μš”μ†Œκ°€ λ©λ‹ˆλ‹€. μ½”λ“œμ˜ μž¬ν™œμš©μ„±μ„ 올리고, 가독성을 μ˜¬λ¦¬λŠ” λ“± CSSμ—μ„œ 보이던 단점을 λ³΄μ™„ν•˜κ³ , 개발의 νš¨μœ¨μ„ 올리기 μœ„ν•΄ SCSSλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€. λŒ€ν‘œμ μΈ μž₯μ μœΌλ‘œλŠ” λ³€μˆ˜ μ‚¬μš© κ°€λŠ₯, nesting(쀑첩) κ°€λŠ₯, mixin, import, export μ‚¬μš© κ°€λŠ₯, 흐름 μ œμ–΄ κ°€λŠ₯의 νŽΈλ¦¬ν•œ κΈ°λŠ₯듀이 μžˆμŠ΅λ‹ˆλ‹€.
  • Axios: Β response timeout (fetchμ—λŠ” μ—†λŠ” κΈ°λŠ₯) 처리 방법이 μ‘΄μž¬ν•©λ‹ˆλ‹€. Promise 기반으둜 λ§Œλ“€μ–΄μ‘ŒκΈ° λ•Œλ¬Έμ— 데이터 닀루기 νŽΈλ¦¬ν•©λ‹ˆλ‹€. λ˜ν•œν¬λ‘œμŠ€ λΈŒλΌμš°μ§• μ΅œμ ν™”λ‘œ λΈŒλΌμš°μ € ν˜Έν™˜μ„±(κ΅¬ν˜• λΈŒλΌμš°μ € 지원)이 λ›°μ–΄λ‚˜κΈ°μ— μ±„νƒν–ˆμŠ΅λ‹ˆλ‹€.
  • Google Maps API: 초기 λ Œλ”λ§ μ‹œ λΉ λ₯΄λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. 평균 λ Œλ”λ§ μ‹œκ°„μ΄ 38.6ms둜 μ§€λ„μ—μ„œ 검색 κΈ°λŠ₯을 μ§€μ›ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 속도 λ©΄μ—μ„œ 여타 λ‹€λ₯Έ 지도 API에 λΉ„ν•΄ μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. Google Maps APIλŠ” ν•΄μ™Έμ˜ μ§€λ„κΉŒμ§€ 지원해주기 λ•Œλ¬Έμ— μ„œλΉ„μŠ€μ˜ ν™•μž₯μ„±κΉŒμ§€ κ³ λ €ν–ˆκ³ , κ΅­λ‚΄μ—μ„œ μ œκ³΅ν•΄μ£ΌλŠ” 지도에 λΉ„ν•΄ μ„Έκ³„μ μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 지도이기 λ•Œλ¬Έμ— κ΄€λ ¨ Referenceκ°€ λ§Žμ•„ 이λ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.
  • JWT: μ‚¬μš©μžμ˜ 둜그인 인증 및 κΆŒν•œ μœ μ§€ 기술둜 JWT토큰 방식을 μ„ νƒν•˜μ˜€μŠ΅λ‹ˆλ‹€. JWT기반 μ‚¬μš©μž 인증 및 κΆŒν•œ μœ μ§€

λ‹Ήλ©΄ν–ˆλ˜ 문제

  • CORS
  • Cookie
  • Geolocation, Reverse Geocoder
  • μ»΄ν¬λ„ŒνŠΈ 방식 new ν‚€μ›Œλ“œμ™€ subscribe
  • SCSS module hashing Collision
  • λ‚˜μ€‘μ— μΆ”κ°€ν•˜κ³  싢은 κΈ°λŠ₯

4. ν”„λ‘œμ νŠΈ μ„€μΉ˜ 및 μ‹€ν–‰ 방법

FE

cd ./frontend
npm install
npm run dev //localhost:5173

BE

cd ./backend
./gradlew bootJar
java -jar ./build/libs/back-end-0.0.1-SNAPSHOT.jar 

5. ν”„λ‘œμ νŠΈ μ‚¬μš© 방법

  • μ‚¬μš©μž/κΈ°μ—¬μžλ“€μ΄ ν”„λ‘œμ νŠΈλ₯Ό μ΄μš©ν•  수 μžˆλŠ” 방법과 μ˜ˆμ‹œ
  • μ˜ˆμƒ λ¬Έμ œμ— λŒ€ν•œ 참고사항
  • ν”„λ‘œμ νŠΈ μ‹€ν–‰ μ˜ˆμ‹œ ν™”λ©΄μ˜ μŠ€ν¬λ¦°μƒ·
  • ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš©λœ κ΅¬μ‘°λ‚˜ λ””μžμΈ 원칙을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

🀝 νŒ€μ›

FE

이민재 이제영
@MyuB @2je0

BE

κΉ€κ°•μ‚° 김지언 λ°•μŠΉλ―Ό
@River-Mt @jieonkim23 @psm9718

ν”„λ‘œμ νŠΈμ— κΈ°μ—¬ν•˜λŠ” 방법

  • λ‹€λ₯Έ κ°œλ°œμžλ“€μ΄ ν”„λ‘œμ νŠΈμ— μ–΄λ–»κ²Œ κΈ°μ—¬ν•  수 μžˆλŠ”μ§€μ— λŒ€ν•œ κ°€μ΄λ“œλΌμΈ

ν…ŒμŠ€νŠΈ

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•΄ 예제 μ½”λ“œμ™€ μ‹€ν–‰ 방식

About

🚘 티디디❓- μ‚¬μš©μž κ²½ν—˜μ„ κ³΅μœ ν•˜λŠ” μžλ™μ°¨ μ‹œμŠΉ ν”Œλž«νΌ

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published