Skip to content

πŸ“–λ„μ„œκ΅¬λ§€μžλ“€μ„ μœ„ν•œ λ„μ„œ μ‚¬μ΄νŠΈ μž…λ‹ˆλ‹€

Notifications You must be signed in to change notification settings

hahahaday12/WinkBook

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“– WinkBook

🎈 ν”„λ‘œμ νŠΈ μ†Œκ°œ

λ„μ„œκ΅¬λ§€μžλ“€μ„ μœ„ν•œ λ„μ„œ μ‚¬μ΄νŠΈ μž…λ‹ˆλ‹€.

Wink_logo

WinkBook은 e-book을 νŒλ§€ν•˜λŠ” μ»¨μ…‰μ˜ μ‡Όν•‘λͺ° μ‚¬μ΄νŠΈ μž…λ‹ˆλ‹€.
λ‹€μ–‘ν•œ λ―Έλ””μ–΄κ°€ λ°œλ‹¬ν•¨ μœΌλ‘œμ„œ 책에 λ©€μ–΄μ§€λŠ” ν˜„λŒ€μΈλ“€μ„ μœ„ν•΄, μ‘°κΈˆλ” μΉœμˆ™ ν•˜κ²Œ 책에 λ‹€κ°€κ°ˆμˆ˜ μžˆλ„λ‘ e-book의 컨셉을 작게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μ§€λ£¨ν•˜μ§€ μ•Šμ€ λŠλ‚Œμ„ μ£ΌκΈ° μœ„ν•΄ λ§Œν™”μ±… 처럼 채도가 μžˆλŠ” μ‚¬μ΄νŠΈ UIλ₯Ό λ§Œλ“€κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
총 5개의 λ„μ„œλ³„ μΉ΄ν…Œκ³ λ¦¬κ°€ λ‚˜λˆ μ Έ 있으며 μ‹€μ œ λ„μ„œ μ‚¬μ΄νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 상세 μ„€λͺ…을 λ‚˜νƒ€λ‚΄λ„λ‘ ν–ˆμŠ΅λ‹ˆλ‹€.
μ‡Όν•‘λͺ°μ„ λ§Œλ“€ λ•Œ μΆ©λΆ„νžˆ ν™œμš©ν•  수 μžˆλŠ” μ‚¬μ΄νŠΈλ₯Ό κ°œμ„€ν•˜μžλŠ” λͺ©ν‘œλ₯Ό 가지고 진행 λ˜μ—ˆμœΌλ©°, μ‹€μ œ μ˜€ν”ˆ Apiλ₯Ό ν™œμš©ν•˜μ—¬ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.


πŸ“… ν”„λ‘œμ νŠΈ κΈ°κ°„

2023.05.30 ~ 2023.07.02


πŸ“ 배포 URL

WinkBook (μœ™ν¬λΆ μ‡Όν•‘λͺ° νŽ˜μ΄μ§€ )

WinkBook-Admin (μœ™ν¬λΆ κ΄€λ¦¬μž νŽ˜μ΄μ§€)


μ‹œμž‘ κ°€μ΄λ“œ

Requirements

For building and running the application you need:

Installation

$ git clone [email protected]:hahahaday12/WinkBook.git
$ cd client

Frontend

$ cd client
$ npm install 
$ npm run dev

πŸ–₯전체 ν™”λ©΄ ꡬ성

메인 νŽ˜μ΄μ§€ 메인 νŽ˜μ΄μ§€ 메인 νŽ˜μ΄μ§€
메인 어바웃 어바웃
νšŒμ›κ°€μž… νŽ˜μ΄μ§€ 둜그인 νŽ˜μ΄μ§€
νšŒμ›κ°€μž… 둜그인
상세정보 νŽ˜μ΄μ§€ 상세정보 νŽ˜μ΄μ§€
상세정보 νŽ˜μ΄μ§€ λ§ˆμ΄νŽ˜μ΄μ§€ μ£Όλ¬Έ 상세
μž₯λ°”κ΅¬λ‹ˆ νŽ˜μ΄μ§€ μ£Όλ¬Έ νŽ˜μ΄μ§€
상세정보 νŽ˜μ΄μ§€ λ§ˆμ΄νŽ˜μ΄μ§€ μ£Όλ¬Έ 상세
μ œν’ˆκ²€μƒ‰ νŽ˜μ΄μ§€ 마이 νŽ˜μ΄μ§€
μ œν’ˆκ²€μƒ‰νŽ˜μ΄μ§€ λ§ˆμ΄νŽ˜μ΄μ§€ μ£Όλ¬Έ 상세
νšŒμ›μ •λ³΄ μˆ˜μ • νŽ˜μ΄μ§€ κ²°κ³Ό λͺ¨λ‹¬
νšŒμ›μ •λ³΄ μˆ˜μ • κ²°κ³Ό λͺ¨λ‹Ήμ°½
κ΄€λ¦¬μž νŽ˜μ΄μ§€ (μƒν’ˆ 관리) κ΄€λ¦¬μž νŽ˜μ΄μ§€ (μƒν’ˆλ“±λ‘ 관리)
κ΄€λ¦¬μžνŽ˜μ΄μ§€ μƒν’ˆκ΄€λ¦¬ μ‚¬μš©μž 관리
κ΄€λ¦¬μž νŽ˜μ΄μ§€ (νšŒμ›μ •λ³΄ 관리) κ΄€λ¦¬μž νŽ˜μ΄μ§€ (ꡬ맀정보 관리)
λ§ˆμ΄νŽ˜μ΄μ§€ κ°œμΈμ •λ³΄ μˆ˜μ • bκ΄€λ¦¬μžνŽ˜μ΄μ§€ μ‚¬μš©μž 관리uy


