λ³Έ 기고문은 μ˜€ν”ˆμ†ŒμŠ€ μ„œλ²„λ¦¬μŠ€ ν”Œλž«νΌμΈ Apache OpenWhisk λ₯Ό μ†Œκ°œν•œλ‹€. λ¨Όμ € μ„œλ²„λ¦¬μŠ€μ™€ OpenWhisk 에 λŒ€ν•΄ κ°„λ‹¨νžˆ μ•Œμ•„λ³΄κ³  OpenWhisk 이 μ–΄λ–»κ²Œ μ˜€ν”ˆμ†ŒμŠ€λ‘œ 개발되고 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³Έλ‹€. κ·Έ λ‹€μŒ OpenWhisk 의 ꡬ체적인 λ™μž‘λ°©μ‹μ„ 톡해 μ„œλ²„λ¦¬μŠ€ μ•„ν‚€ν…μ²˜λ₯Ό λΆ„μ„ν•˜κ³ , μ„œλ²„λ¦¬μŠ€ ν”Œλž«νΌμ„ 보닀 λΉ λ₯΄κ²Œ μ΅œμ ν™”ν•œ 방법을 μ°Ύμ•„λ³Έλ‹€. λ§ˆμ§€λ§‰μœΌλ‘œ μ˜€ν”ˆμ†ŒμŠ€ μ„œλ²„λ¦¬μŠ€ ν”Œλž«νΌμœΌλ‘œ Apache OpenWhisk κ°€ μ–΄λ–»κ²Œ λ°œμ „ν–ˆλŠ”μ§€, μ–΄λ–€ λ°©ν–₯으둜 개발되고 μžˆλŠ”κ°€ ν™•μΈν•œλ‹€.

  1. Apache OpenWhisk – μ†Œκ°œ 및 아킀텍쳐
  2. Apache OpenWhisk – μ‹€ν–‰ κ³Όμ •
  3. Apache OpenWhisk – 더 μ•Œμ•„λ³΄κΈ°

OpenWhisk μ‹€ν–‰ κ³Όμ • 깊이 보기 – μ„œλ²„λ¦¬μŠ€λ₯Ό λΉ λ₯΄κ²Œ ν•΄λ³΄μž

μ„œλ²„λ¦¬μŠ€ ν”Œλž«νΌμ€ 빨라야 ν•œλ‹€. μ„œλ²„λ¦¬μŠ€κ°€ κΈ°μ‘΄ 마이크둜 μ„œλΉ„μŠ€λ‚˜ API 등을 μ–΄λŠ 정도 λŒ€μ²΄ν•˜κ²Œ λ˜λŠ”λ°, ν•œ 개의 μ™ΈλΆ€ μš”μ²­μ΄ μ—¬λŸ¬ 개의 λ‚΄λΆ€ API λ₯Ό ν˜ΈμΆœν•˜λŠ” 마이크둜 μ„œλΉ„μŠ€μ˜ νŠΉμ„±μ„ λ”°λΌκ°€κ²Œ λœλ‹€. μ΄λŸ¬ν•œ 닀쀑 호좜 κ΅¬μ‘°μ—μ„œ μ„œλ²„λ¦¬μŠ€ ν”Œλž«νΌμ΄ 느리면 전체 μ‹œμŠ€ν…œμ€ 훨씬 큰 영ν–₯을 λ°›κ²Œ λ˜λŠ” 것이 ν΄λΌμš°λ“œμ˜ μˆ™λͺ…이닀.

