Skip to content

No-Confilct/BATT

Folders and files

NameName
Last commit message
Last commit date

Latest commit

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

Repository files navigation

🎫 BATT - μ•”ν‘œ λ°©μ§€ λ¬Έν™”λ₯Ό μ„ λ„ν•˜λŠ” 예맀 ν”Œλž«νΌ

img

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

  • 곡연과 λ¬Έν™”μƒν™œμ„ κ³΅μ •ν•˜κ²Œ 즐기고, μ‚¬μš©ν•˜μ§€ λͺ»ν•˜λŠ” 티켓을 μ•ˆμ „ν•˜κ²Œ 양도·경맀할 수 μžˆλŠ” ν”Œλž«νΌμž…λ‹ˆλ‹€.
  • SSE κΈ°μˆ μ„ ν™œμš©ν•œ μ‹€μ‹œκ°„ κ²½λ§€ 쑰회 κΈ°λŠ₯을 톡해 μž…μ°°κ°€ 변동과 λ‚™μ°° ν˜„ν™©μ„ μ¦‰μ‹œ ν™•μΈν•˜κ³  μ°Έμ—¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 개인 ν”„λ‘œν•„ νŽ˜μ΄μ§€μ—μ„œ μ°Έμ—¬ν•œ 곡연 ν›„κΈ°, λ³΄μœ ν•œ μ»¬μ²˜μ½”μΈ 등을 κ΄€λ¦¬ν•˜κ³ , 판맀(양도)ν•˜κ³  싢은 티켓을 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • Toss API둜 곡연 티켓을 κ°„νŽΈΒ·μ•ˆμ „ν•˜κ²Œ κ²°μ œν•  수 있으며, 본인인증 절차λ₯Ό 톡해 μ˜ˆλ§€ν•œ 티켓을 μ•ˆμ „ν•˜κ²Œ ν™œμ„±ν™”ν•˜κ³ , λͺ¨λ°”일 QR μ½”λ“œ μž…μž₯으둜 곡연 당일 λΉ λ₯΄κ³  νŽΈλ¦¬ν•˜κ²Œ κ΄€λžŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

No Conflict νŒ€μ› ꡬ성

νŒ€μž₯ / BE FE / Mobile FE / Mobile

@Bumnote

@juhye87

@Naling1225
κΉ€μš©λ²” κΉ€μ£Όν˜œ κΉ€λ‚˜μ˜
BE FE Infra

@justlikesh

@ybt107

@Hemeiron
κΉ€μŠΉν˜Έ μ—°μ§€μœ€ κΉ€μ„œμ›

1. 개발 ν™˜κ²½

  • Front : React, Vite, TypeScript, React Query, Zustand
  • Back-end : Spring Boot, Spring Data JPA, Querydsl, PostgreSQL, Redis
  • 버전 및 μ΄μŠˆκ΄€λ¦¬ : Gitlab, Jira
  • ν˜‘μ—… 툴 : Discord, Notion
  • μ„œλΉ„μŠ€ 배포 ν™˜κ²½ : AWS EC2, Docker, Nginx, Jenkins CI/CD
  • λ””μžμΈ: Figma

2. μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜ 및 μ‚¬μš©ν•œ 기술 μŠ€νƒ

μ‹œμŠ€ν…œ μ•„ν‚€ν…μ²˜

img

기술 μŠ€νƒ

img


3. μ—­ν•  λΆ„λ‹΄

🐯 κΉ€μš©λ²”

λ‹΄λ‹Ή μ—­ν•  : νŒ€μž₯, λ°±μ—”λ“œ 개발

  • ν”„λ‘œμ νŠΈ 관리 : 슀크럼 λ§ˆμŠ€ν„°, Jira 이슈 관리
  • νšŒμ› 관리 μ‹œμŠ€ν…œ : μ†Œμ…œ 둜그인 기반 Handler, Filter, Resolver, JWT 인증/인가 관리
  • 양도 μ‹œμŠ€ν…œ : SSE 단방ν–₯ μ‹€μ‹œκ°„ 톡신 기반 양도 κ²½λ§€ 등둝 및 쑰회, μž…μ°° κΈ°λŠ₯
  • 양도 마감 μŠ€μΌ€μ€„λ§ μ‹œμŠ€ν…œ : TaskScheduler 기반 양도 마감 처리
  • 컬처 포인트 μ‹œμŠ€ν…œ : 컬처 포인트 νŠΈλžœμž­μ…˜ 관리 및 λ‚΄μ—­ 쑰회
  • 리뷰 μ‹œμŠ€ν…œ : 리뷰 μž‘μ„±, μˆ˜μ •, 쑰회

πŸ‘» κΉ€μŠΉν˜Έ