ν”„λ‘œμ νŠΈ κ΅¬ν˜„μ€‘ 마주친 문제점 κ³Ό ν•΄κ²°λ°©μ•ˆ

πŸ”₯ 문제 1. μ„œλ‘œ λ‹€λ₯Έ λ„λ©”μΈμœΌλ‘œ μΈν•œ cors 였λ₯˜

-> corse 였λ₯˜λž€?
corseλŠ” "ꡐ차 좜처 λ¦¬μ†ŒμŠ€ 곡유" 이며, μ›Ή λΈŒλΌμš°μ €μ—μ„œ μ‹€ν–‰λ˜λŠ” μŠ€ν¬λ¦½νŠΈκ°€ λ‹€λ₯Έ 좜처(도메인, ν”„λ‘œν† μ½œ, 포트)의 λ¦¬μ†ŒμŠ€μ— μ ‘κ·Όν•  λ•Œ λ³΄μ•ˆ μƒμ˜ 이유둜 λ°œμƒν•˜λŠ” 였λ₯˜ μž…λ‹ˆλ‹€.
( url μ•žλΆ€λΆ„μ„ 보면 protocol, host, portκ°€ μ ν˜€μžˆλŠ”λ°, 이 뢀뢄이 λ‹€λ₯΄κ²Œ μš”μ²­μ΄ λ“€μ–΄κ°€λ©΄ CORSμ—λŸ¬κ°€ λ°œμƒ ν•©λ‹ˆλ‹€.)

corse λ™μž‘ 방식

image

πŸŽ‡ν•΄κ²°

-> Vite ν™˜κ²½μ—μ„œμ˜ Proxy μ„€μ •. ν”„λ‘œμ νŠΈ ν™˜κ²½μ— 맞게 Proxyλ₯Ό μ„€μ • ν•΄μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. ProxyλŠ” API둜 λ„€νŠΈμ›Œν¬ μš”μ²­/응닡을 μ£Όκ³  λ°›λŠ” client와 server 사이λ₯Ό μ€‘κ°œν•˜λŠ” μ€‘κ°„μž μ—­ν•  μž…λ‹ˆλ‹€.
Proxy 섀정을 ν•œλ‹€λ©΄ μš”μ²­μ„ 날릴 λ•Œ origin을 λ°”κΏ”μ„œ server에 날릴 수 μžˆκΈ°λ•Œλ¬Έμ— ν•΄λ‹Ή 방법을 μ„ νƒν–ˆμŠ΅λ‹ˆλ‹€.
Viteμ—μ„œ Proxy μ„€μ • 방법 -> vite.config.jsonμ—μ„œ Proxy 경둜λ₯Ό μ„€μ •.
image

πŸ”₯ 문제2. 카페24μ—μ„œ μ œν’ˆμ‘°νšŒ apiλ₯Ό μ΄μš©ν•˜μ—¬ 상세 νŽ˜μ΄μ§€λ₯Ό λ‚˜νƒ€λ‚΄κ³ μžˆμœΌλ©° ꡬ맀, λŒ€μ—¬ λ²„νŠΌ 클릭에 따라 μž₯λ°”κ΅¬λ‹ˆμ—μ„œλ„ λ‹€λ₯΄κ²Œ 담겨야 ν•œλ‹€.