ν•˜μ§€λ§Œ 효율적인 μžμ› 배뢄을 μœ„ν•œ μ„œλ²„λ¦¬μŠ€ ν”Œλž«νΌμ΄ κΈ°μ‘΄ μ„œλ²„ 기반 ν”Œλž«νΌλ³΄λ‹€ λΉ λ₯΄κΈ°λŠ” 쉽지 μ•Šλ‹€. 인증, μžμ› λ°°λΆ„ λ“±μ˜ μž‘μ—…μ΄ μ„œλ²„ ν”Œλž«νΌμ— λΉ„ν•΄ μΆ”κ°€λ˜λŠ”λ°, μ΄λŸ¬ν•œ κ°„μ ‘ λΉ„μš© (overhead) 이 μ„œλ²„λ¦¬μŠ€λ₯Ό 느리게 λ§Œλ“ λ‹€. OpenWhisk λŠ” 더 λΉ λ₯΄κ²Œ μš”μ²­μ„ μ‹€ν–‰ν•˜κ³  μ‘λ‹΅ν•˜κΈ° μœ„ν•˜μ—¬ λͺ‡κ°€μ§€ μ‹€ν–‰ μ΅œμ ν™” 방법을 μ‚¬μš©ν•œλ‹€. μ„œλ²„λ¦¬μŠ€λ₯Ό μ–΄λ–»κ²Œ λΉ λ₯΄κ²Œ μš΄μ˜ν•  수 μžˆλŠ”μ§€ OpenWhisk 사둀λ₯Ό 뢄석해본닀.

핡심 경둜 (Critical path)

μ‚¬μš©μžκ°€ OpenWhisk μš”μ²­μœΌλ‘œλΆ€ν„° 응닡 받을 λ•ŒκΉŒμ§€μ˜ 핡심 경둜λ₯Ό νŒŒμ•…ν•˜μ—¬ μ–΄λŠ 뢀뢄이 병λͺ©μ΄ 될 수 μžˆλŠ”μ§€ 확인해본닀. μ‚¬μš©μžκ°€ HTTP 둜 λΈ”λ‘œν‚Ή (Blocking) μš”μ²­μ„ 보내 μ‹€ν–‰ κ²°κ³Όλ₯Ό HTTP μ‘λ‹΅μœΌλ‘œ λ°›κΈ°λ‘œ ν–ˆλ‹€λ©΄, μ΄μ „μ˜ μ•„ν‚€ν…μ²˜ 쀑 λ‹€μŒ 핡심 κ²½λ‘œλŠ” λ°˜λ“œμ‹œ 거쳐야 ν•˜λŠ” 뢀뢄이닀.

openwhisk_critical_path.png

<κ·Έλ¦Ό> OpenWhisk μš”μ²­μ—μ„œ μ‹€ν–‰ ν›„ μ‘λ‹΅κΉŒμ§€ 핡심 경둜

  1. λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 인증 정보λ₯Ό κ°€μ Έμ˜¨λ‹€.
  2. ν•΄λ‹Ή μ•‘μ…˜λ„ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ°€μ Έμ˜¨λ‹€.
  3. μ‹€ν–‰ 정보λ₯Ό Kafka 둜 보낸닀
  4. 인보컀가 μ•‘μ…˜μ„ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ°€μ Έμ˜¨λ‹€
  5. 인보컀가 μ•‘μ…˜μ„ μ‹€ν–‰ν•œλ‹€.
  6. 인보컀가 μ‹€ν–‰ κ²°κ³Όλ₯Ό Kafka 에 μ „λ‹¬ν•œλ‹€.

μ»¨νŠΈλ‘€λŸ¬λŠ” Kafka μ—μ„œ 받은 μ‹€ν–‰ μ™„λ£Œ κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ μ „λ‹¬ν•˜κ³  HTTP μ„Έμ…˜μ„ λ‹«κ²Œ λœλ‹€. 이 핡심 κ²½λ‘œμ—μ„œ μ–΄λŠ 뢀뢄이 병λͺ©μ΄ λ˜μ–΄ μ‹œμŠ€ν…œμ„ 느리게 ν•  수 μžˆμ„κΉŒ? 5번 인보컀가 μ•‘μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 뢀뢄을 μžμ„Ένžˆ ν™•μΈν•΄λ³΄μž.

인보컀