λ‹΄λ‹Ή μ—­ν•  : λ°±μ—”λ“œ 개발

  • 곡연 관리 μ‹œμŠ€ν…œ : 곡연 정보 쑰회, 상세 정보, 곡연 λͺ©λ‘ 쑰회
  • μ’Œμ„ 예맀 μ‹œμŠ€ν…œ : μ’Œμ„ 선택, μž„μ‹œ 점유, ν•΄μ œ κΈ°λŠ₯
  • 결제 μ‹œμŠ€ν…œ : ν† μŠ€νŽ˜μ΄λ¨ΌμΈ  연동, 결제 승인/μ·¨μ†Œ 처리

😎 κΉ€μ£Όν˜œ

λ‹΄λ‹Ή μ—­ν•  : ν”„λ‘ νŠΈμ—”λ“œ 개발

  • λ§ˆμ΄νŽ˜μ΄μ§€(κ°œμΈμ •λ³΄ 관리, 리뷰 관리, 예맀 λ‚΄μ—­ 상세, 코인 λ‚΄μ—­)
  • μ–‘λ„νŽ˜μ΄μ§€
  • 예맀 상세 νŽ˜μ΄μ§€

🐬 κΉ€λ‚˜μ˜

λ‹΄λ‹Ή μ—­ν•  : ν”„λ‘ νŠΈμ—”λ“œ 개발

  • ν”„λ‘œμ νŠΈ λ°œν‘œ
  • 개발 νŽ˜μ΄μ§€ 및 λ””μžμΈ
    • 곡연 예맀 νŽ˜μ΄μ§€(μ’Œμ„ 선택 νŽ˜μ΄μ§€, 예맀자 정보 μž…λ ₯ νŽ˜μ΄μ§€)
    • 결제 νŽ˜μ΄μ§€ : ν† μŠ€νŽ˜μ΄λ¨ΌμΈ  연동 결제 μš”μ²­ 및 처리 및 UI 반영
  • μ•ˆλ“œλ‘œμ΄λ“œ
    • 카카였/넀이버 SDK 둜그인 및 Access Token 관리
    • Retrofit2와 OkHttpλ₯Ό ν™œμš©ν•˜μ—¬ μ‚¬μš©μž 예맀 λ‚΄μ—­ 쑰회 API 연동

πŸ˜€ μ—°μ§€μœ€

λ‹΄λ‹Ή μ—­ν•  : ν”„λ‘ νŠΈμ—”λ“œ 개발

  • UI 개발 및 λ””μžμΈ
    • νŽ˜μ΄μ§€ : 메인 νŽ˜μ΄μ§€, 양도 곡연 λͺ©λ‘ νŽ˜μ΄μ§€, 검색 κ²°κ³Ό νŽ˜μ΄μ§€, 둜그인 νŽ˜μ΄μ§€, NotFound νŽ˜μ΄μ§€
    • 곡톡 μ»΄ν¬λ„ŒνŠΈ : 헀더, 곡연 μΉ΄λ“œ

πŸ˜ƒ κΉ€μ„œμ›

λ‹΄λ‹Ή μ—­ν•  : 인프라

  • GitLab Webhook - Jenkins CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕
  • Docker Compose 기반 λ©€ν‹° μ„œλΉ„μŠ€ ν™˜κ²½ ꡬ성
  • Nginx Reverse Proxy + SSL μΈμ¦μ„œ 적용
  • PostgreSQL/Redis ν™˜κ²½ 관리

4. 개발 κΈ°κ°„ 및 μž‘μ—… 관리

개발 κΈ°κ°„

  • 전체 개발 κΈ°κ°„ : 2025-07-01 ~ 2025-08-18
  • 기획 및 섀계 : 2025-07-01 ~ 2025-07-15
  • UI κ΅¬ν˜„ : 2025-07-12 ~ 2025-07-15
  • κΈ°λŠ₯ κ΅¬ν˜„ : 2025-07-16 ~ 2025-08-17

μž‘μ—… 관리

  • Jira 이슈 관리 및 λŒ€μ‹œλ³΄λ“œλ₯Ό ν™œμš©ν•˜μ—¬ νŒ€ μ „μ²΄μ˜ μž‘μ—… μ§„ν–‰ 상황을 κ³΅μœ ν–ˆμŠ΅λ‹ˆλ‹€.
  • 맀일 μ•„μΉ¨ 9μ‹œ 10λΆ„ 데일리 μŠ€ν¬λŸΌμ„ μ§„ν–‰ν•˜μ—¬ 문제 상황, 진행도, 였늘 ν•  일 등을 κ³΅μœ ν•˜κ³ , Notion νŽ˜μ΄μ§€μ— 슀크럼 회의 λ‚΄μš©μ„ κΈ°λ‘ν–ˆμŠ΅λ‹ˆλ‹€.

5. νŽ˜μ΄μ§€λ³„ κΈ°λŠ₯

[λ©”μΈνŽ˜μ΄μ§€]

