Post
KO

Akka (5)

akka를 이용해서 서비스를 구현하던 도중에 몇자 적어본다.**물론 지금 이해한 내용들은 지금 시점의 내가 이해한 부분이고 틀릴 수 있다.

우선 Akka는 모든게 비동기 처리다.

블록킹과 논블록킹 차이를 모른다면 우선 두개의 차이를 먼저 인지하고 가야한다.

상황**우리에게 주어진 환경은 서버를 더이상 늘릴 수 없고, 1대의 서버로 높은 효율성을 뽑아내야하는 숙제가 있었다. 그러던 도중 Actor에 대한 것을 알게된 연구원1과 그것을 실사례로 적용해보자는 이야기가 커져서 진행하게 되었다.

물론 서버 1대 외에도 시간이 부족한 점도 있다. 현재 Akka를 이용하여 개발하는 구성원 중 라이브 서비스 경험은 없다.

국내 사례를 찾아보았을 때 적절한 사례를 찾아내거나, 정리된 내용들을 알아내기 힘들다.

http://akka.io 의 사이트에 나와있는 Document를 이용한 예제들과 짧고 짧은 액터 모델 설명과 몇몇 예제코드, 그것을 바탕으로 액터들을 설계 후 테스트를 해본 뒤 의도한 결과와 맞지 않으면 코드는 삭제된다. (이게 참으로 반복된다. 나는 이 부분에 대해서 심각한 짜증을 겪었다.)****기존에 생각하던 방식으로 작성하려다보면, 많은 에로 사항이 발생된다.

우선 액터 모델을 알아보기 위해서는 아래 슬라이드를 참고하길 바란다. https://www.slideshare.net/jbugkorea/ss-39607946

[동영상 맛만 보자 액터 모델이란 맛만 보자 액터 모델이란 www.slideshare.net -->](https://www.slideshare.net/jbugkorea/ss-39607946)

Actor 모델은 다음과 같다.**

  1. mailBox 를 가지고 있다.
  2. 실행 단위 이다.
  3. 메시지로만 통신한다.

thread를 이용한 프로그래밍 방법과 actor model을 이용한 작성방법은 다르다 -_-; 매우 중요함..

한가지 더 액터모델에 대한 자료를 추가한다면 아래 슬라이드를 참고해 보자.

![](/assets/images/posts/221039062342/c2096a9cfc91.png?type=w580)

(위 슬라이드 장난 아님) http://akka.io그 밖의 Akka.io에서 소개페이지에서 나타내는 장애 처리와도 관련이 있다.

Event driven 방식의 reactor 패턴 같은 경우.

event 발생시 별도의 event queue로 event를 등록시킨 뒤 별도의 thread가 queue를 확인하면서 이벤트를 처리 하는 방식이다.

이와 같은 경우 main thread와 worker thread는 독립적으로 동작한다.

이때 worker thread에서 장애가 발생되었을 경우 main thread에게 알릴 방법이 없다.

하지만 actor model을 이용한 akka에서는 각 액터별로 발신자 정보를 가지고 있고, 오류가 발생되면 해당 오류에 관련한 메시지를 발신자에게 통보하여 예외 처리를 할 수 있다.

그리고 thread 경합 과정이 없이 비동기적으로 actor 모델 관 메시지로만 통신하다보니 순서가 존재하지 않는다. 그리고 이러한 lock 과정이 없기 때문에 CPU 자원을 최대로 끌어 올릴 수 있다. memory가 치는 경우는 없었다.

그리고 액터 모델이 문제가 발생하여 죽거나 죽일 수 있으며 새로운 액터 인스턴스로 교체도 가능하다.

그 내용은 위 슬라이드에서 얼랭에서의 분산시스템의 목적 부분을 보면 절대 죽지 않는 서비스를 한다는 내용이 있다.

그리고 다른 비즈니스 로직이 추가되었을 때 액터 모델을 새로 만들어 관리하게되면 확장성에도 열려 있다.

위에 나열한 몇가지 사항들을 명심하고 작성하였을 때에는 이런 딜레마가 생길 수 있다. 공유자원에 입각한 코드 작성. 이때 발생되는 동기화 문제 등.

akka는 모든 것이 비동기 시스템이라는 것을 명심하고, 순차적인 처리를 위해서는 어떤 상황을 고려해야 하는 가를 생각해둬야 한다.

수 많은 생각을 하였고, 더불어 수 많은 삽질을 하였고, 또한 많은 대화를 나눴으며, 또 많이 싸웠고, 많이 짯음에도 불구하고 다 지워 버렸다. ^^**

이후에 또다른 내용이 발생된다면 추가해서 작성하겠다.

This article is licensed under CC BY 4.0 by the author.