-> μ œν’ˆ 쑰회 ν• λ•Œ μ˜€λŠ” λ°μ΄ν„°μ˜ property에 ꡬ맀, λŒ€μ—¬λ₯Ό κ΅¬λΆ„ν•΄μ€„μˆ˜ μžˆλŠ” 값이 μ—†μ—ˆμŠ΅λ‹ˆλ‹€.
(# 상세 νŽ˜μ΄μ§€μ— λ‚˜μ˜€λŠ” μ œν’ˆ property 사진)
image

πŸŽ‡ν•΄κ²°

-> 상세 νŽ˜μ΄μ§€μ—μ„œ ꡬ맀, λŒ€μ—¬λ₯Ό ν΄λ¦­ν• λ•Œ μ œν’ˆ μ‘°νšŒν•΄ μ˜€λŠ” api의 데이터에 keyκ°’,propertyλ₯Ό μΆ”κ°€ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
μ±…κ΅¬λ§€ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­μ‹œ detail의 정보에 property gubun 값을 μΆ”κ°€ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
따라 μ±… κ΅¬λ§€ν•˜κΈ° λ²„νŠΌ ν΄λ¦­μ‹œ gubun 값이 buy 둜 μΆ”κ°€ λ©λ‹ˆλ‹€. μž₯λ°”κ΅¬λ‹ˆ λ‹΄κΈ°μ˜ gubun 값은 rent 둜 μΆ”κ°€ λ©λ‹ˆλ‹€.

ꡬ맀

image

λŒ€μ—¬

image

πŸ”₯ 문제3. cafe24μ—μ„œ Admin κΆŒν•œμ„ μ–΄λ–»κ²Œ 받을 수 μžˆμ„κΉŒ?

-> μ–΄λ“œλ―Ό κΆŒν•œμ„ μœ„ν•œ μ°Έκ³ ν•œ api λ¬Έμ„œ image image

정리: μ–΄λ“œλ―Ό νŽ˜μ΄μ§€ 접속 ν•˜κΈ° μœ„ν•΄μ„  token이 ν•„μš”ν•œλ°, tokenμ—λŠ” code값이 ν•„μš”ν•˜λ‹€.
ν•΄λ‹Ή 값을 λ°œκΈ‰ λ°›κΈ° μœ„ν•΄μ„  카페24의 νŠΉμ • urlμ—μ„œ λ‘œκ·ΈμΈμ„ ν•˜λ©΄ μ£Όμ†Œμ°½μ— code값이 μƒμ„±λ˜κ³  이λ₯Ό λ°”νƒ•μœΌλ‘œ token μš”μ²­ apiλ₯Ό 보낸닀.
이후 받은 μ‘λ‹΅μœΌλ‘œ access token은 μΏ ν‚€, refresh token은 local storage에 μ €μž₯ν•˜κ²Œ λ˜λ―€λ‘œ 배포된 νŽ˜μ΄μ§€λ‘œ 접속을 ν•˜λ©΄ refresh token을 κ°–κ³  토큰을 μš”μ²­ν•˜λ―€λ‘œ μ–΄λ“œλ―Ό κΆŒν•œμ΄ λΆ€μ—¬λœλ‹€.

πŸŽ‡ν•΄κ²°

-> μœ„μ— μ„€λͺ…λœ 인증 μ½”λ“œ Request ν˜•μ‹ redirect_uri 뢀뢄에 νŒ€μ΄ λ°°ν¬ν•œ Admin 배포 url을 λ„£μ–΄ ν•΄λ‹Ή νŽ˜μ΄μ§€μ— μΈμ¦μ½”λ“œκ°€ λ°œκΈ‰λ˜κ³  인증 받은 token값이 μ €μž₯되며 배포된 μ–΄λ“œλ―Ό νŽ˜μ΄μ§€κ°€ λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

개발 정보 관리 Redirect URI(s) μ£Όμ†Œ

image

μ£Όμ†Œμ°½μ— url μž…λ ₯ν›„ λ³΄μ΄λŠ” AdminPage

ezgif com-video-to-gif (10)

πŸ”₯ 문제4. 둜그인이 λ˜μ–΄μžˆλŠ” μƒνƒœμ—μ„œ token이 만료 되면, ν—€λ”μ˜ λ‘œκ·Έμ•„μ›ƒ 뢀뢄이 ν΄λ¦­λ˜μ§€ μ•ŠμœΌλ©° 'μœ νš¨ν•˜μ§€ μ•ŠλŠ” μ‚¬μš©μž' 라고 401 의 μƒνƒœκ°’μ΄ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

μ—λŸ¬ λͺ¨μŠ΅

-> λ‘œκ·Έμ•„μ›ƒμ΄ ν΄λ¦­λ˜μ§€ μ•Šκ³  였λ₯˜ 메세지가 계속 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. ezgif com-video-to-gif (11)

πŸŽ‡ν•΄κ²°

-> header 뢀뢄에 μ—λŸ¬ μƒνƒœκ°’μ— λŒ€ν•œ 쑰건식을 λ„£μ–΄ μ—λŸ¬ μƒνƒœκ°’μ΄ 401 μΌμ‹œ token을 μ œκ±°ν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ£Όμ—ˆλ‹€.

μˆ˜μ •μ „ μ½”λ“œ

image

μˆ˜μ •ν›„ μ½”λ“œ

image

μˆ˜μ • κ²°κ³Ό

ezgif com-video-to-gif (12)

ν”„λ‘œμ νŠΈ 회고

-> 기쑴에 주어진 Api κ°€ μ•„λ‹Œ, μ‹€μ œ openApi λ₯Ό μ‚¬μš©ν•΄μ„œ μƒν’ˆμ„ λ“±λ‘ν•˜κ³ , λ“±λ‘ν•œ μƒν’ˆμ˜ 데이터λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μž‘μ—…μ΄ μž¬λ―Έλ°ŒκΈ°λ„ ν•˜λ©΄μ„œ μ–΄λ €μš΄ 뢀뢄도 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.
덕뢄에 개발 λ¬Έμ„œλ₯Ό λ³΄λŠ”λ²•μ„ μ•Œκ²Œ λ˜μ—ˆκ³ , νŒ€μ›λ“€κ³Ό ν•¨κ»˜ apiλ₯Ό 직접 μ •λ¦¬ν•΄λ΄„μœΌλ‘œμ„œ restApi 에 λŒ€ν•œ 이해도가 μƒκ²ΌμŠ΅λ‹ˆλ‹€.
μž₯λ°”κ΅¬λ‹ˆλ₯Ό λ‹΄λŠ” apiλ‚˜ , ꡬ맀 μ‘°νšŒμ— λŒ€ν•œ api κ°€ λ”°λ‘œ μžˆλŠ”κ²ƒμ΄ μ•„λ‹ˆμ—¬μ„œ 이 뢀뢄에 λŒ€ν•΄ μ–΄λ–»κ²Œ ν’€μ–΄ λ‚˜κ°ˆμ§€, 데이터λ₯Ό ν™œμš©ν• μˆ˜ μžˆλŠ” 방법에 λŒ€ν•΄μ„œ λ§Žμ€ 고민을 ν•΄λ³Όμˆ˜ μžˆλŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
μƒν™œ ν•˜λ©΄μ„œ 결제 λͺ¨λ“ˆλ‘œ 결제λ₯Ό ν•΄μ•Όν•  상황이 κ½€λ‚˜ 많이 있기 λ•Œλ¬Έμ— μ‹€κ±°λž˜ openApi (Import) λ₯Ό μ΄μš©ν•˜λ©° μ‘°κΈˆλ” μ‹€μ„œλΉ„μŠ€μ— κ°€κΉŒμš΄ κΈ°λŠ₯을 κ΅¬ν˜„ν•΄λ³Όμˆ˜ μžˆμ—ˆλ˜κ²ƒ κ°™μ•„μ„œ λΏŒλ“― ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
각 κΈ°λŠ₯λ“€μ—μ„œ 데이터 핸듀링을 ν•˜λ©°, μ–΄λ–»κ²Œ ν•˜λ©΄ μ‘°κΈˆλ” 가독성이 μ’‹κ³ , μ„±λŠ₯ 쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν• μˆ˜ μžˆμ„κΉŒ κ³ λ―Όν•΄ 볼수 μžˆλŠ” 계기가 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
이번 ν”„λ‘œμ νŠΈλ₯Ό ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ κΈ°λŠ₯적 κ΅¬ν˜„μ„ κ²½ν—˜ ν• μˆ˜ μžˆμ—ˆμœΌλ©°, λ‹€μŒλ²ˆμ—” μ‹€μ„œλΉ„μŠ€λ₯Ό ν• μˆ˜ μžˆμ„λ§Œν•œ ν€„λ¦¬ν‹°μ˜ ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€μ–΄ 보고 싢은 μš•μ‹¬λ„ μƒκΈ°κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

✨✨✨ refactoring ✨✨✨

1μ°¨ μ„±λŠ₯ 검진 (PageSpeed Insights ν™œμš©)

image
-> μ½”λ“œ ꡬ쑰 μˆ˜μ • X , 맨처음 배포된 μ„±λŠ₯ 점수 ν‘œ μž…λ‹ˆλ‹€.

2μ°¨ μ„±λŠ₯ 검진 μ½”λ“œ λ¦¬νŒ©ν† λ§ ν›„ (PageSpeed Insights ν™œμš©)

image
-> header searchInput μ»΄ν¬λ„ŒνŠΈ λͺ¨λ“ˆν™” , ν•„μš”μ—†λŠ” 이미지, μ½”λ“œ μ‚­μ œν›„ μ„±λŠ₯ 검사 점수 ν‘œμž…λ‹ˆλ‹€. μ„±λŠ₯ μ μˆ˜κ°€ μ˜¬λΌκ°”μœΌλ©°, 각각의 μ„±λŠ₯ 속도가 쑰금 빨라 진것이 λ³΄μž…λ‹ˆλ‹€.

3μ°¨ μ„±λŠ₯ 검진 μ½”λ“œ λ¦¬νŒ©ν† λ§ ν›„ (PageSpeed Insights ν™œμš©)

-> ν”„λ‘œμ νŠΈ νŠΉμ„±μƒ 이미지가 λ§Žμ€ 뢀뢄을 차지 ν•˜κΈ° λ•Œλ¬Έμ— μ΄λ―Έμ§€λΆ€λΆ„μ—μ„œ μ–΄λ–»κ²Œ ν•˜λ©΄ μ„±λŠ₯을 κ°œμ„ ν• μˆ˜ μžˆμ„μ§€ κ³ λ―Ό ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
κΈ°μ‘΄ openApi μ—μ„œ λ°›μ•„μ˜€λŠ” 이미지 ν˜•μ‹μ΄ jpg 둜 지정이 λ˜μ–΄μžˆκΈ° λ•Œλ¬Έμ— 이미지 ν˜•μ‹ λ³€ν™˜μ΄ μ–΄λ €μ› κ³ , 데이터에 μ €μž₯된 이미지가 μ•„λ‹Œ ν˜„ ν”„λ‘œμ νŠΈ public에 μ €μž₯λ˜μ–΄ μžˆλŠ” μ΄λ―Έμ§€μ˜ ν˜•μ‹μ„ λ³€ν™˜ν•΄ 보도둝 ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
PageSpeed Insightsμ—μ„œ 이미지λ₯Ό λ³€ν™˜ν•˜λŠ” 방식에 WenP, AVIF 의 ν˜•μ‹μ΄ κΈ°μ‘΄ JPEG 보닀 μ••μΆ•λ₯ μ΄ 놓고 λ‹€μš΄λ‘œλ“œκ°€ λΉ λ₯΄λ‹€λŠ” 정보λ₯Ό μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. 따라 ν”„λ‘œμ νŠΈμ— μ €μž₯된 μ΄λ―Έμ§€μ˜ ν˜•μ‹μ„ AVIF ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
image

λ³€ν™˜λœ 파일 사진 image

λ³€ν™˜ν›„ μ„±λŠ₯ 검진

image

-> 2μ°¨ μ„±λŠ₯ 검진 보닀 λ‘œλ”© 속도도 λΉ λ₯΄κ³  , μ„±λŠ₯ μ μˆ˜λ„ μ˜¬λΌκ°„κ²ƒ 이 보이며 νŽ˜μ΄μ§€λ₯Ό μ²˜μŒλ“€μ–΄μ˜¬λ•Œ ν™”λ©΄ λ‘œλ”©μ΄ 쑰금 빨라진것도 느끼게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
쑰그만 λΆ€λΆ„μ—μ„œλ„ μ„±λŠ₯ κ°œμ„ μ΄ μ΄λ€„μ§€λŠ” 것을 λ³΄λ©΄μ„œ, μ„±λŠ₯에 λŒ€ν•΄ μ‹ κ²½μ“°λ©° κΈ°λŠ₯ κ΅¬ν˜„ ν•˜λŠ”κ²ƒμ΄ μ€‘μš”ν•˜λ‹€λŠ” 것을 느끼게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λ˜ν•œ μ„±λŠ₯ κ°œμ„ μ„ μœ„ν•΄ 자료λ₯Ό 찾아보며 λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ κ°œμ„ μ΄ μ΄λ€„μ§€λŠ” 것을 κΉ¨λ‹«κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œ λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ μ„±λŠ₯ κ°œμ„ μ„ ν•΄λ³Ό μƒκ°μž…λ‹ˆλ‹€.

4μ°¨ μ½”λ“œ λ¦¬νŒ©ν† λ§

πŸ“Œ Mainpage lazyloading 적용

πŸ“Œ 둜그인 react-hook-form 적용


🌟 ν”„λ‘œμ νŠΈ κ΅¬ν˜„ λ‹΄λ‹Ή κΈ°λŠ₯ μ„€λͺ…

🎈 1) 둜그인