λ©”μΈνŽ˜μ΄μ§€

  • μ„œλΉ„μŠ€μ˜ μ΄ˆκΈ°ν™”λ©΄μž…λ‹ˆλ‹€.
  • ν˜„μž¬ 예맀 κ°€λŠ₯ν•œ 곡연과, 예맀 μ˜€ν”ˆ λŒ€κΈ° 쀑인 κ³΅μ—°μ˜ λͺ©λ‘μ„ 확인할 수 μžˆλŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.
  • ν•œ νŽ˜μ΄μ§€μ— μ΅œλŒ€ 12개의 곡연이 보여지며, μ •λ ¬ κΈ°μ€€(인기순/리뷰 λ§Žμ€μˆœ/μ΅œμ‹ μˆœ/곡연 μž„λ°•μˆœ)κ³Ό νŽ˜μ΄μ§€ 번호λ₯Ό μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예맀 κ°€λŠ₯ν•œ 곡연을 ν΄λ¦­ν•˜λ©΄ ν•΄λ‹Ή κ³΅μ—°μ˜ 상세 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.
  • 아직 μ˜ˆλ§€κ°€ 열리지 μ•Šμ€ 곡연은 ν¬μŠ€ν„°μ— 예맀 μ˜€ν”ˆ μ˜ˆμ • μΌμ‹œκ°€ μ ν˜€μžˆμœΌλ©°, 클릭해도 상세 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

[곡연 상세 νŽ˜μ΄μ§€]

곡연 상세 νŽ˜μ΄μ§€

  • κ³΅μ—°μ˜ 상세 정보와 곡연μž₯ 정보, 리뷰 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 곡연 정보 뿐만 μ•„λ‹ˆλΌ, μœ„μΉ˜ 정보, κ΄€λžŒ ν›„κΈ° 정보 λ˜ν•œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ˜ˆλ§€ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ 예맀 νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

[예맀 νŽ˜μ΄μ§€]

예맀 νŽ˜μ΄μ§€

  • κ³΅μ—°μ˜ μ’Œμ„μ„ μ„ νƒν•˜κ³  예맀λ₯Ό μ§„ν–‰ν•˜λŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.
  • ν•œ λ²ˆμ— μ΅œλŒ€ 4개의 μ’Œμ„μ„ 선택해 μ˜ˆλ§€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ’Œμ„ 선택 ν›„ 주문자 정보 확인과 μ•½κ΄€ λ™μ˜ ν›„ ν† μŠ€ 페이먼츠 API둜 κ²°μ œκ°€ μ§„ν–‰λ©λ‹ˆλ‹€.

[양도 곡연 λͺ©λ‘]

예맀 곡연 λͺ©λ‘ νŽ˜μ΄μ§€

  • ν‹°μΌ“ 양도가 μ΄λ£¨μ–΄μ§€λŠ” 곡연(μ˜ˆλ§€κ°€ μ§„ν–‰ 쀑인 곡연)의 λͺ©λ‘μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • 각 κ³΅μ—°λ³„λ‘œ ν‹°μΌ“ 양도가 λͺ‡ 건 이루어지고 μžˆλŠ”μ§€ 숫자λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ ν•΄λ‹Ή 곡연에 λŒ€ν•œ ν‹°μΌ“ 양도 λͺ©λ‘ νŽ˜μ΄μ§€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

[양도 곡연 상세 νŽ˜μ΄μ§€]

양도 둜직 νŽ˜μ΄μ§€

  • κ³΅μ—°μ˜ μž₯μ†Œ, κΈ°κ°„, ν‹°μΌ“ λ“±κΈ‰ 별 가격 λ“± κ³΅μ—°μ˜ κ°œμš”μ™€ 양도 ν‹°μΌ“ λͺ©λ‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 양도가 μ§„ν–‰ 쀑인 티켓은 마감 κΈ°ν•œκΉŒμ§€ 남은 μ‹œκ°„μ„, 마감된 티켓에 λŒ€ν•΄μ„œλŠ” λ§ˆκ°μ΄λŠ” 글씨λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€.
  • 양도 λ§ˆκ°κΉŒμ§€ 남은 μ‹œκ°„μ΄ 100μ‹œκ°„ 이상일 경우 남은 λ‚ μ§œλ₯Ό 'D-day'ν˜•μ‹μœΌλ‘œ, 100μ‹œκ°„ μ΄ν•˜μΌ λ•ŒλŠ” "hh:mm:ss" ν˜•μ‹μœΌλ‘œ ν‘œν˜„ν•©λ‹ˆλ‹€.
  • ν‹°μΌ“μ˜ "μ°Έμ—¬ν•˜κΈ°" λ²„νŠΌ 클릭 μ‹œ 응λͺ¨ 포인트λ₯Ό 적을 수 μžˆλŠ” λͺ¨λ‹¬μ΄ 뜨며, ν˜„μž¬ 졜고 ν¬μΈνŠΈλ³΄λ‹€ 높은 포인트둜 응λͺ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ–‘λ„μž, ν˜„μž¬ 졜고 포인트 응λͺ¨μžλŠ” μ°Έμ—¬ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

[검색 κ²°κ³Ό νŽ˜μ΄μ§€]