μΈλ³΄μ»€λŠ” OpenWhisk 의 ν•΅μ‹¬μœΌλ‘œ μ‹€μ œ μ½”λ“œλ₯Ό μ•‘μ…˜μ˜ ν˜•νƒœλ‘œ μ±…μž„μ§€κ³  μ‹€ν–‰ν•œλ‹€. λ˜ν•œ μ‹œμŠ€ν…œμ—μ„œ κ°€μž₯ μ‘λ‹΅μ‹œκ°„μ„ 많이 μ†ŒλΉ„ν•˜κ²Œ λœλ‹€.
μ•„ν‚€ν…μ²˜μ—μ„œ ν™•μΈν•œ κ²ƒμ²˜λŸΌ μΈλ³΄μ»€λŠ” 도컀λ₯Ό 톡해 μ•‘μ…˜μ„ μ‹€ν–‰ν•œλ‹€. 각 μ•‘μ…˜μ€ μ»¨ν…Œμ΄λ„ˆμ—μ„œ 닀쀑 μ‚¬μš©μž ν™˜κ²½μ—μ„œ μ•ˆμ „ν•˜κ²Œ λΆ„λ¦¬λ˜μ–΄ μ‹€ν–‰λœλ‹€.
OpenWhisk λŠ” μ»¨ν…Œμ΄λ„ˆ λ‚΄λΆ€μ—μ„œ /init κ³Ό /run μ—”λ“œν¬μΈνŠΈλ₯Ό 가진 κ²½λŸ‰ HTTP μ„œλ²„λ₯Ό μ‹€ν–‰ν•œλ‹€. μ•‘μ…˜μ—μ„œ μ‹€ν–‰ν•  μ½”λ“œλŠ” /init 으둜 μ „λ‹¬λ˜μ–΄ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ‹€ν–‰ν•  μ€€λΉ„κ°€ λœλ‹€. Node.js μ½”λ“œλŠ” μ‹€ν–‰ μœ„μΉ˜λ‘œ λ³΅μ‚¬λ§Œ ν•˜λ©΄ λ˜μ§€λ§Œ Swift μ½”λ“œλŠ” 싀행을 μœ„ν•΄ μ»΄νŒŒμΌμ„ ν•΄μ•Ό μ΄ˆκΈ°ν™”κ°€ μ™„λ£Œλœλ‹€. μ»¨ν…Œμ΄λ„ˆμ˜ μ΄ˆκΈ°ν™”κ°€ μ™„λ£Œλ˜λ©΄ /run 으둜 μ»¨ν…Œμ΄λ„ˆ μ•ˆμ˜ μ½”λ“œλ₯Ό μ‹€ν–‰ν•  수 μžˆλ‹€.

openwhisk_invoker_path.png

<κ·Έλ¦Ό> 인보컀가 도컀 μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ•‘μ…˜μ„ μ‹€ν–‰ν•˜λŠ” 핡심 경둜

인보컀가 μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹€ν–‰ν•˜λŠ” 과정은 λ‹€μŒκ³Ό 같은 핡심 경둜λ₯Ό κ±°μΉœλ‹€.

  1. docker run μ»€λ§¨λ“œλ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‹œμž‘ν•œλ‹€. HTTP μš”μ²­μ„ ν•˜κΈ° μœ„ν•œ μ»¨ν…Œμ΄λ„ˆ IP μ£Όμ†ŒλŠ” docker inspect μ»€λ§¨λ“œλ‘œ κ°€μ Έμ˜¨λ‹€.
  2. μ‚¬μš©μžλ‘œλΆ€ν„° μš”μ²­λ°›μ€ μ•‘μ…˜μ˜ μ½”λ“œλ₯Ό /init 에 μ „λ‹¬ν•œλ‹€.
  3. /run 으둜 μ•‘μ…˜μ„ μ‹€ν–‰ν•œλ‹€.

μ‹€ν–‰μ‹œκ°„ μ΅œμ ν™”ν•˜κΈ°

