Scala for Backend Engineering & Functional Programming · 강의

Akka 액터 모델 기초

동시 실행을 위한 액터 모델의 원리, 액터 수명 주기와 메시지 전달을 이해합니다.

레슨 1/312개 단계

Akka 액터 모델 기초은(는) CoddyKit의 무료 Scala for Backend Engineering & Functional Programming 강의입니다. 이것은 3개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Scala for Backend Engineering & Functional Programming 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Scala for Backend Engineering & Functional Programming 강의에는 총 3개의 강의가 포함되어 있습니다.

동시성 문제에 대처하기

현대 애플리케이션에서는 작업을 동시에 실행해야 하는 경우가 많습니다. 이를 동시성이라고 합니다. 동시성은 강력하지만 여러 문제를 동반합니다.

  • 경쟁 상태: 여러 스레드가 공유 데이터에 동시에 접근하고 수정하여 예측할 수 없는 결과가 발생하는 상황입니다.
  • 교착 상태: 둘 이상의 스레드가 서로 리소스를 해제하기를 기다리며 무기한 차단되는 상황입니다.

이러한 문제를 다룰 때 기존 스레드 모델은 복잡하고 오류가 발생하기 쉽습니다.

액터 모델 이해하기

액터 모델은 동시성을 관리하는 강력한 방법을 제공합니다. 액터는 메모리를 공유하는 대신 서로 메시지를 보내는 방식으로만 통신합니다.

  • 격리: 각 액터에는 다른 액터가 직접 접근할 수 없는 고유한 비공개 상태가 있습니다.
  • 메시지 전달: 액터는 서로의 우편함에 변경할 수 없는 메시지를 보내 상호 작용합니다.
  • 비동기식: 메시지 전송은 차단되지 않으므로 발신자는 응답을 기다리지 않습니다.

액터를 각자 책상(상태)과 우편 서비스(메시지 전달)를 가진 독립적인 사람이라고 생각해 보세요.

Akka를 선택하는 이유

Akka는 Scala(및 Java)에서 액터 모델을 구현할 수 있게 해 주는 오픈 소스 도구 모음입니다. 높은 동시성, 분산 처리, 장애 허용 기능을 갖춘 애플리케이션을 구축하도록 설계되었습니다.

  • 간편성: 낮은 수준의 스레드 세부 사항을 추상화하여 동시성 프로그래밍을 간소화합니다.
  • 확장성: 애플리케이션을 단일 컴퓨터에서 컴퓨터 클러스터로 쉽게 확장할 수 있습니다.
  • 회복력: 장애를 처리하고 시스템이 스스로 복구할 수 있도록 기본 제공 메커니즘을 제공합니다.

Akka를 사용하면 부하가 크거나 일부 장애가 발생한 상황에서도 "그냥 작동하는" 시스템을 작성할 수 있습니다.

Akka 액터 내부

Akka 액터는 동시성을 구성하는 기본 단위입니다. 각 액터에는 다음이 있습니다.

  • 동작: 메시지에 어떻게 반응하는지에 따라 정의됩니다.
  • 우편함: 수신 메시지가 대기하는 곳입니다. 메시지는 한 번에 하나씩 순서대로 처리됩니다.
  • 비공개 상태: 액터에만 속하며 액터 자신만 수정할 수 있는 데이터입니다.
  • ActorRef: 이 액터에 메시지를 보내기 위한 고유 주소입니다.

이처럼 엄격한 격리를 통해 경쟁 상태와 같은 일반적인 동시성 버그를 방지할 수 있습니다.

첫 번째 ActorSystem

액터를 만들기 전에 ActorSystem이 필요합니다. 이는 Akka의 진입점으로, 범위 내의 모든 액터를 관리합니다.

또한 예약, 구성, 감독 계층 구조와 같은 서비스를 제공합니다(감독 계층 구조는 나중에 다룹니다).

다음과 같이 만들어 보세요.

import akka.actor.ActorSystem

object Main extends App {
  // Create an ActorSystem
  val system = ActorSystem("MyActorSystem")
  println(s"ActorSystem created: ${system.name}")

  // Terminate the system when done (important for clean shutdown)
  system.terminate()
}

첫 번째 액터 만들기

액터를 만들려면 Akka의 Actor 트레이트를 확장하는 클래스를 정의하고 receive 메서드를 구현합니다.

receive 메서드는 액터가 수신 메시지를 처리하는 방식을 정의합니다. 메시지 유형을 매칭하는 부분 함수입니다.

import akka.actor.Actor

class GreeterActor extends Actor {
  def receive: Receive = {
    case message: String =>
      println(s"Greeter received: $message")
  }
}

액터와 ActorRef 생성하기

액터는 ActorSystem의 actorOf 메서드를 사용하여 생성하거나 "스폰"합니다. 이 메서드는 ActorRef를 반환합니다.

