- 곡μ°κ³Ό λ¬Ένμνμ 곡μ νκ² μ¦κΈ°κ³ , μ¬μ©νμ§ λͺ»νλ ν°μΌμ μμ νκ² μλΒ·κ²½λ§€ν μ μλ νλ«νΌμ λλ€.
- SSE κΈ°μ μ νμ©ν μ€μκ° κ²½λ§€ μ‘°ν κΈ°λ₯μ ν΅ν΄ μ μ°°κ° λ³λκ³Ό λμ°° νν©μ μ¦μ νμΈνκ³ μ°Έμ¬ν μ μμ΅λλ€.
- κ°μΈ νλ‘ν νμ΄μ§μμ μ°Έμ¬ν κ³΅μ° νκΈ°, 보μ ν 컬μ²μ½μΈ λ±μ κ΄λ¦¬νκ³ , νλ§€(μλ)νκ³ μΆμ ν°μΌμ λ±λ‘ν μ μμ΅λλ€.
- Toss APIλ‘ κ³΅μ° ν°μΌμ κ°νΈΒ·μμ νκ² κ²°μ ν μ μμΌλ©°, λ³ΈμΈμΈμ¦ μ μ°¨λ₯Ό ν΅ν΄ μλ§€ν ν°μΌμ μμ νκ² νμ±ννκ³ , λͺ¨λ°μΌ QR μ½λ μ μ₯μΌλ‘ κ³΅μ° λΉμΌ λΉ λ₯΄κ³ νΈλ¦¬νκ² κ΄λν μ μμ΅λλ€.
| νμ₯ / BE | FE / Mobile | FE / Mobile |
|---|---|---|
@Bumnote |
@juhye87 |
@Naling1225 |
| κΉμ©λ² | κΉμ£Όν | κΉλμ |
| BE | FE | Infra |
@justlikesh |
@ybt107 |
@Hemeiron |
| κΉμΉνΈ | μ°μ§μ€ | κΉμμ |
- 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
- νλ‘μ νΈ κ΄λ¦¬ : μ€ν¬λΌ λ§μ€ν°, 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 νκ²½ κ΄λ¦¬
- μ 체 κ°λ° κΈ°κ° : 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 νμ΄μ§μ μ€ν¬λΌ νμ λ΄μ©μ κΈ°λ‘νμ΅λλ€.
- μλΉμ€μ μ΄κΈ°νλ©΄μ λλ€.
- νμ¬ μλ§€ κ°λ₯ν 곡μ°κ³Ό, μλ§€ μ€ν λκΈ° μ€μΈ 곡μ°μ λͺ©λ‘μ νμΈν μ μλ νμ΄μ§μ λλ€.
- ν νμ΄μ§μ μ΅λ 12κ°μ 곡μ°μ΄ 보μ¬μ§λ©°, μ λ ¬ κΈ°μ€(μΈκΈ°μ/리뷰 λ§μμ/μ΅μ μ/κ³΅μ° μλ°μ)κ³Ό νμ΄μ§ λ²νΈλ₯Ό μ€μ ν μ μμ΅λλ€.
- μλ§€ κ°λ₯ν 곡μ°μ ν΄λ¦νλ©΄ ν΄λΉ 곡μ°μ μμΈ νμ΄μ§λ‘ μ΄λν©λλ€.
- μμ§ μλ§€κ° μ΄λ¦¬μ§ μμ 곡μ°μ ν¬μ€ν°μ μλ§€ μ€ν μμ μΌμκ° μ νμμΌλ©°, ν΄λ¦ν΄λ μμΈ νμ΄μ§λ‘ μ΄λνμ§ μμ΅λλ€.
- 곡μ°μ μμΈ μ 보μ 곡μ°μ₯ μ 보, 리뷰 μ 보λ₯Ό νμΈν μ μμ΅λλ€.
- κ³΅μ° μ 보 λΏλ§ μλλΌ, μμΉ μ 보, κ΄λ νκΈ° μ 보 λν νμΈν μ μμ΅λλ€.
- μλ§€νκΈ° λ²νΌμ ν΄λ¦νλ©΄ μλ§€ νμ΄μ§λ‘ μ΄λν©λλ€.
- 곡μ°μ μ’μμ μ ννκ³ μλ§€λ₯Ό μ§ννλ νμ΄μ§μ λλ€.
- ν λ²μ μ΅λ 4κ°μ μ’μμ μ νν΄ μλ§€ν μ μμ΅λλ€.
- μ’μ μ ν ν μ£Όλ¬Έμ μ 보 νμΈκ³Ό μ½κ΄ λμ ν ν μ€ νμ΄λ¨ΌμΈ APIλ‘ κ²°μ κ° μ§νλ©λλ€.
- ν°μΌ μλκ° μ΄λ£¨μ΄μ§λ 곡μ°(μλ§€κ° μ§ν μ€μΈ 곡μ°)μ λͺ©λ‘μ 보μ¬μ€λλ€.
- κ° κ³΅μ°λ³λ‘ ν°μΌ μλκ° λͺ 건 μ΄λ£¨μ΄μ§κ³ μλμ§ μ«μλ₯Ό νμΈν μ μμ΅λλ€.
- λ²νΌμ ν΄λ¦νλ©΄ ν΄λΉ 곡μ°μ λν ν°μΌ μλ λͺ©λ‘ νμ΄μ§λ‘ μ΄λν©λλ€.
- 곡μ°μ μ₯μ, κΈ°κ°, ν°μΌ λ±κΈ λ³ κ°κ²© λ± κ³΅μ°μ κ°μμ μλ ν°μΌ λͺ©λ‘μ νμΈν μ μμ΅λλ€.
- μλκ° μ§ν μ€μΈ ν°μΌμ λ§κ° κΈ°νκΉμ§ λ¨μ μκ°μ, λ§κ°λ ν°μΌμ λν΄μλ λ§κ°μ΄λ κΈμ¨λ₯Ό 보μ¬μ€λλ€.
- μλ λ§κ°κΉμ§ λ¨μ μκ°μ΄ 100μκ° μ΄μμΌ κ²½μ° λ¨μ λ μ§λ₯Ό 'D-day'νμμΌλ‘, 100μκ° μ΄νμΌ λλ "hh:mm:ss" νμμΌλ‘ ννν©λλ€.
- ν°μΌμ "μ°Έμ¬νκΈ°" λ²νΌ ν΄λ¦ μ μλͺ¨ ν¬μΈνΈλ₯Ό μ μ μ μλ λͺ¨λ¬μ΄ λ¨λ©°, νμ¬ μ΅κ³ ν¬μΈνΈλ³΄λ€ λμ ν¬μΈνΈλ‘ μλͺ¨ν μ μμ΅λλ€.
- μλμ, νμ¬ μ΅κ³ ν¬μΈνΈ μλͺ¨μλ μ°Έμ¬ν μ μμ΅λλ€.
- ν€λμ κ²μμ°½μ 곡μ°λͺ μ λ£κ³ κ²μνλ©΄ ν΄λΉ ν€μλλ₯Ό ν¬ν¨νλ 곡μ°μ λͺ©λ‘μ 보μ¬μ£Όλ νμ΄μ§μ λλ€.
- κ²μ κ²°κ³Όκ° μμ κ²½μ°, κ³΅μ° μ 보λ₯Ό μΉ΄λμ λ΄μ 보μ¬μ€λλ€.
- κ²μ κ²°κ³Όκ° μμ κ²½μ°, μλ΄ λ¬Έκ΅¬μ λ©μΈνμ΄μ§λ‘ μ΄λνλ λ²νΌμ 보μ¬μ€λλ€.
- κ°μΈμ 보, μλ§€ λ΄μ, 리뷰 λ΄μ, BATT(ν¬μΈνΈ) λ΄μμ νμΈν μ μλ νμ΄μ§μ λλ€.
- μλ§€ λ΄μμμλ κ° μλ§€ λ΄μμ ν΄λ¦νμ¬ μλ§€/μ·¨μ/μλ μν λ± μμΈ μ 보λ₯Ό νμΈν μ μμ΅λλ€.
- ν΄λΉ μλ§€μ 곡μ°μΌλΆν° μλ§€ μμΈ νμ΄μ§μμ 리뷰λ₯Ό λ±λ‘ν μ μμ΅λλ€.
- 리뷰 μμΈμμ μμ±ν 리뷰 λͺ©λ‘μ νμΈν μ μμ΅λλ€.
- BATT λ΄μμμ ν¬μΈνΈ μ 립/μ¬μ© λ΄μμ νμΈν μ μμ΅λλ€.
- μλ§€ν ν°μΌμ λͺ¨λ°μΌ QR μ½λλ‘ νμΈν μ μλ νμ΄μ§μ λλ€.
- μν λ°©μ§λ₯Ό μνμ¬ μΊ‘μ² λ°©μ§ κΈ°λ₯μ΄ μ μ©λμ΄ μμ΅λλ€.
- QR μ½λλ₯Ό ν΅ν΄ 곡μ°μ₯ μ μ₯μ΄ κ°λ₯ν©λλ€.
- Java HTTP Client μ§μ νμ©: Spring WebClient λμ μμ Java HTTP Clientλ‘ ν μ€ API μ°λ
- μ€λ³΅ κ²°μ λ°©μ§: S008 μλ¬ κ°μ§ μ checkPaymentStatus() λ©μλλ‘ κ²°μ μν μ¬νμΈ
- Base64 μΈμ¦: Base64.getEncoder().encodeToString(SECRET_KEY.getBytes())λ‘ μΈμ¦ ν€λ μμ±
- μμΈ μ²λ¦¬: API νΈμΆ μ€ν¨ μ false λ°νμΌλ‘ μμ ν fallback
- SeatRedisService ꡬν: Redisλ₯Ό νμ©ν μ’μ μμ μ μ κ΄λ¦¬
- TTL μ€μ : Duration.ofMinutes(10)λ‘ 10λΆκ° μμ μ μ μ μ§
- Redisμ DB μ°κ³: determineAvailability()μμ Redis μ μ μνμ DB μμ½ μν ν΅ν© κ²μ¦
- λ€μ€ μν κ²μ¦: CONFIRMED, TRANSFER_PENDING, Redis μμ μ μ μνλ₯Ό λͺ¨λ κ³ λ €
- μ€μκ° κ°μ©μ± νμΈ: κ° μ’μλ§λ€ κ°λ³μ μΌλ‘ κ°μ© μ¬λΆ κ³μ°
- Stream API νμ©: seats.stream().map().toList()λ‘ μ’μ 리μ€νΈ λ³ν
- λ©±λ±μ± 보μ₯: findByPaymentKey()λ‘ κΈ°μ‘΄ κ²°μ νμΈ ν μ€λ³΅ μ κΈ°μ‘΄ κ²°κ³Ό λ°ν
- νΈλμμ κ΄λ¦¬: @Transactionalλ‘ κ²°μ νλ‘μΈμ€ μμμ± λ³΄μ₯
- @Scheduled νμ©: μ€μ κ° κΈ°λ° μ£ΌκΈ°μ κ³΅μ° μν μ λ°μ΄νΈ
- μ²ν¬ λ¨μ μ²λ¦¬: batchSizeλ‘ λλ λ°μ΄ν°λ₯Ό μμ λ¨μλ‘ λλμ΄ μ²λ¦¬
- λμ μν νμ±: Arrays.stream().map().collect()λ‘ κ²μ 쑰건 νμ±
- OAuth2 Client νμ©ν μμ λ‘κ·ΈμΈ κ΅¬ν
- Spring Security κΈ°λ₯μ νμ©ν Handler, Filter, Resolver ꡬν
- JWT ν ν° κΈ°λ° μΈμ¦/μΈκ° μ²λ¦¬(Access Token: Authorization Header, Refresh Token: HttpOnly Cookie)
- Spring SseEmitter νμ©ν SSE μ΄λ²€νΈ μ€νΈλ¦Ό κ΄λ¦¬ λ° λ¨λ°©ν₯ μ€μκ° ν΅μ ꡬν
- TaskScheduler λμ μ€μΌμ€λ§μ νμ©ν μλ κ²½λ§€ λ§κ° μ²λ¦¬ λ° λμ°°μ μ μ
- 볡μ‘ν μλ μν κ΄λ¦¬ λ° νΈλμμ μ²λ¦¬
νμ¬ μλ λ§κ° μ€μΌμ€λ§μ μλ² μ¬μμ μ 볡ꡬλμ§ μλ λ¬Έμ κ° μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ°μ΄ν°λ² μ΄μ€μ μ€μΌμ€λ§ μ 보λ₯Ό μ μ₯νκ³ , μλ² μμ μ μ΄λ₯Ό μ½μ΄μ μ€μΌμ€λ§μ 볡ꡬνλ κΈ°λ₯μ ꡬνν μμ μ λλ€.
ν¬μΈνΈ νΈλμμ κ³Ό μ μ°° κΈ°λ₯μμ λ°μν μ μλ λμμ± λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄, Named Lock λ°©μμ νμ©νμ¬ μ¬λ¬ μ¬μ©μκ° λμμ μ μ°°νκ±°λ ν¬μΈνΈλ₯Ό μ¬μ©ν λ λ°μ΄ν° μΌκ΄μ±μ μ μ§ν μ μλλ‘ κ°μ ν κ³νμ λλ€.
μ μ°° λͺ©λ‘κ³Ό ν¬μΈνΈ λ΄μ μ‘°ν μ λ°μνλ N+1 λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄, JPA Fetch Join λ° Querydslμ νμ©ν 쿼리 μ΅μ νλ₯Ό μ§νν μμ μ λλ€. μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ μ±λ₯μ ν₯μμν€κ³ μλ΅ μλλ₯Ό κ°μ ν μ μμ κ²μ λλ€.
- μ μ‘ μ΅μ ν: ν
μ€νΈ μμ° 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 리μμ€ μ 리
νλ‘μ νΈ κ²½νμ μ΄λ μ λ ν΄λ³΄μμ§λ§, νμ νΌμμ λ°±μλ κ°λ°μ ν΄μκΈ°μ κ°μ λ°±μλ κ°λ°μμ νμ νλ κ²½νμ μ΄λ²μ΄ μ²μμ΄μμ΅λλ€. κ·Έλ¬ν μν© μμμ νμ₯μ΄λΌλ μν κΉμ§ λ§‘κ² λμ΄ κ±±μ μ΄ λ§μμ§λ§, νμλ€μ΄ μ λ°λΌμμ£Όκ³ μ κ·Ήμ μΌλ‘ μ견μ λ΄μ£Όμ΄ 무μ¬ν νλ‘μ νΈλ₯Ό λ§μΉ μ μμμ΅λλ€.
μλ‘μ΄ λλ©μΈ μ§μκ³Ό μ¬μ©ν΄λ³΄μ§ μμ κΈ°μ μ€νμ μ νμ¬ λ§μ κ²μ λ°°μΈ μ μμκ³ , μ’μ 컨μ€ν΄νΈλκ³Ό μ½μΉλλ€ λλΆμ μκ°ν΄λ³΄μ§λ λͺ»ν λΆλΆλ€μ κ²½ννλ©° λ§μ μ±μ₯μ μ΄λ£° μ μμμ΅λλ€.
νμ₯μ μν μ΄μ μ ν λͺ μ νμ λλ κ°λ°μλ‘μ μ΄λ² νλ‘μ νΈλ₯Ό ν¨κ»ν No-Conflict νμ λͺ¨λμκ² κ°μ¬νλ€λ λ§μ μ νκ³ μΆμ΅λλ€. μμΌλ‘μ κ°λ° μ¬μ μ νμ΄μ΄ κ°λνκΈΈ λ°λλλ€!
νμ κ°λ° 곡λΆλ νΌμ μ§νν΄μκ³ λκ΅°κ°μ νΌλλ°± λν λ°μλ³Έ μ μμμ§λ§, κ³΅ν΅ νλ‘μ νΈλ₯Ό μ§ννλ©΄μ κΈ°λ₯ νλλ₯Ό μμ±ν λλ§λ€ μλ‘μ μ½λμ λν΄ νΌλλ°±μ νλ©° μ±μ₯ν μ μμμ΅λλ€.
λ΄κ° μ§ μ½λλ₯Ό μ€λͺ νκ³ , λλ£ κ°λ°μκ° μ§ μ½λμ λν μ€λͺ μ λ€μΌλ©΄μ μ½λ μμ± μ΅κ΄κ³Ό λΆνμν λ‘μ§ μ κ±°, λ³΄λ€ ν¨μ¨μ μΈ κ΅¬ν λ°©λ²μ λν΄ νμ κ³ λ―Όνκ² λμμ΅λλ€.
μ΄λ¬ν νμ κ³Ό μ½λ 리뷰 κ³Όμ μ ν΅ν΄ μ€λ ₯μ΄ ν¬κ² ν₯μλ κ² κ°μ λ§€μ° μ¦κ±°μ κ³ , νΌμμλ λ°κ²¬νμ§ λͺ»νμ κ°μ μ λ€μ μ°Ύμ μ μμ΄ λ»κΉμ κ²½νμ΄μμ΅λλ€.
7μ£Όκ° νλ‘μ νΈλ₯Ό μ§ννλ©° λͺ¨λ°μΌ μ± λμμΈ, λ³ΈμΈμΈμ¦ API μ°λ, SSE λ± μλ‘μ΄ κΈ°μ μ κ²½νν μ μμ΄ μ¦κ±°μ μ΅λλ€.
λ€λ§ μ€κ°λ° κΈ°κ°μ΄ μ§§μ μ€κ³λ₯Ό μΆ©λΆν νμ§ λͺ»ν΄ νλ‘ νΈμλ ν΄λ ꡬ쑰μ μ½λ μ€νμΌμ ν΅μΌνμ§ λͺ»ν μ μ΄ μμ¬μ κ³ , κ°λ° μ€ κ³μ ν·κ°λ¦° μ©μ΄λ€μ κ³κΈ°λ‘ μ©μ΄ μ¬μ μ νμμ±λ λ§μ΄ λκΌμ΅λλ€.
μλ‘μ μ½λλ₯Ό ν¨κ» 리뷰νκ³ μ± μμ§λ κ³Όμ μ ν΅ν΄ λ κΌΌκΌΌνκ² νλ €κ³ λ Έλ ₯νλ κ² κ°κ³ μ΄ κ³Όμ μ ν΅ν΄ λ€λ₯Έ μ¬λμ μ½λλ₯Ό μ½λ λ²λ μμ°μ€λ½κ² λ°°μ°λ©° μ±μ₯ν μ μμλ κ² κ°μ΅λλ€.
7μ£Ό λμ ν¨κ» λ°€μμκ°λ©° λ¬λ €μ€ νμλ€, μ§μ¬μΌλ‘ κ°μ¬ν©λλ€!
μ°μ μ κ° μ μνλ μ£Όμ λ‘ νλ‘μ νΈλ₯Ό μ§νν μ μμ΄ μ’μμ΅λλ€! νμ κ΄μ¬μμλ λΆμΌμμλλ° μ¬λ°κ² μμ νμμ΅λλ€. λλΆμ΄, SSEλ κ²°μ κ΄λ ¨ κΈ°λ₯ λ± λ€μν κΈ°λ₯μ μ νκ³ κ΅¬νν΄λ΄μ μ’μκ³ μμΌλ‘μ νλ‘μ νΈμμλ λμμ΄ λ κ² κ°μ΅λλ€.
μ’ μλ²½νκ² μ§ννκ³ μΆλ€λ³΄λ μ²μμ νμΌ κ΅¬μ‘°λΆν° μ κ²½μ λ§μ΄ μ°λλΌ μκ°μ λ§μ΄ μ΄ κ²μ΄ μμ¬μ μ΅λλ€. κ·Έλλ ν λ² ν΄λ΄€μΌλ λ€μμλ JIRAλ₯Ό λ μ νμ©ν΄μ μκ°μ μ μ½ν μ μμ κ² κ°μ΅λλ€.
λ€μ νλ‘μ νΈμλ μ’ λ κ°μ²΄μ§ν₯μ μΌλ‘ μ¬μ¬μ© κ°λ₯ν μ½λλ₯Ό μμ±νκ³ μΆμ΅λλ€. λν κΈ°λ₯ ꡬνκ³Ό λλΆμ΄ λμμΈλ μ κ²½μ λ§μ΄ μ¨μ UI/UXλ₯Ό λ°μ μν€κ³ μΆμ΅λλ€.
νλ‘μ νΈκ° λλκ³ λλμ보λ λΆμ‘±ν μ μ λ₯λ ₯μ μμ¬μ΄ κ²λ λ§μ§λ§ μ€μ€λ‘ μ±μ₯νλ€κ³ λκΌλ λΏλ―ν κΈ°μ΅λ λ§κ³ , μν΅μ μ€μμ±, κΈ°λ‘μ μ€μμ± λ± λ°°μ΄ κ²λ λ§μ΅λλ€. μ²μμ νμ νλ₯Ό λΌμΉμ§ μκ² λ€λ λ§μμΌλ‘ μνλλ°, μμμ κ²©λ €ν΄μ€ νμλ€ λλΆμ μ λ μ λ₯Ό λ―Ώκ³ μ΄μ¬ν ν΄ λ³Ό μ μμμ΅λλ€. κ°μ λͺ©νλ₯Ό ν₯ν΄ 7μ£Όκ° κ°μ΄ λ¬λ €μ€ νμλ€ λͺ¨λ κ°μ¬νκ³ μκ³ λ§μΌμ ¨μ΅λλ€!
μ΄λ² νλ‘μ νΈμμλ μ΅μνμ§ μμ μΈνλΌ ννΈμ λμ νλ©° Jenkins κΈ°λ° CI/CD νμ΄νλΌμΈ ꡬμΆκ³Ό SSL μ μ© λ± μ€λ¬΄μ μΈ κ²½νμ λ§μ΄ μμ μ μμμ΅λλ€.
μΈνλΌ λ΄λΉμΌλ‘μ λλ μ μ, λ¨μν μλ² μ€μ μ λμ΄μ νμκ΄λ¦¬ λꡬ νμ©, ν κΈ°μ μ€ν μ λ°μ λν μ΄ν΄, κ·Έλ¦¬κ³ νλ‘μ νΈ κ΅¬μ‘°μ λν λͺ νν νμ μ΄ νμμ μ΄λΌλ κ²μ΄μμ΅λλ€.
μΈνλΌ κ΅¬μΆ κ³Όμ μ κΌΌκΌΌν λ¬Έμννλ €λ€λ³΄λ μ΄λ°μλ μμ μλκ° λλλ³΄μ¬ κΈ°λ‘μ νμμ±μ λν΄ κ³ λ―ΌνκΈ°λ νμ΅λλ€.
νμ§λ§ μ΄ν λμΌ μμ μ¬μ§ν, ν¬ν λ©λ΄μΌ μμ± λ±μ ν° λμμ΄ λλ©° κΈ°λ‘μ μ€μμ±μ λ€μ ν λ² μ²΄κ°νμ΅λλ€.
νμ μΈ‘λ©΄μμλ, μ λ₯ν νμ₯λμ λ§λ Jiraλ₯Ό ν΅ν νλ‘μ νΈ κ΄λ¦¬μ ν 컨벀μ μ 체κ³μ μΈ μ μ© λ±μ λ°°μ°λ©° κ°λ° κ³Όμ μμμ νμ λ¬Ένλ₯Ό κΉμ΄ μ΄ν΄ν μ μμμ΅λλ€.
No-ConflictλΌλ νλͺ μ²λΌ, μλ‘ λ°°λ €νκ³ λΆμ‘±ν λΆλΆλ μ΄ν΄ν΄μ£Όκ³ κ²©λ €ν΄μ£Όλ λΆμκΈ° λλΆμ νλ‘μ νΈλ₯Ό μ λ§λ¬΄λ¦¬ν μ μμλ€κ³ μκ°ν©λλ€.
μ’μ νμλ€μ λ§λκ² λμ΄μ, κ·Έλ¦¬κ³ μΈνλΌ λ΄λΉμΌλ‘ 6μΈ κ·λͺ¨μ νλ‘μ νΈμμ λ°°ν¬ κ²½νμ μμ μ μμ΄μ κ°μ¬νμ΅λλ€.