μ§€κΈˆκΉŒμ§€ νŒŒμ•…ν•œ 핡심 경둜λ₯Ό μ’…ν•©ν•˜λ©΄ μ•‘μ…˜ 싀행에 κ±Έλ¦¬λŠ” μ‹œκ°„μ€ λ‹€μŒκ³Ό κ°™λ‹€.
 도컀 λͺ…λ Ήμ–΄ x 2: docker run λͺ…령어와 docker inspect λͺ…λ Ήμ–΄κ°€ ν•„μš”ν•œλ°, 도컀가 가상머신보닀 가볍긴 ν•˜μ§€λ§Œ 초기 싀행에 μ•½ 300ms μ •λ„μ˜ μ‹œκ°„μ΄ μ†Œμš”λœλ‹€.
 HTTP μš”μ²­ x 2: /init μš”μ²­μ— κ±Έλ¦¬λŠ” μ‹œκ°„μ€ 싀행될 μ½”λ“œμ˜ μ–‘κ³Ό μ–Έμ–΄λ§ˆλ‹€ λ‹€λ₯΄λ©°, /run 은 μ‹€μ œ μž‘μ—… λ‚΄μš©μ— 따라 κ²°μ •λœλ‹€.
 Kafka λ©”μ‹œμ§€ x 2: 인보컀둜 μž‘μ—…μ„ μ „λ‹¬ν•˜κ³  κ²°κ³Όλ₯Ό λ°›λŠ” 뢀뢄인데, μ•½ 5ms μ΄λ‚΄λ‘œ λΉ λ₯΄λ‹€.
 λ°μ΄ν„°λ² μ΄μŠ€ 호좜 x 3: μ»¨νŠΈλ‘€λŸ¬λŠ” μ‚¬μš©μž 인증과 μ•‘μ…˜μ„ κ°€μ Έμ˜€κ³  μΈλ³΄μ»€λŠ” μ•‘μ…˜ μ½”λ“œλ₯Ό λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ°€μ Έμ˜¨λ‹€. 이 μ‹œκ°„μ€ λ°μ΄ν„°λ² μ΄μŠ€ μœ„μΉ˜μ™€ μ½”λ“œ 크기 등에 영ν–₯을 λ°›λŠ”λ‹€.

openwhisk_cold_container.png

<κ·Έλ¦Ό> μ°¨κ°€μš΄ μ»¨ν…Œμ΄λ„ˆλŠ” μ΄ˆκΈ°ν™”μ— μ‹œκ°„μ΄ κ±Έλ € 느리게 μ‹€ν–‰λœλ‹€.

ν•œ μ•‘μ…˜μ„ μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 핡심 κ²½λ‘œκ°€ κ½€ λ³΅μž‘ν•˜λ‹€. 이 쀑 docker run 을 κ°€λŠ₯ν•œ 빨리 μ‹€ν–‰ν•˜κΈ° μœ„ν•΄ λ‹€μŒκ³Ό 같이 ν•˜λ‚˜μ”© μ‹œμŠ€ν…œμ„ μ΅œμ ν™”ν•  수 μžˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ μΊμ‹œ

μ—­μ‹œ μ΅œμ ν™”μ˜ 핡심은 μΊμ‹œ(cache)이닀. 인증과 μ•‘μ…˜μ— λŒ€ν•œ λ°μ΄ν„°λ² μ΄μŠ€ 호좜 κ²°κ³ΌλŠ” λ©”λͺ¨λ¦¬μ— μ˜¬λ €λ†“μ•„ μΊμ‹œν•  수 μžˆλ‹€. 같은 μš”μ²­μ΄ κΈ‰κ²©νžˆ 많이 듀어와도 μΊμ‹œλœ κ²°κ³Όλ₯Ό μ‚¬μš©ν•˜κ²Œ 되면 λ°μ΄ν„°λ² μ΄μŠ€ ν˜ΈμΆœμ€ μ „ν˜€ λ°œμƒν•˜μ§€ μ•ŠμœΌλ‹ˆ λ°μ΄ν„°λ² μ΄μŠ€λŠ” 더 이상 μ‹ κ²½ 쓰지 μ•Šμ•„λ„ λœλ‹€.

μ»¨ν…Œμ΄λ„ˆ μž¬ν™œμš©