-> νšŒμ›κ°€μž…ν•œ μ •λ³΄λ‘œ 둜그인 정보λ₯Ό μž…λ ₯ν•˜κ²Œ 되고 , μž…λ ₯ν›„ 등둝 ν•˜κ²Œ 되면 Signin μ΄λΌλŠ” ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ³ , λ§Œμ•½ μž…λ ₯창에 μ§€μ •ν•œ 쑰건이 μž…λ ₯λ˜μ§€ μ•ŠμœΌλ©΄ κ°€μž…μ΄ λ˜μ§€μ•Šκ²Œ return false둜 지정해 λ‘μ—ˆμŠ΅λ‹ˆλ‹€.
쑰건에 맞게 μž…λ ₯이 되면 μ„œλ²„μ— 둜그인 정보λ₯Ό λ³΄λ‚΄κ²Œ 되고 , μ„œλ²„μ—μ„œ token 값을 λ°›μ•„ localStorage 에 μ €μž₯ν•˜λ„λ‘ κ΅¬ν˜„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
token 을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ₯Ό μ‹λ³„ν•˜κ³  , μ‚¬μš©μžμ˜ μ„Έμ…˜μœ μ§€, μ ‘κ·ΌκΆŒν•œ λΆ€μ—¬λ₯Ό ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image