ActorRef는 액터에 연결하기 위한 가볍고 직렬화 가능한 핸들입니다. 액터 인스턴스와 직접 상호 작용하지 않고 이 핸들을 사용하여 액터에 메시지를 보냅니다.

import akka.actor.{ActorSystem, Props, Actor}

class GreeterActor extends Actor {
  def receive: Receive = {
    case message: String =>
      println(s"Greeter received: $message")
  }
}

object Main extends App {
  val system = ActorSystem("MyActorSystem")

  // Create an actor and get its ActorRef
  val greeterRef = system.actorOf(Props[GreeterActor], "greeter")
  println(s"Greeter actor created with path: ${greeterRef.path}")

  system.terminate()
}

액터에 메시지 보내기

액터 간 통신은 오직 메시지를 통해서만 이루어집니다. !(tell) 연산자를 사용하여 ActorRef에 메시지를 보냅니다.

메시지는 비동기적으로 전송되며, 일반적으로 변경할 수 없는 케이스 클래스나 String과 같은 단순한 형식입니다.

import akka.actor.{ActorSystem, Props, Actor}

class GreeterActor extends Actor {
  def receive: Receive = {
    case message: String =>
      println(s"Greeter received: $message")
  }
}

object Main extends App {
  val system = ActorSystem("MyActorSystem")

  val greeterRef = system.actorOf(Props[GreeterActor], "greeter")

  // Send a message to the greeter actor
  greeterRef ! "Hello Akka!"
  greeterRef ! "How are you?"

  // Give actors time to process messages before terminating
  Thread.sleep(100)
  system.terminate()
}

액터 생명 주기 기초

액터에는 생성부터 종료까지의 생명 주기가 있습니다. Akka는 설정 및 정리 작업을 수행할 수 있도록 다음 훅을 제공합니다.

  • preStart(): 액터가 첫 번째 메시지 처리를 시작하기 직전에 호출됩니다. 리소스를 초기화할 때 유용합니다.
  • postStop(): 액터가 중지된 후 시스템에서 완전히 제거되기 전에 호출됩니다. 리소스를 해제할 때 유용합니다.

액터 리소스를 효과적으로 관리하려면 생명 주기를 이해하는 것이 매우 중요합니다.

액터 계층

액터는 파일 시스템과 비슷한 계층 구조로 구성됩니다. "루트 보호자" 액터를 제외한 모든 액터에는 부모가 있습니다.

  • 감독: 부모 액터는 자식 액터를 감독할 책임이 있습니다. 자식 액터가 실패하면 부모가 해당 실패를 처리하는 방법(예: 재시작 또는 중지)을 결정합니다.
  • 경로: 각 액터에는 /user/myActor/childActor와 같은 고유한 경로가 있으며, 이 경로는 계층 구조에서 액터의 위치를 나타냅니다.

이 계층 구조는 Akka의 장애 허용 및 복원력 기능의 핵심입니다.

Akka 기초 확인

Akka 액터 모델의 기초 개념을 제대로 이해했는지 테스트해 보겠습니다.

복습: Akka 액터 모델

잘하셨습니다! 이번 레슨에서는 Akka 액터 모델의 다음 기본 개념을 배웠습니다.

  • 기존 동시성 처리의 어려움
  • 액터 모델의 원칙: 격리, 메시지 전달, 공유 상태 없음
  • 견고한 액터 시스템을 구축하기 위한 도구 모음으로서 Akka의 역할
  • Scala에서 ActorSystem과 간단한 액터를 정의하는 방법
  • 액터를 생성하고 ActorRef를 사용하여 액터에 메시지를 보내는 방법
  • 액터 생명 주기와 계층의 기초

다음에는 액터 시스템 설계와 더 복잡한 상호 작용 처리에 대해 자세히 알아보겠습니다!

무료로 시작

AI 튜터와 함께 Scala을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
39
레슨
143

자주 묻는 질문

“Akka 액터 모델 기초” 강의는 무료인가요?

네 — “Akka 액터 모델 기초” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Scala for Backend Engineering & Functional Programming 강의 전체를 잠금 해제할 수 있습니다. Scala for Backend Engineering & Functional Programming 강의에는 총 3개의 강의가 포함되어 있습니다.

“Akka 액터 모델 기초”에서 뭘 배우나요?

동시 실행을 위한 액터 모델의 원리, 액터 수명 주기와 메시지 전달을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Scala for Backend Engineering & Functional Programming을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Scala for Backend Engineering & Functional Programming을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Scala for Backend Engineering & Functional Programming은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 1번째 강의입니다.

“Akka 액터 모델 기초” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Scala for Backend Engineering & Functional Programming 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Scala for Backend Engineering & Functional Programming 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Akka 액터 모델 기초
  2. 액터 시스템 설계
  3. 감독과 내결함성
← Scala for Backend Engineering & Functional Programming(으)로 돌아가기