μ•‘μ…˜μ˜ μ•ˆμ „ν•œ 격리λ₯Ό μœ„ν•΄ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν–ˆμ§€λ§Œ, 맀번 μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  μ‚­μ œν•˜λŠ” 것은 λΉ„νš¨μœ¨μ μ΄λ‹€. μ—¬κΈ°μ„œλ„ μΊμ‹œμ˜ ν•œ λ°©ν–₯으둜 μ»¨ν…Œμ΄λ„ˆλ₯Ό μž¬ν™œμš©ν•˜κΈ°λ‘œ ν•œλ‹€. μ‚¬μš©μžκ°€ 같은 μ•‘μ…˜μ„ 두 번 μš”μ²­ν•œ 경우 ν•œ μ»¨ν…Œμ΄λ„ˆμ—μ„œ μ•‘μ…˜μ„ 두 번 μ‹€ν–‰ν•˜λ©΄, docker run λͺ…λ Ήμ–΄λ‘œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μƒμ„±ν•˜κ³  /init μš”μ²­μ„ 톡해 μ½”λ“œλ₯Ό μ—…λ‘œλ“œν•˜κ³  μ•‘μ…˜μ„ μ€€λΉ„ν•˜λŠ” 과정을 μƒλž΅ν•  수 μžˆλ‹€. OpenWhisk μ—μ„œλŠ” μ΄λŸ¬ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό β€œλ”°λœ»ν•œ μ»¨ν…Œμ΄λ„ˆ (warm container)” 라고 λΆ€λ₯Έλ‹€. λ”°λœ»ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό 톡해 λ§Žμ€ μ–‘μ˜ μš”μ²­μ΄ λΉ λ₯΄κ²Œ 처리될 수 있고, μš”μ²­μ΄ 더 λ§Žμ•„μ§€λ©΄ λ”°λœ»ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό 더 μƒμ„±ν•˜μ—¬ λ°˜μ‘μ†λ„λ₯Ό 보μž₯ν•  수 μžˆλ‹€.

openwhisk_hot_container.png

<κ·Έλ¦Ό> λ”°λœ»ν•œ μ»¨ν…Œμ΄λ„ˆκ°€ 뜨겁게 타고 μžˆλ‹€.

이미 μ‹€ν–‰λ˜μ–΄ μ½”λ“œκ°€ μ€€λΉ„λ˜μ–΄ μžˆλŠ” λ”°λœ»ν•œ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜λ©΄, μ•‘μ…˜ 싀행에 도컀 λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ 되며 /init μš”μ²­μ„ ν•  ν•„μš”λ„ μ—†λ‹€. 남은 핡심 κ²½λ‘œλŠ” /run 을 μš”μ²­ν•˜λŠ” HTTP μš”μ²­ ν•œ κ°œμ™€ 2개의 Kafka λ©”μ‹œμ§€λ‘œ μ‹€μ œ μ½”λ“œμ˜ μ‹€ν–‰μ‹œκ°„κ³Ό μœ μ‚¬ν•˜κ²Œ λΉ λ₯΄λ‹€.

μ»¨ν…Œμ΄λ„ˆ μ˜ˆμ—΄

λ”°λœ»ν•œ μ»¨ν…Œμ΄λ„ˆλŠ” 많이 ν˜ΈμΆœλ˜λŠ” μ•‘μ…˜μ„ λΉ λ₯΄κ²Œ μ²˜λ¦¬ν•  μˆ˜λŠ” μžˆμ§€λ§Œ, β€œμ°¨κ°‘κ²Œ μ‹œμž‘ν•˜λŠ”β€ 속도 μ €ν•˜λ₯Ό λ§‰κΈ°λŠ” μ–΄λ ΅λ‹€. μ˜€λžœλ§Œμ— μ‹€ν–‰λ˜λŠ” μ•‘μ…˜μ€ μ»¨ν…Œμ΄λ„ˆ 생성에 μ‹œκ°„μ΄ κ±Έλ € 느리게 μ‘λ‹΅ν•˜κ²Œ λœλ‹€. 이λ₯Ό λ³΄μ™„ν•˜κΈ° μœ„ν•΄ OpenWhisk λŠ” β€œμ˜ˆμ—΄λœβ€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ€€λΉ„ν•΄λ‘”λ‹€. 예λ₯Ό λ“€μ–΄ Node.js μ•‘μ…˜μ΄ 많이 μš”μ²­λ˜λŠ” κ²½ν–₯이 μžˆλ‹€λ©΄ μ‚¬μš©μž μš”μ²­μ— λŒ€λΉ„ν•˜κΈ° μœ„ν•΄ Node.js μ»¨ν…Œμ΄λ„ˆλ₯Ό 미리 μ€€λΉ„ν•΄λ†“λŠ” 것이닀.