πŸŒŸμ΅œμ’… 둜그인 κ΅¬ν˜„λͺ¨μŠ΅

-> <사진 첨뢀 ν•„μš”>

🎈2) νšŒμ›κ°€μž…

-> form νƒœκ·Έλ₯Ό μ΄μš©ν•˜μ—¬ μ‚¬μš©μž μΉœν™”μ μΈ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“€κ³  , μ•ˆμ˜ 데이터 μš”μ†Œλ“€μ„ κ·Έλ£Ήν™” ν•˜μ—¬ μ„œλ²„μ—κ²Œ 데이터λ₯Ό κ°„μ†Œν™” ν•˜μ—¬ 전달 ν•˜κ²Œ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
-> λΉ„λ°€λ²ˆν˜Έ μœ νš¨μ„± 검사에 λŒ€ν•œ μƒνƒœκ°’μ„ μ €μž₯ν• μˆ˜ μžˆλ„λ‘ isEmail 의 state λ₯Ό μƒμ„±ν–ˆκ³ , μƒνƒœμ— λ”°λ₯Έ 였λ₯˜ 메세지λ₯Ό μ €μž₯ν• μˆ˜ μžˆλŠ” 였λ₯˜ μƒνƒœμ˜ emailMessage 의 state λ₯Ό 생성 ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
이후, μ‘°κ±΄μ‹μœΌλ‘œ 이메일 μœ νš¨μ„± 검사λ₯Ό ν•˜μ—¬ μ§€μ •λœ 쑰건식에 맞으면 그에 λ”°λ₯Έ μƒνƒœ 메세지λ₯Ό setIsEmailμ•ˆμ— μ €μž₯해두고 , μƒνƒœκ°’μ„ setEmailMessage μ•ˆμ— μ €μž₯ν•΄λ‘μ—ˆμŠ΅λ‹ˆλ‹€.
따라 μ‚¬μš©μžκ°€ 이메일을 μž…λ ₯쀑에 μžˆμ„λ•Œ 쑰건식에 λ§žμ§€ μ•ŠμœΌλ©΄ μ•„λž˜μ— ν•΄λ‹Ή μƒνƒœκ°’μ— λŒ€ν•œ 였λ₯˜ 메세지가 좜λ ₯λ©λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image
image