검색 νŽ˜μ΄μ§€

  • ν—€λ”μ˜ 검색창에 곡연λͺ…을 λ„£κ³  κ²€μƒ‰ν•˜λ©΄ ν•΄λ‹Ή ν‚€μ›Œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” κ³΅μ—°μ˜ λͺ©λ‘μ„ λ³΄μ—¬μ£ΌλŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.
  • 검색 κ²°κ³Όκ°€ μžˆμ„ 경우, 곡연 정보λ₯Ό μΉ΄λ“œμ— λ‹΄μ•„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • 검색 κ²°κ³Όκ°€ 없을 경우, μ•ˆλ‚΄ 문ꡬ와 λ©”μΈνŽ˜μ΄μ§€λ‘œ μ΄λ™ν•˜λŠ” λ²„νŠΌμ„ λ³΄μ—¬μ€λ‹ˆλ‹€.

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

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

  • κ°œμΈμ •λ³΄, 예맀 λ‚΄μ—­, 리뷰 λ‚΄μ—­, BATT(포인트) 내역을 확인할 수 μžˆλŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.
  • 예맀 λ‚΄μ—­μ—μ„œλŠ” 각 예맀 내역을 ν΄λ¦­ν•˜μ—¬ 예맀/μ·¨μ†Œ/양도 μƒνƒœ λ“± 상세 정보λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•΄λ‹Ή 예맀의 곡연일뢀터 예맀 상세 νŽ˜μ΄μ§€μ—μ„œ 리뷰λ₯Ό 등둝할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 리뷰 μƒμ„Έμ—μ„œ μž‘μ„±ν•œ 리뷰 λͺ©λ‘μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • BATT λ‚΄μ—­μ—μ„œ 포인트 적립/μ‚¬μš© 내역을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

[λͺ¨λ°”일 QR μ½”λ“œ νŽ˜μ΄μ§€ ]

λͺ¨λ°”일 QR μ½”λ“œ νŽ˜μ΄μ§€

  • μ˜ˆλ§€ν•œ 티켓을 λͺ¨λ°”일 QR μ½”λ“œλ‘œ 확인할 수 μžˆλŠ” νŽ˜μ΄μ§€μž…λ‹ˆλ‹€.
  • μ•”ν‘œ λ°©μ§€λ₯Ό μœ„ν•˜μ—¬ 캑처 λ°©μ§€ κΈ°λŠ₯이 μ μš©λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
  • QR μ½”λ“œλ₯Ό 톡해 곡연μž₯ μž…μž₯이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

6. μ‹ κ²½ μ“΄ λΆ€λΆ„

1. ν† μŠ€νŽ˜μ΄λ¨ΌμΈ  μ™ΈλΆ€ API 연동 및 μ•ˆμ •μ„± 확보

  • Java HTTP Client 직접 ν™œμš©: Spring WebClient λŒ€μ‹  순수 Java HTTP Client둜 ν† μŠ€ API 연동
  • 쀑볡 결제 λ°©μ§€: S008 μ—λŸ¬ 감지 μ‹œ checkPaymentStatus() λ©”μ„œλ“œλ‘œ 결제 μƒνƒœ μž¬ν™•μΈ
  • Base64 인증: Base64.getEncoder().encodeToString(SECRET_KEY.getBytes())둜 인증 헀더 생성
  • μ˜ˆμ™Έ 처리: API 호좜 μ‹€νŒ¨ μ‹œ false λ°˜ν™˜μœΌλ‘œ μ•ˆμ „ν•œ fallback

2. μ’Œμ„ μž„μ‹œ 점유 μ‹œμŠ€ν…œμ˜ Redis ν™œμš©

  • SeatRedisService κ΅¬ν˜„: Redisλ₯Ό ν™œμš©ν•œ μ’Œμ„ μž„μ‹œ 점유 관리
  • TTL μ„€μ •: Duration.ofMinutes(10)둜 10λΆ„κ°„ μž„μ‹œ 점유 μœ μ§€
  • Redis와 DB 연계: determineAvailability()μ—μ„œ Redis 점유 μƒνƒœμ™€ DB μ˜ˆμ•½ μƒνƒœ 톡합 검증

3. λ³΅μž‘ν•œ μ’Œμ„ κ°€μš©μ„± νŒλ‹¨ 둜직

  • 닀쀑 μƒνƒœ 검증: CONFIRMED, TRANSFER_PENDING, Redis μž„μ‹œ 점유 μƒνƒœλ₯Ό λͺ¨λ‘ κ³ λ €
  • μ‹€μ‹œκ°„ κ°€μš©μ„± 확인: 각 μ’Œμ„λ§ˆλ‹€ κ°œλ³„μ μœΌλ‘œ κ°€μš© μ—¬λΆ€ 계산
  • Stream API ν™œμš©: seats.stream().map().toList()둜 μ’Œμ„ 리슀트 λ³€ν™˜