openwhisk_warm_container.png

<κ·Έλ¦Ό> μ˜ˆμ—΄λœ μ»¨ν…Œμ΄λ„ˆλŠ” μ•„μ£Ό λœ¨κ²μ§„ μ•Šμ§€λ§Œ λ”°λœ»ν•˜κ²Œ μ€€λΉ„λ˜μ–΄ μžˆλ‹€.

μ˜ˆμ—΄λœ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜λ©΄ 핡심 κ²½λ‘œμ—μ„œ κ°€μž₯ λ§Žμ€ μ‹œκ°„μ„ μ°¨μ§€ν•˜λŠ” docker run 과정을 쀄일 수 μžˆλ‹€. 이 경우 μƒˆλ‘œμš΄ μ•‘μ…˜ μš”μ²­μ΄λΌλ„ /init κ³Ό /run 의 HTTP μš”μ²­κ³Ό 2개의 Kafka λ©”μ‹œμ§€λ§Œ μ½”λ“œ μ‹€ν–‰μ‹œκ°„μ— μΆ”κ°€λœλ‹€.

λΉ λ₯΄κ³  효율적인 μ„œλ²„λ¦¬μŠ€ ν™˜κ²½μ„ μœ„ν•œ κ³ λ―Ό

openwhisk_containers.png

<κ·Έλ¦Ό> μ»¨ν…Œμ΄λ„ˆλ₯Ό 점점 뜨겁게 ν•˜μ—¬ 응닡속도λ₯Ό 쀄인닀.

OpenWhisk κ°€ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ»¨ν…Œμ΄λ„ˆλ₯Ό μΊμ‹œν•˜μ—¬ μ•‘μ…˜μ˜ μ‘λ‹΅μ‹œκ°„μ„ κ½€ λΉ λ₯΄κ²Œ (그닀지 λŠλ¦¬μ§€ μ•Šκ²Œ) ν•˜λŠ” 방법을 확인할 수 μžˆμ—ˆλ‹€. 이 외에도 OpenWhisk κ°€ 효율적으둜 운영되게 ν•˜λŠ” λ§Žμ€ κ°œμ„ μ‚¬ν•­μ΄ μžˆλŠ”λ°, 예λ₯Ό λ“€μ–΄ 도컀 λŒ€μ‹  runC λ₯Ό μ‚¬μš©ν•˜μ—¬ μ»¨ν…Œμ΄λ„ˆλ₯Ό μ‚¬μš©ν•˜λŠ” 방법, νŒŒμΌμ‹œμŠ€ν…œμ— 직접 μ ‘κ·Όν•΄μ„œ μ»¨ν…Œμ΄λ„ˆ 정보λ₯Ό κ°€μ Έμ˜€λŠ” 방법 등이 μ μš©λ˜μ–΄ μžˆλ‹€. 더 μžμ„Έν•œ λ‚΄μš©μ€ Apache OpenWhisk μ—μ„œ Github.com μ—μ„œ μ½”λ“œμ™€ 이슈, PR (Pull request) λ₯Ό 톡해 확인할 수 μžˆλ‹€.


λ‹€μŒ κΈ€: Apache OpenWhisk – 더 μ•Œμ•„λ³΄κΈ°


λ³Έ 글은 λ§ˆμ΄ν¬λ‘œμ†Œν”„νŠΈμ›¨μ–΄ 390ν˜Έμ— 기고된 κΈ€μž…λ‹ˆλ‹€.

ν† λ‘  μ°Έκ°€

이메일은 κ³΅κ°œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. ν•„μˆ˜ μž…λ ₯창은 * 둜 ν‘œμ‹œλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.