-> νšŒμ›μ •λ³΄λ₯Ό μž…λ ₯ν›„ 등둝 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ type 이 submit 인 {signUp} μ΄λΌλŠ” ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜κ³  μ‘°κ±΄μ‹μœΌλ‘œ μ ν˜€μ§€μ§€ μ•Šμ€ κΈ°μž… λž€μ΄ μ‘΄μž¬ν•˜λ©΄ return false둜 진행을 멈μΆ₯λ‹ˆλ‹€.
κ°€μž… 쑰건이 맞으면 μ„œλ²„λ‘œ μž…λ ₯정보듀을 μ „λ‹¬ν•˜κ³  token값을 받아와 성곡 μ—¬λΆ€μ˜ μ•Œλ¦Όμ΄ λœΉλ‹ˆλ‹€.
μ˜ˆμ™Έ μ²˜λ¦¬λ‘œλŠ” μ„œλ²„μ—μ„œ μ˜€λŠ” μƒνƒœκ°’μ— 따라 μ•Œλ¦Ό, μ½˜μ†” 창에 λ‚˜νƒ€λ‚˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image
image
image
image

πŸŒŸμ΅œμ’… νšŒμ›κ°€μž… κ΅¬ν˜„λͺ¨μŠ΅

image

🎈3) μƒμ„ΈνŽ˜μ΄μ§€

-> dataλΌλŠ” λ³€μˆ˜ μ•ˆμ— μ œν’ˆμ„ μ‘°νšŒν•˜λŠ” ν•¨μˆ˜ getList λ₯Ό μ‹€ν–‰ν›„ , productList μ œν’ˆλ¦¬μŠ€νŠΈ μ •λ³΄μ˜, product_no μ œν’ˆ 숫자λ₯Ό μž…λ ₯λ°›μ•„ ν•΄λ‹Ή μ•„μ΄ν…œμ˜ 정보λ₯Ό κ°€μ Έμ˜€κ²Œλ” κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
< Link > νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 각 μ•„μ΄ν…œμ— λŒ€ν•œ 링크λ₯Ό 생성후 , κ²½λ‘œκ°€ .product_no κ°’μ˜ 따라 μƒμ„±λ˜κ²Œ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image

-> useParams λ₯Ό μ‚¬μš©ν•΄ URLμ—μ„œ productNo λ§€κ°œλ³€μˆ˜λ₯Ό μΆ”μΆœν•˜κ³ , ν•΄λ‹Ή λ§€κ°œλ³€μˆ˜λ₯Ό ν™œμš©ν•˜μ—¬ μƒμ„ΈνŽ˜μ΄μ§€ getDetails API에 ν•¨μˆ˜ μ—μ„œ ν•΄λ‹Ή μƒν’ˆμ— λŒ€ν•œ μ„ΈλΆ€ 정보λ₯Ό κ°€μ Έμ˜€κ²Œλ” κ΅¬ν˜„ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image

πŸŒŸμ΅œμ’… μƒμ„ΈνŽ˜μ΄μ§€ κ΅¬ν˜„λͺ¨μŠ΅

image

🎈4)μž₯λ°”κ΅¬λ‹ˆ