4. 결제 ν”„λ‘œμ„ΈμŠ€μ˜ 쀑볡 λ°©μ§€

  • λ©±λ“±μ„± 보μž₯: findByPaymentKey()둜 κΈ°μ‘΄ 결제 확인 ν›„ 쀑볡 μ‹œ κΈ°μ‘΄ κ²°κ³Ό λ°˜ν™˜
  • νŠΈλžœμž­μ…˜ 관리: @Transactional둜 결제 ν”„λ‘œμ„ΈμŠ€ μ›μžμ„± 보μž₯

5. 곡연 μƒνƒœ μžλ™ μ—…λ°μ΄νŠΈ μŠ€μΌ€μ€„λŸ¬

  • @Scheduled ν™œμš©: μ„€μ •κ°’ 기반 주기적 곡연 μƒνƒœ μ—…λ°μ΄νŠΈ
  • 청크 λ‹¨μœ„ 처리: batchSize둜 λŒ€λŸ‰ 데이터λ₯Ό μž‘μ€ λ‹¨μœ„λ‘œ λ‚˜λˆ„μ–΄ 처리
  • 동적 μƒνƒœ νŒŒμ‹±: Arrays.stream().map().collect()둜 검색 쑰건 νŒŒμ‹±

6. Spring OAuth2 μ»€μŠ€ν…€ μ†Œμ…œ 둜그인 및 Spring Security ν™œμš©

  • OAuth2 Client ν™œμš©ν•œ μ†Œμ…œ 둜그인 κ΅¬ν˜„
  • Spring Security κΈ°λŠ₯을 ν™œμš©ν•œ Handler, Filter, Resolver κ΅¬ν˜„
  • JWT 토큰 기반 인증/인가 처리(Access Token: Authorization Header, Refresh Token: HttpOnly Cookie)

7. μ‹€μ‹œκ°„ 양도 κ²½λ§€ μ‹œμŠ€ν…œ κ΅¬ν˜„

  • Spring SseEmitter ν™œμš©ν•œ SSE 이벀트 슀트림 관리 및 단방ν–₯ μ‹€μ‹œκ°„ 톡신 κ΅¬ν˜„
  • TaskScheduler 동적 μŠ€μΌ€μ€„λ§μ„ ν™œμš©ν•œ 양도 κ²½λ§€ 마감 처리 및 λ‚™μ°°μž μ„ μ •
  • λ³΅μž‘ν•œ 양도 μƒνƒœ 관리 및 νŠΈλžœμž­μ…˜ 처리

7. κ°œμ„  λͺ©ν‘œ

1. 동적 μŠ€μΌ€μ€„λ§ 볡ꡬ κΈ°λŠ₯ κ°œμ„ 

ν˜„μž¬ 양도 마감 μŠ€μΌ€μ€„λ§μ€ μ„œλ²„ μž¬μ‹œμž‘ μ‹œ λ³΅κ΅¬λ˜μ§€ μ•ŠλŠ” λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°λ² μ΄μŠ€μ— μŠ€μΌ€μ€„λ§ 정보λ₯Ό μ €μž₯ν•˜κ³ , μ„œλ²„ μ‹œμž‘ μ‹œ 이λ₯Ό 읽어와 μŠ€μΌ€μ€„λ§μ„ λ³΅κ΅¬ν•˜λŠ” κΈ°λŠ₯을 κ΅¬ν˜„ν•  μ˜ˆμ •μž…λ‹ˆλ‹€.

2. 포인트 νŠΈλžœμž­μ…˜ & μž…μ°° κΈ°λŠ₯ λ™μ‹œμ„± μ œμ–΄

포인트 νŠΈλžœμž­μ…˜κ³Ό μž…μ°° κΈ°λŠ₯μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ™μ‹œμ„± 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, Named Lock 방식을 ν™œμš©ν•˜μ—¬ μ—¬λŸ¬ μ‚¬μš©μžκ°€ λ™μ‹œμ— μž…μ°°ν•˜κ±°λ‚˜ 포인트λ₯Ό μ‚¬μš©ν•  λ•Œ 데이터 일관성을 μœ μ§€ν•  수 μžˆλ„λ‘ κ°œμ„ ν•  κ³„νšμž…λ‹ˆλ‹€.

3. μž…μ°° λͺ©λ‘ & 포인트 λ‚΄μ—­ 쿼리 μ΅œμ ν™”

μž…μ°° λͺ©λ‘κ³Ό 포인트 λ‚΄μ—­ 쑰회 μ‹œ λ°œμƒν•˜λŠ” N+1 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, JPA Fetch Join 및 Querydsl을 ν™œμš©ν•œ 쿼리 μ΅œμ ν™”λ₯Ό μ§„ν–‰ν•  μ˜ˆμ •μž…λ‹ˆλ‹€. 이λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€ μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³  응닡 속도λ₯Ό κ°œμ„ ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

