🎯 μΈμˆ˜ν…ŒμŠ€νŠΈμ— λŒ€ν•΄ μ •λ¦¬ν•©λ‹ˆλ‹€.


πŸ“— Today I Learned

인수 ν…ŒμŠ€νŠΈ (UAT)

μΈμˆ˜ν…ŒμŠ€νŠΈ(UAT; User Acceptance Test)λŠ” κΈ°λŠ₯이 μš”κ΅¬μ‚¬ν•­ (requirement) λŒ€λ‘œ κΈ°λŠ₯이 κ΅¬ν˜„λ˜μ—ˆλŠ”μ§€λ₯Ό μ‚¬μš©μž κ΄€μ μ—μ„œ κ²€μ¦ν•˜λŠ” μ ˆμ°¨μž…λ‹ˆλ‹€.

μ΄λŠ” 전체 μ‹œμŠ€ν…œμ„ μ‚¬μš©μž κ΄€μ μ—μ„œ μ‹œν—˜ν•˜λŠ” λΈ”λž™λ°•μŠ€ ν…ŒμŠ€νŠΈλ₯Ό ν¬ν•¨ν•˜κ³ , μ‹œμŠ€ν…œμ΄ β€˜κΈ°λŠ₯μ μœΌλ‘œβ€™ 잘 λ™μž‘ν•˜λŠ”μ§€λ§Œμ΄ μ•„λ‹ˆλΌ, μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ μ‚¬μš©ν•  수 μžˆμ„ μˆ˜μ€€μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” 데 쀑점을 λ‘‘λ‹ˆλ‹€.


πŸ€” 인수 ν…ŒμŠ€νŠΈ μ™œ μžλ™ν™”κ°€ μ–΄λ €μšΈκΉŒ?

  • μ‚¬μš©μž μ°Έμ—¬ ν•„μš” : 기술적 μΈ‘λ©΄κ³Ό λΉ„κΈ°μˆ μ  츑면에 λŒ€ν•œ μš”κ΅¬μ‚¬ν•­μ˜ μ΅œμ’… 확인은 μ‹€μ‚¬μš©μžμ—¬μ•Ό ν•©λ‹ˆλ‹€.
  • μ˜μ‘΄μ„± 톡합 μ‹€ν–‰ : ν…ŒμŠ€νŠΈ μ‹œμ μ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‹€μ œ ν™˜κ²½μ²˜λŸΌ λͺ¨λ“  μ˜μ‘΄μ„± μ„œλΉ„μŠ€μ™€ ν•¨κ»˜ μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • μŠ€ν…Œμ΄μ§• ν™˜κ²½ ꡬ좕 ν•„μš” : ν…ŒμŠ€νŠΈλŠ” λ°˜λ“œμ‹œ ν”„λ‘œλ•μ…˜κ³Ό μ΅œλŒ€ν•œ λ™μΌν•œ ν™˜κ²½(μŠ€ν…Œμ΄μ§•)μ—μ„œ 이루어져야 ν•©λ‹ˆλ‹€.
  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 동일성 보μž₯ : ν”„λ‘œλ•μ…˜μ— 배포될 μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ™„μ „νžˆ λ™μΌν•œ λΉŒλ“œ κ²°κ³Όλ¬Ό(λ°”μ΄λ„ˆλ¦¬)을 μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 릴리슀 μ€€λΉ„ : 인수 ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•œ 결과물은 λ°”λ‘œ λ¦΄λ¦¬μŠ€ν•  수 μžˆλŠ” ν’ˆμ§ˆμ„ κ°–μΆ”κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ•„ν‹°νŒ©νŠΈ 리포지토리 (Artifact Repository)

μœ„μ—μ„œ μ–ΈκΈ‰ν•œ β€œλ™μΌν•œ λ°”μ΄λ„ˆλ¦¬ μ‚¬μš©β€μ„ 보μž₯ν•˜κΈ° μœ„ν•΄ κΌ­ ν•„μš”ν•œ μš”μ†Œκ°€ λ°”λ‘œ μ•„ν‹°νŒ©νŠΈ λ¦¬ν¬μ§€ν† λ¦¬πŸ“¦ μž…λ‹ˆλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ μƒμ„±λ˜λŠ” νŒ¨ν‚€μ§€, λ°”μ΄λ„ˆλ¦¬, 라이브러리 λ“± 결과물을 μ €μž₯,관리,배포할 수 μžˆλŠ” 쀑앙 μ €μž₯μ†Œλ₯Ό λ§ν•©λ‹ˆλ‹€.