-> ꡬ맀, λŒ€μ—¬ λ²„νŠΌ ν΄λ¦­μ‹œ detail에 λ‹΄μ•„μ Έ μžˆλŠ” 데이터와, μΆ”κ°€ν•  property 값을 맀개 λ³€μˆ˜λ‘œ λ„˜κ²¨μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.
μž₯λ°”κ΅¬λ‹ˆμ— λ‹΄μ„λ•Œ, μ€‘λ³΅λœ μƒν’ˆμ„ 제거 ν•˜κΈ°μœ„ν•΄ javascript의 Set 객체λ₯Ό μ‚¬μš©ν•˜κ³ , Spread Oprator λ₯Ό ν™œμš©ν•˜μ—¬ 쀑볡 제거된 값이 λ°°μ—΄λ‘œ λ³€ν™˜λ˜κ²Œ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
JSON ν˜•νƒœμ˜ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜μ—¬ 둜컬 μŠ€ν† λ¦¬μ§€μ— 'cart' ν‚€λ‘œ μ €μž₯ν•˜μ˜€κ³  이λ₯Ό 톡해 μž₯λ°”κ΅¬λ‹ˆ 데이터가 μœ μ§€ λ©λ‹ˆλ‹€.
κ·Έν›„ μƒνƒœκ°’μ˜ alert 창을 띄어 μ£Όμ—ˆμŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image image

-> μ˜ˆμ™Έμ²˜λ¦¬λ‘œ some() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ ν•˜λ‚˜ 이상 μš”μ†Œκ°€ 쑰건을 λ§Œμ‘±ν•˜λ©΄ true 값이 λ‚˜μ˜΅λ‹ˆλ‹€. 따라 , μž₯λ°”κ΅¬λ‹ˆμ— μžˆλŠ” μƒν’ˆλ²ˆν˜Έμ™€ ν˜„μž¬ μƒμ„ΈνŽ˜μ΄μ§€ μƒν’ˆμ •λ³΄κ°€ κ°™μœΌλ©΄ trueκ°€ λ˜μ–΄ μ€‘λ³΅μ΄λΌλŠ” μ•Œλ¦Όμ°½μ΄ λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image

🎈5) κ²°μ œνŽ˜μ΄μ§€

-> Import open Api λ₯Ό μ΄μš©ν•΄μ„œ 결제 정보λ₯Ό props둜 λ„˜κ²¨ μ£Όμ—ˆμŠ΅λ‹ˆλ‹€. κ²°μ œκ°€ μ™„λ£Œλœν›„ λ§ˆμ΄νŽ˜μ΄μ§€μ— 좜λ ₯ν•˜κΈ°μœ„ν•΄ 결제 번호λ₯Ό localStorage 에 μ €μž₯ν•˜μ˜€μŠ΅λ‹ˆλ‹€.
(# λ‘œμ»¬μ— μ €μž₯ν•œ 이유 = μ œν’ˆ ꡬ맀 내역을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„  ꡬ맀내역을 μ €μž₯ν• μˆ˜ μžˆλŠ” DB,Api κ°€ λ”°λ‘œ μžˆμ–΄μ•Ό ν–ˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ ν•΄λ‹Ή Apiκ°€ μ„€κ³„λ˜μ–΄μžˆμ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— κΈ°λŠ₯κ΅¬ν˜„μ„ μœ„ν•΄ localStorage에 μ €μž₯ν•˜λ„λ‘ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.) 이후 κ²°μ œκ°€ μ„±κ³΅λ˜λ©΄, "mypayment" ν‚€ κ°’μœΌλ‘œ λ‘œμ»¬μŠ€ν† λ¦¬μ§€μ— ν•΄λ‹Ή ν‚€ 값이 μ €μž₯λ˜μ–΄μžˆμœΌλ©΄, JSON.Parse λ₯Ό ν•˜μ—¬ λ³€μˆ˜μ— ν• λ‹Ήν•΄μ£Όμ—ˆκ³ , μ—†μœΌλ©΄ 주문번호λ₯Ό 담은 배열을 λ§Œλ“€μ–΄ "mypayment" ν‚€ 값에 μ €μž₯되게 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

κ΅¬ν˜„μ½”λ“œ

image

νŒ€μ›

μ„œλ™μš± κΉ€ν•˜μ€ κΉ€μ„Έμ—° λ¬ΈλŒ€ν˜„ λ°•μ§„μ˜
λ©”μΈνŽ˜μ΄μ§€, μ–΄λ“œλ―ΌνŽ˜μ΄μ§€, 카페24&μ•„μž„ν¬νŠΈ 토큰 λ°œν–‰ 및 api μž₯λ°”κ΅¬λ‹ˆ, λ§ˆμ΄νŽ˜μ΄μ§€, μƒμ„ΈνŽ˜μ΄μ§€, νšŒμ›κ°€μž…, 인증, 결제 및 쑰회, λ””μžμΈ 및 λ ˆμ΄μ•„μ›ƒ κ²€μƒ‰νŽ˜μ΄μ§€, 결제 λ§ˆμ΄νŽ˜μ΄μ§€, νšŒμ›μ •λ³΄ μˆ˜μ • κ²€μƒ‰νŽ˜μ΄μ§€, λͺ©λ‘μ‘°νšŒ

✨ κΈ°μˆ μŠ€νƒ

κΈ°μˆ μŠ€νƒ 이미지

Develoment

Config

Enviroment

Deployment


πŸ“‡ μ‚¬μš©λœ μ˜€ν”ˆ Api

컀머슀:

결제:

  • 결제 κ°€λŠ₯ν•œ μΉ΄λ“œμ‚¬
  • 비씨
  • ν˜„λŒ€
  • μ•ˆλ˜λŠ” μΉ΄λ“œ
  • κ΅­λ―Ό
  • μ‚Όμ„±

(ν…ŒμŠ€νŠΈ 결제 λͺ¨λ“ˆμ΄κΈ° λ•Œλ¬Έμ— μ—°κ²°λœ μΉ΄λ“œμ‚¬λ§Œ κ²°μ œκ°€ λ©λ‹ˆλ‹€. μ£Όν›„ 좔가적인 결제 λͺ¨λ“ˆλ„ λ„μž…ν•΄λ³Ό μƒκ°μž…λ‹ˆλ‹€.)


πŸ‘¨πŸ»β€πŸ€β€πŸ‘¨πŸ» ν˜‘μ—… 방식

1) Zoom

  • 주말 및 νŠΉλ³„ν•œ μ‚¬μœ κ°€ μžˆλŠ” 경우λ₯Ό μ œμ™Έν•˜κ³  1μ‹œμ— 회의
  • λ°μΌλ¦¬μŠ€ν¬λŸΌμ„ 톡해 각자의 진행상황과 μž‘μ—… λͺ©ν‘œλ₯Ό 확인
    -> λŒ€λž΅μ μΈ λͺ©ν‘œμ— ꡬ체적인 μš”μ²­μ‚¬ν•­μ„ μΆ”κ°€ν•˜λŠ” μ‹œκ°„
    -> 였λ₯˜ λ°œμƒ μ‹œ 화면을 κ³΅μœ ν•˜μ—¬ ν•΄κ²° λ°©μ•ˆμ„ ν•¨κ»˜ λͺ¨μƒ‰