4. ν”„λ‘ νŠΈμ—”λ“œ μ„±λŠ₯ κ°œμ„ 

  • 전솑 μ΅œμ ν™”: ν…μŠ€νŠΈ μžμ‚° Brotli/Gzip μ••μΆ•, 정적 μΊμ‹œ μ •μ±… 적용(Cache-Control: public, max-age=31536000, immutable)
  • 이미지: AVIF/WebP μ „ν™˜, srcset/sizes 제곡, LCP 이미지 preload+fetchpriority=high, λͺ¨λ“  이미지 width/height λͺ…μ‹œ, μ˜€ν”„μŠ€ν¬λ¦° loading="lazy"
  • μžλ°”μŠ€ν¬λ¦½νŠΈ: μ½”λ“œ λΆ„ν• (import()), νŠΈλ¦¬μ…°μ΄ν‚Ή 및 λ―Έμ‚¬μš© μ½”λ“œ 제거둜 TBT κ°μ†Œ
  • μ ‘κ·Όμ„±/SEO: μ•„μ΄μ½˜ λ²„νŠΌ aria-label μΆ”κ°€, 메타 μ„€λͺ…/robots.txt μ •μ •, 404 λ¦¬μ†ŒμŠ€ 정리

8. ν”„λ‘œμ νŠΈ ν›„κΈ°

🐯 κΉ€μš©λ²”

ν”„λ‘œμ νŠΈ κ²½ν—˜μ„ μ–΄λŠ 정도 ν•΄λ³΄μ•˜μ§€λ§Œ, 항상 ν˜Όμžμ„œ λ°±μ—”λ“œ κ°œλ°œμ„ 해왔기에 같은 λ°±μ—”λ“œ κ°œλ°œμžμ™€ ν˜‘μ—…ν•˜λŠ” κ²½ν—˜μ€ 이번이 μ²˜μŒμ΄μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬ν•œ 상황 μ†μ—μ„œ νŒ€μž₯μ΄λΌλŠ” μ—­ν• κΉŒμ§€ 맑게 λ˜μ–΄ 걱정이 λ§Žμ•˜μ§€λ§Œ, νŒ€μ›λ“€μ΄ 잘 따라와주고 적극적으둜 μ˜κ²¬μ„ λ‚΄μ£Όμ–΄ λ¬΄μ‚¬νžˆ ν”„λ‘œμ νŠΈλ₯Ό 마칠 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ 도메인 지식과 μ‚¬μš©ν•΄λ³΄μ§€ μ•Šμ€ 기술 μŠ€νƒμ„ μ ‘ν•˜μ—¬ λ§Žμ€ 것을 배울 수 μžˆμ—ˆκ³ , 쒋은 μ»¨μ„€ν„΄νŠΈλ‹˜κ³Ό μ½”μΉ˜λ‹˜λ“€ 덕뢄에 생각해보지도 λͺ»ν•œ 뢀뢄듀을 κ²½ν—˜ν•˜λ©° λ§Žμ€ μ„±μž₯을 이룰 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

νŒ€μž₯의 μ—­ν•  이전에 ν•œ λͺ…μ˜ νŒ€μ› λ˜λŠ” κ°œλ°œμžλ‘œμ„œ 이번 ν”„λ‘œμ νŠΈλ₯Ό ν•¨κ»˜ν•œ No-Conflict νŒ€μ› λͺ¨λ‘μ—κ²Œ κ°μ‚¬ν•˜λ‹€λŠ” 말을 μ „ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. μ•žμœΌλ‘œμ˜ 개발 여정에 ν–‰μš΄μ΄ κ°€λ“ν•˜κΈΈ λ°”λžλ‹ˆλ‹€!


πŸ‘» κΉ€μŠΉν˜Έ

항상 개발 κ³΅λΆ€λŠ” 혼자 μ§„ν–‰ν•΄μ™”κ³  λˆ„κ΅°κ°€μ˜ ν”Όλ“œλ°± λ˜ν•œ λ°›μ•„λ³Έ 적 μ—†μ—ˆμ§€λ§Œ, 곡톡 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ κΈ°λŠ₯ ν•˜λ‚˜λ₯Ό μ™„μ„±ν•  λ•Œλ§ˆλ‹€ μ„œλ‘œμ˜ μ½”λ“œμ— λŒ€ν•΄ ν”Όλ“œλ°±μ„ ν•˜λ©° μ„±μž₯ν•  수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄κ°€ μ§  μ½”λ“œλ₯Ό μ„€λͺ…ν•˜κ³ , λ™λ£Œ κ°œλ°œμžκ°€ μ§  μ½”λ“œμ— λŒ€ν•œ μ„€λͺ…을 λ“€μœΌλ©΄μ„œ μ½”λ“œ μž‘μ„± μŠ΅κ΄€κ³Ό λΆˆν•„μš”ν•œ 둜직 제거, 보닀 효율적인 κ΅¬ν˜„ 방법에 λŒ€ν•΄ 항상 κ³ λ―Όν•˜κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ ν˜‘μ—…κ³Ό μ½”λ“œ 리뷰 과정을 톡해 μ‹€λ ₯이 크게 ν–₯μƒλœ 것 κ°™μ•„ 맀우 즐거웠고, ν˜Όμžμ„œλŠ” λ°œκ²¬ν•˜μ§€ λͺ»ν–ˆμ„ κ°œμ„ μ λ“€μ„ 찾을 수 μžˆμ–΄ λœ»κΉŠμ€ κ²½ν—˜μ΄μ—ˆμŠ΅λ‹ˆλ‹€.


😎 κΉ€μ£Όν˜œ

7μ£Όκ°„ ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•˜λ©° λͺ¨λ°”일 μ•± λ””μžμΈ, 본인인증 API 연동, SSE λ“± μƒˆλ‘œμš΄ κΈ°μˆ μ„ κ²½ν—˜ν•  수 μžˆμ–΄ μ¦κ±°μ› μŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ μ‹€κ°œλ°œ 기간이 μ§§μ•„ 섀계λ₯Ό μΆ©λΆ„νžˆ ν•˜μ§€ λͺ»ν•΄ ν”„λ‘ νŠΈμ—”λ“œ 폴더 ꡬ쑰와 μ½”λ“œ μŠ€νƒ€μΌμ„ ν†΅μΌν•˜μ§€ λͺ»ν•œ 점이 아쉬웠고, 개발 쀑 계속 ν—·κ°ˆλ¦° μš©μ–΄λ“€μ„ κ³„κΈ°λ‘œ μš©μ–΄ μ‚¬μ „μ˜ ν•„μš”μ„±λ„ 많이 λŠκΌˆμŠ΅λ‹ˆλ‹€.

μ„œλ‘œμ˜ μ½”λ“œλ₯Ό ν•¨κ»˜ λ¦¬λ·°ν•˜κ³  μ±…μž„μ§€λŠ” 과정을 톡해 더 κΌΌκΌΌν•˜κ²Œ ν•˜λ €κ³  λ…Έλ ₯ν–ˆλ˜ 것 κ°™κ³  이 과정을 톡해 λ‹€λ₯Έ μ‚¬λžŒμ˜ μ½”λ“œλ₯Ό μ½λŠ” 법도 μžμ—°μŠ€λŸ½κ²Œ 배우며 μ„±μž₯ν•  수 μžˆμ—ˆλ˜ 것 κ°™μŠ΅λ‹ˆλ‹€.

7μ£Ό λ™μ•ˆ ν•¨κ»˜ λ°€μƒˆμ›Œκ°€λ©° 달렀쀀 νŒ€μ›λ“€, μ§„μ‹¬μœΌλ‘œ κ°μ‚¬ν•©λ‹ˆλ‹€!


🐬 κΉ€λ‚˜μ˜

μš°μ„  μ œκ°€ μ œμ•ˆν–ˆλ˜ 주제둜 ν”„λ‘œμ νŠΈλ₯Ό μ§„ν–‰ν•  수 μžˆμ–΄ μ’‹μ•˜μŠ΅λ‹ˆλ‹€! ν‰μ†Œ κ΄€μ‹¬μžˆμ—ˆλ˜ λΆ„μ•Όμ˜€μ—ˆλŠ”λ° 재밌게 μž‘μ—…ν•˜μ˜€μŠ΅λ‹ˆλ‹€. λ”λΆˆμ–΄, SSEλ‚˜ 결제 κ΄€λ ¨ κΈ°λŠ₯ λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ ‘ν•˜κ³  κ΅¬ν˜„ν•΄λ΄μ„œ μ’‹μ•˜κ³  μ•žμœΌλ‘œμ˜ ν”„λ‘œμ νŠΈμ—μ„œλ„ 도움이 될 것 κ°™μŠ΅λ‹ˆλ‹€.

μ’€ μ™„λ²½ν•˜κ²Œ μ§„ν–‰ν•˜κ³  μ‹Άλ‹€λ³΄λ‹ˆ μ²˜μŒμ— 파일 ꡬ쑰뢀터 신경을 많이 μ“°λŠλΌ μ‹œκ°„μ„ 많이 μ“΄ 것이 μ•„μ‰¬μ› μŠ΅λ‹ˆλ‹€. κ·Έλž˜λ„ ν•œ 번 ν•΄λ΄€μœΌλ‹ˆ λ‹€μŒμ—λŠ” JIRAλ₯Ό 더 잘 ν™œμš©ν•΄μ„œ μ‹œκ°„μ„ μ ˆμ•½ν•  수 μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‹€μŒ ν”„λ‘œμ νŠΈμ—λŠ” μ’€ 더 객체지ν–₯적으둜 μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. λ˜ν•œ κΈ°λŠ₯ κ΅¬ν˜„κ³Ό λ”λΆˆμ–΄ λ””μžμΈλ„ 신경을 많이 μ¨μ„œ UI/UXλ₯Ό λ°œμ „μ‹œν‚€κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.


πŸ˜€ μ—°μ§€μœ€

ν”„λ‘œμ νŠΈκ°€ λλ‚˜κ³  λ˜λŒμ•„λ³΄λ‹ˆ λΆ€μ‘±ν•œ μ €μ˜ λŠ₯λ ₯에 μ•„μ‰¬μš΄ 것도 λ§Žμ§€λ§Œ 슀슀둜 μ„±μž₯ν–ˆλ‹€κ³  느꼈던 λΏŒλ“―ν•œ 기얡도 많고, μ†Œν†΅μ˜ μ€‘μš”μ„±, 기둝의 μ€‘μš”μ„± λ“± 배운 것도 λ§ŽμŠ΅λ‹ˆλ‹€. μ²˜μŒμ—” νŒ€μ— 폐λ₯Ό λΌμΉ˜μ§€ μ•Šκ² λ‹€λŠ” 마음으둜 μž„ν–ˆλŠ”λ°, μ˜†μ—μ„œ 격렀해쀀 νŒ€μ›λ“€ 덕뢄에 저도 μ €λ₯Ό λ―Ώκ³  μ—΄μ‹¬νžˆ ν•΄ λ³Ό 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€. 같은 λͺ©ν‘œλ₯Ό ν–₯ν•΄ 7μ£Όκ°„ 같이 달렀쀀 νŒ€μ›λ“€ λͺ¨λ‘ κ°μ‚¬ν–ˆκ³  수고 λ§ŽμœΌμ…¨μŠ΅λ‹ˆλ‹€!


πŸ˜ƒ κΉ€μ„œμ›

이번 ν”„λ‘œμ νŠΈμ—μ„œλŠ” μ΅μˆ™ν•˜μ§€ μ•Šμ€ 인프라 νŒŒνŠΈμ— λ„μ „ν•˜λ©° Jenkins 기반 CI/CD νŒŒμ΄ν”„λΌμΈ ꡬ좕과 SSL 적용 λ“± 싀무적인 κ²½ν—˜μ„ 많이 μŒ“μ„ 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

인프라 λ‹΄λ‹ΉμœΌλ‘œμ„œ λŠλ‚€ 점은, λ‹¨μˆœν•œ μ„œλ²„ 섀정을 λ„˜μ–΄μ„œ ν˜•μƒκ΄€λ¦¬ 도ꡬ ν™œμš©, νŒ€ 기술 μŠ€νƒ μ „λ°˜μ— λŒ€ν•œ 이해, 그리고 ν”„λ‘œμ νŠΈ ꡬ쑰에 λŒ€ν•œ λͺ…ν™•ν•œ νŒŒμ•…μ΄ ν•„μˆ˜μ μ΄λΌλŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

인프라 ꡬ좕 과정을 꼼꼼히 λ¬Έμ„œν™”ν•˜λ €λ‹€λ³΄λ‹ˆ μ΄ˆλ°˜μ—λŠ” μž‘μ—… 속도가 λ”λŽŒλ³΄μ—¬ 기둝의 ν•„μš”μ„±μ— λŒ€ν•΄ κ³ λ―Όν•˜κΈ°λ„ ν–ˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 이후 동일 μž‘μ—… μž¬μ§„ν–‰, ν¬νŒ… 메뉴얼 μž‘μ„± 등에 큰 도움이 되며 기둝의 μ€‘μš”μ„±μ„ λ‹€μ‹œ ν•œ 번 μ²΄κ°ν–ˆμŠ΅λ‹ˆλ‹€.

ν˜‘μ—… μΈ‘λ©΄μ—μ„œλŠ”, 유λŠ₯ν•œ νŒ€μž₯λ‹˜μ„ λ§Œλ‚˜ Jiraλ₯Ό ν†΅ν•œ ν”„λ‘œμ νŠΈ 관리와 νŒ€ μ»¨λ²€μ…˜μ˜ 체계적인 적용 등을 배우며 개발 κ³Όμ •μ—μ„œμ˜ ν˜‘μ—… λ¬Έν™”λ₯Ό 깊이 이해할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

No-ConflictλΌλŠ” νŒ€λͺ…μ²˜λŸΌ, μ„œλ‘œ λ°°λ €ν•˜κ³  λΆ€μ‘±ν•œ 뢀뢄도 이해해주고 κ²©λ €ν•΄μ£ΌλŠ” λΆ„μœ„κΈ° 덕뢄에 ν”„λ‘œμ νŠΈλ₯Ό 잘 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

쒋은 νŒ€μ›λ“€μ„ λ§Œλ‚˜κ²Œ λ˜μ–΄μ„œ, 그리고 인프라 λ‹΄λ‹ΉμœΌλ‘œ 6인 규λͺ¨μ˜ ν”„λ‘œμ νŠΈμ—μ„œ 배포 κ²½ν—˜μ„ μŒ“μ„ 수 μžˆμ–΄μ„œ κ°μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€.

About

BATT

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 6