버전 관리, μ ‘κ·Ό μ œμ–΄, 이λ ₯ 좔적 λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λ©°, CI/CD νŒŒμ΄ν”„λΌμΈμ˜ 각 단계가 λ™μΌν•œ μ•„ν‹°νŒ©νŠΈλ₯Ό μ‚¬μš©ν•  수 있게 ν•΄μ€λ‹ˆλ‹€.


도컀 λ ˆμ§€μŠ€νŠΈλ¦¬ (Docker Registry)

μ˜€λŠ˜λ‚  λ§Žμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ»¨ν…Œμ΄λ„ˆ 기반으둜 운영되며, 이 경우 μ•„ν‹°νŒ©νŠΈλŠ” 일반적인 νŒ¨ν‚€μ§€κ°€ μ•„λ‹ˆλΌ 도컀 이미지(Docker Image)μž…λ‹ˆλ‹€.

도컀 이미지λ₯Ό μ €μž₯ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” μ „μš© μ•„ν‹°νŒ©νŠΈ μ €μž₯μ†Œκ°€ λ°”λ‘œ 도컀 λ ˆμ§€μŠ€νŠΈλ¦¬(Docker Registry)μž…λ‹ˆλ‹€.

도컀 λ ˆμ§€μŠ€νŠΈλ¦¬ μ’…λ₯˜

  • ν΄λΌμš°λ“œ 방식 λ ˆμ§€μŠ€νŠΈλ¦¬

    • Docker Hub

    • AWS ECR

    • GCP Artifact Registry

    • Azure Container Registry λ“±


  • 자체 ν˜ΈμŠ€νŒ… 방식 λ ˆμ§€μŠ€νŠΈλ¦¬

    • 쑰직 λ‚΄λΆ€ λ³΄μ•ˆ 정책상 μ™ΈλΆ€ μ €μž₯μ†Œ μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•œ 경우 μ‚¬μš©ν•©λ‹ˆλ‹€.

    • 직접 ν΄λŸ¬μŠ€ν„° 내에 λ ˆμ§€μŠ€νŠΈλ¦¬λ₯Ό μ„€μΉ˜ν•˜κ³  μš΄μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

      • 인증, μ ‘κ·Ό μ œμ–΄, TLS ꡬ성 등을 μˆ˜λ™μœΌλ‘œ μ²˜λ¦¬ν•΄μ•Ό ν•˜λ©°, 관리 뢀담이 ν½λ‹ˆλ‹€.

Jenkins νŒŒμ΄ν”„λΌμΈμ—μ„œμ˜ 인수 ν…ŒμŠ€νŠΈ

  1. κ°œλ°œμžκ°€ λ³€κ²½ν•œ μ½”λ“œλ₯Ό GitHub에 ν‘Έμ‹œ

  2. Jenkinsκ°€ 변경을 κ°μ§€ν•˜κ³  μ½”λ“œλ₯Ό μΈμΆœν•΄ λΉŒλ“œλ₯Ό μ‹œμž‘, μ½”λ“œ 점검(λ‹¨μœ„ν…ŒμŠ€νŠΈ μˆ˜ν–‰)

  3. Jenkinsκ°€ λΉŒλ“œλ₯Ό μ™„λ£Œν•˜μ—¬ 도컀 이미지λ₯Ό 생성

  4. Jenkinsκ°€ μƒμ„±ν•œ 이미지λ₯Ό λ ˆμ§€μŠ€νŠΈλ¦¬λ‘œ ν‘Έμ‹œ

  5. Jenkinsκ°€ μŠ€ν…Œμ΄μ§• ν™˜κ²½μ„ κ΅¬μ„±ν•˜κ³  도컀 μ»¨ν…Œμ΄λ„ˆ μ‹€ν–‰

  6. μŠ€ν…Œμ΄μ§• ν™˜κ²½μ˜ 도컀 ν˜ΈμŠ€νŠΈκ°€ 이미지λ₯Ό κ°€μ Έλ‹€κ°€(Pull) μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰

  7. Jenkinsκ°€ μŠ€ν…Œμ΄μ§• ν™˜κ²½μ—μ„œ μ‹€ν–‰ 쀑인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λŒ€μƒμœΌλ‘œ 인수 ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰
    좜처: oreilly




μ‚¬μš©μž-λŒ€λ©΄ ν…ŒμŠ€νŠΈ

μ½”λ“œ λ‹¨μœ„μ—μ„œ κΈ°λŠ₯이 잘 μž‘λ™ν•˜λŠ” 것과 μ‚¬μš©μž μž…μž₯μ—μ„œ κ·Έ κΈ°λŠ₯이 μ œλŒ€λ‘œ μ „λ‹¬λ˜λŠ” 것은 μ „ν˜€ λ‹€λ₯Έ μ΄μ•ΌκΈ°μž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, REST APIλŠ” curl λͺ…λ Ήμ–΄λ‘œ ν…ŒμŠ€νŠΈν•  수 μžˆμ§€λ§Œ, λΉ„κ°œλ°œμžμΈ μ‹€μ œ μ‚¬μš©μžλ‚˜ μ‚¬μ—…λΆ€μ„œ λ‹΄λ‹Ήμž μž…μž₯μ—μ„œλŠ” κ·Έ κ²°κ³Όλ₯Ό 읽고 μ΄ν•΄ν•˜κΈ°κ°€ μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

λ˜ν•œ 이런 μ‹μ˜ ν…ŒμŠ€νŠΈλŠ” μ½”λ“œκ°€ λ°”λ€”μˆ˜λ‘ κ°±μ‹ ν•˜κΈ° μ–΄λ €μ›Œ μœ μ§€λ³΄μˆ˜μ—λ„ μ·¨μ•½ν•©λ‹ˆλ‹€.

κ·Έλž˜μ„œ μ‚¬μš©μžμ™€ ν•¨κ»˜ μž‘μ„±ν•˜κ³ , λˆ„κ΅¬λ‚˜ 이해할 수 μžˆλŠ” ν˜•νƒœμ˜ ν…ŒμŠ€νŠΈ 방식이 ν•„μš”ν•΄μ§‘λ‹ˆλ‹€. 이런 λ°°κ²½μ—μ„œ λ“±μž₯ν•œ 것이 λ°”λ‘œ BDD와 TDDμž…λ‹ˆλ‹€.


BDD (Behavior-Driven Development)

BDDλŠ” κΈ°λŠ₯ μš”κ΅¬μ‚¬ν•­μ„ μ‚¬μš©μž λ˜λŠ” ν”„λ‘œλ•νŠΈ μ˜€λ„ˆμ˜ μ–Έμ–΄λ‘œ ν‘œν˜„ν•˜κ³ , 이λ₯Ό ν…ŒμŠ€νŠΈλ‘œ μ—°κ²°ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.

  • μ‚¬μš©μž λ˜λŠ” PM이 인수 기쀀을 λͺ…ν™•νžˆ μ •μ˜ν•©λ‹ˆλ‹€.

  • κ°œλ°œμžλŠ” ν•΄λ‹Ή 기쀀에 맞좰 ν…ŒμŠ€νŠΈ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€.

  • μžμ—°μ–΄μ— κ°€κΉŒμš΄ DSL(Domain-Specific Language)둜 μ‹œλ‚˜λ¦¬μ˜€ μž‘μ„±ν•©λ‹ˆλ‹€.


TDD (Test-Driven Development)

TDDλŠ” ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³ , ν…ŒμŠ€νŠΈλ₯Ό 톡과할 수 μžˆλŠ” μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” 개발 λ°©λ²•λ‘ μž…λ‹ˆλ‹€.

  • 인수 기쀀을 ν…ŒμŠ€νŠΈλ‘œ λ¨Όμ € μž‘μ„±ν•˜μ—¬ ν…ŒμŠ€νŠΈ 톡과λ₯Ό κΈ°λŠ₯ κ΅¬ν˜„ μ™„λ£Œλ‘œ κ°„μ£Όν•©λ‹ˆλ‹€.

    • 이슈 νŠΈλž˜ν‚Ή μ‹œμŠ€ν…œ(예: Jira)의 κΈ°λŠ₯ μš”μ²­μ— 인수 사양을 ν¬ν•¨μ‹œν‚€λŠ” 방식도 μžˆμŠ΅λ‹ˆλ‹€.



✏️ 회고

TDDλ₯Ό 많이 λ“€μ—ˆμ—ˆλŠ”λ° μ‹€μ œλ‘œ κ°œλ…μ„ μ•Œκ³ λ‚˜λ‹ˆ ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³ , μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜λŠ” λ°©λ²•μ΄λΌλŠ” 것을 보톡 μƒκ°ν–ˆλ˜ 방법이 μ•„λ‹ˆλΌμ„œ μ‹ κΈ°ν–ˆλ‹€.

profile
🌱개발 기둝μž₯

0개의 λŒ“κΈ€