2) discord

-> 그룹원 κ°„ μž‘μ—… λ‚΄μš©κ³Ό κ΅¬ν˜„ λ‚΄μš©μ˜ ꡬ체적인 μš”κ΅¬λ₯Ό ν•  λ•Œ μ‚¬μš©
-> 진행 쀑 λ§‰νžˆλŠ” 뢀뢄에 λŒ€ν•œ 방법 곡유


🎈 μž‘μ—… 진행

1) Notion

-> κ·ΈλΌμš΄λ“œ λ£°, 컀밋 μ»¨λ²€μ…˜, api λ¬Έμ„œ λ“± ν”„λ‘œμ νŠΈμ—μ„œ ν•„μš”ν•œκ²ƒλ“€μ„ κΈ°λ‘ν•΄λ‘μ—ˆμŠ΅λ‹ˆλ‹€.

βœ… Api λ¬Έμ„œ 정리

image

βœ… git commit μ»¨λ²€μ…˜ 정리

image

2) Github

κΉƒν—ˆλΈŒ μ „λž΅ Github Flow

-> develop branch 생성.
-> develop branch μ—μ„œ 각자 μ΄λ¦„μ˜ branch 생성.
-> 각자 branch μ—μ„œ κΈ°λŠ₯ 개발이 μ™„λ£Œλ˜λ©΄ develop branch 둜 PR 생성.
-> κΉƒν—ˆλΈŒ λ‹΄λ‹Ήμžκ°€ 올라온 Pull request 확인후 develop branch 둜 merge.
-> λͺ¨λ“  κΈ°λŠ₯ κ΅¬ν˜„ μ™„λ£Œν›„ μ΅œμ’…μ μœΌλ‘œ develop branch λ₯Ό master branch 둜 merge.

image

βš™ ν”„λ‘œμ νŠΈ 섀계

use case

image

폴더 ꡬ성(μ΄ˆμ•ˆ)

image

πŸ“Œ ν”„λ‘œμ νŠΈ μ£Όμš” κΈ°λŠ₯

메인

  • μ œν’ˆ 검색
  • μΆ”μ²œ λ„μ„œ
  • sticky μ•ˆλ‚΄λ°”

μƒμ„ΈνŽ˜μ΄μ§€

  • ꡬ맀, λŒ€μ—¬ λ²„νŠΌ
  • μž₯λ°”κ΅¬λ‹ˆ μžλ™ 이동

검색

  • ꡬ맀, λŒ€μ—¬ λ²„νŠΌ
  • 검색 κ²°κ³Ό 미리보기

λ§ˆμ΄νŽ˜μ΄μ§€

  • 개인 ꡬ맀 λ‚΄μ—­
  • νšŒμ› 정보 μˆ˜μ •

μ–΄λ“œλ―ΌνŽ˜μ΄μ§€

  • 물건 등둝/μˆ˜μ •/μ‚­μ œ
  • 전체 νšŒμ› λͺ©λ‘
  • 전체 결제 λ‚΄μ—­

About

πŸ“–λ„μ„œκ΅¬λ§€μžλ“€μ„ μœ„ν•œ λ„μ„œ μ‚¬μ΄νŠΈ μž…λ‹ˆλ‹€

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages