Sunday, 9 December 2018

[번역] 보상 시스템 설계의 숨겨진 힘

보상 시스템 설계의 숨겨진 힘


어떻게 효과적이고 책임 있는 보상을 설계할 것인가

보상은 강력하다

당신은 새로운 앱을 깔고 얼마 지나지 않아 지우거나, 다시는 열지 않습니다. 당신은 별 다른 이유 없이 몇 시간 동안 인스타그램 피드를 스크롤링 하며 빠져있기도 할 겁니다. 다른 제품들은 한, 두번 사용하지 않는 것 같은 반면에 특정 디지털 제품들은 어떻게 우리의 일상 생활에 뿌리 깊게 내리는지 잘 아는 것은 분명합니다. 

강력한 앱들은 매일 사용된다. 다른 것들은 지워지거나 잊혀진다.

가장 인기있는 앱들은 보상 시스템을 사용하여 사용자를 유지하고 참여시키고 사용자 간 공유를 증가시킵니다. 보상 시스템은 디자이너에게 제품으로부터 사용자들이 가치를 얻어내도록 하는데 보장하는 아주 강력한 도구입니다.

여러 보상 전달 방법들

알아차리지 못하고 있을지라도 우리는 매일 디지털 제품을 사용하면서 보상받습니다. 이러한 보상들은 항상 명확한 것은 아니며 가장 미묘한 것이 보통 가장 효과적입니다.

보상은 다양할 수 있지만 대부분 아래의 4가지 중 하나로 전달됩니다.

1. 정보 보상

2. 사회적 보상

3. 게임화 보상

4. 현금화 보상

어떤 제품이 이 모든 전달 방법을 사용할지라도 보상은 효과적일 수 있도록 사용자의 감정 레벨에 맞게 울려퍼져야 합니다. 감정이 더 강력할수록 보상은 더 강력한 경향이 있습니다.

1. 정보 보상

정보 보상은 피드를 통해 사용자에게 전달되는 이미지, 글, 컨텐츠입니다. 이러한 컨텐츠는 사용자가 만든 작은 아이템이거나 겉보기에 끝없이 보이는 컨텐츠가 많은 사이트입니다. 컨텐츠가 어떤 종류이건 상관 없이 정보 보상은 사용자의 호기심을 만족시킵니다.

미디엄, 트위터, 버즈피드가 정보 보상을 사용하는 앱의 좋은 예

 

슬롯 머신 메커니즘

2008년 소프트웨어 개발자 Loren Brichter가 트위터 앱 클라이언트 트위티를 설립합니다. 얼마 지나지 않아, 트위터는 트위티를 인수하고 그 서드 파티 앱을 공식 아이폰 앱으로 바꿨습니다. 결과적으로, 트위터는 앱스토어에서 자신의 영역을 공고화했고 대중에게 "당겨서 새로고침" 기능을 선보였습니다.


약 10년 전 트위티의 UI (이미지: InformationWeek)

트위터 앱이 출시 이후 많은 UI 변경이 있었지만 당겨서 새로고침 기능은 아직도 핵심 인터랙션 중 하나입니다. 인스타그램, 링크드인, 미디엄 같은 다른 앱들이 이 기능을 채택했고 가장 흔히 볼 수 있는 제스처 기능 중 하나로 만들었습니다.

트위터, 인스타그램, 링크드인, 미디엄은 당겨서 새로고침 기능을 사용하는 많은 앱 중 아주 소수다.

전 구글러이자 디자인 윤리학자인 Tristan Harris는 당겨서 새로고침 기능을 슬롯 머신에 비유했습니다. 그의 에서, "모든 기술 설계자가 해야할 것은 레버를 내리는 것 같이 사용자 액션을 변하는 보상과 연결시키는 것이다. 레버를 당기면 즉시 매혹적인 보상을 받거나 아무것도 받지 못한다."라고 했습니다. 새로운 정보와 컨텐츠를 받기를 희망하며 우리는 앱 피드를 새로고침합니다. 흥하든 망하든 슬롯 머신을 하는 것 처럼.

염두에 두는 디자인

정보 보상은 더 많은 컨텐츠가 즉시 제공 가능해지면서 우리의 일상에 평범한 것이 되었습니다. 정보 보상을 설계할 때, 모든 사용자에게 모든 타입의 컨텐츠가 중요하지는 않다는 것을 기억하는게 중요합니다.

인스타그램에서 "You're All Caught Up"는 사용자가 중복 컨텐츠를 보는 것을 피할 수 있도록 도와주는 스마트한 기능이다. 

인스타그램의 "You're All Caught Up"는 사용자가 중복 컨텐츠를 피할 수 있도록 도와줍니다. 정보 보상이 보다 보편화됨에 따라, 사용자가 중복 컨텐츠를 볼 때 이를 알 수 있도록 기능을 설계하는 것이 중요합니다.

2. 사회적 보상

대부분의 앱에서 사회적 보상을 제공하는 경향이 있기 때문에 사회적 보상은 디지털 제품에서 찾기 가장 쉬운 것 중 하나입니다. 인스타그램의 하트, 미디엄의 박수갈채, 드리블의 뷰는 유명한 앱의 보편적인 사회적 보상의 완벽한 예입니다.

페이스북은 좋아요, 공유하기, 댓글 버튼을 편리하게 포스트 아래에 두었다.


사회적 보상은 허영심, 자기 가치, 그리고 유효성 이 3가지 강력한 감정을 충족시킵니다. 부적절하게 사용하면 사회적 보상은 사용자에게 역효과를 주고 사용자와 당신의 제품에 모두 부정적으로 영향을 줍니다.

'좋아하지 않아요'가 뭘까

2007년, 페이스북 소프트웨어 프로그래머 저스틴 로젠슈타인은 기술팀에게 상징적인 "좋아요 버튼"을 기술팀에게 만들도록 지시했습니다. 가디언지의 이 글 속 로젠슈타인에 따르면 이 기능은 '몹시' 성공적이었습니다. 사람들이 단기간에 늘어난 사회적인 지지를 주고 받으면서 참여가 치솟았습니다.

좋아요 버튼은 오늘날 소셜 미디어 플랫폼의 제일 즉각적으로 알아볼 수 있는 기능 중 하나이다.

요약하면, 좋아요 버튼은 혁명적이었습니다. 이 기능은 사용자들에게 글을 쓰는데 보상을 주고 사람들이 온라인에서 상호작용하는 방식을 바꿨습니다. 로젠슈타인과 다른 사람들이 이제는 사회적 보상이 제공하는 "중독 피드백 루프"를 경고함에 따라 최근 몇년 동안 조사 대상이 되었습니다.

양날의 검

사회적 보상이 강력해지고 사용자들과 아주 깊은 감정적인 단계에 반향을 일으키면서 사회적 보상은 논란거리가 되었습니다. 이것이 더 높은 참여를 낳고, 사용자들이 너무 이것에 의지하면 짜증나거나 상처가 될 수 있습니다. 소셜 미디어가 유아기와 성숙 단계에서 멀어지면, 사회적 보상이 어떻게 진화하는지 알게될 것입니다.

3. 게임화

게임화는 게임이 아닌 앱에서 점수 시스템, 업적, 그리고 게임 같은 기능들을 말합니다. 최근 몇 년 동안 트리하우스, 듀오링고, 코드아카데미 같은 회사들이 그들의 코스에 어느 정도게임화를 사용했습니다.

트리하우스에서 코스를 완료하면 사용자가 받는 업적들

포스퀘어의 스웜, 피트니스 앱 스트라바 같은 소셜 앱들도 그들의 핵심 제품 가치와 본질적으로 연결된 게임화된 경험을 제공합니다. 스웜은 장소를 자주 방문하는 데 뱃지를 주는 반면 스트라바는 이전 보다 더 빠르게 수행한 것에 대한 "업적"을 보상합니다.

진행 측정

게임화는 완료된 작업과 아직 해결되지 않은 작업을 시각화하여 제품의 지속적인 사용을 유도합니다. 게임화는 사용자가 각 이정표에 도달한 후 성취감을 얻을 때 사용자가 상호작용할수록 제품의 가치가 더 높아지게 합니다.

스트라바는 운동에서 이정표에 도달한 달리기 선수와 자전거 선수들에게 업적을 준다.

항상 작동하지는 않는다

최근 몇년간 게임화라는 유행어가 더 많은 관심을 끌면서 이 용어가 많이 사용되었습니다. 비록 당신의 제품에 추가되는 훌륭한 특징처럼 보일 수 있지만 모든 제품이 게임화될 필요는 없다는 것을 기억하는 것이 중요합니다. 게임화를 제품에 도입하기 위해 서두르기 전에, 제품 핵심 가치와 본질적으로 연결되어 있을 때 제일 잘 작동한다는 것을 기억해야 합니다. 사용자는 자신의 진행 상황을 시각적으로 측정해 만족감을 느껴야 합니다. 만약 제품이 제공된 게임화된 경험과 동떨어져있다면 제품이 공허하고 솔직하지 못한 느낌이 들 수 있습니다.

4. 현금화

현금화는 사용자가 주요 작업을 완료할 때 물리적인 제품이나 현금을 제공합니다. HQ Trivia는 현금화 보상을 사용한 가장 최근의 바이러스성 앱입니다. 이 앱은 사용자들로 하여금 돈이나 다른 물리적 보상을 위해 라이브 게임 쇼에서 경쟁하게끔 장려합니다. 1.5 백만의 사용자들이 한번에 특정 방송에 채널을 맞추고 있고 타임지는 이 앱을 2017년 올해의 앱으로 선정했습니다.

HQ Trivia는 사용자들이 얻은 돈을 볼 수 있는 리더보드도 만들었다.


소셜 미디어 앱들도 프리미엄 컨텐츠를 생산하는 크리에이터를 장려하기 위해 현금성의 보상을 사용합니다. 유튜브는 동영상에 광고를 달면 사용자들에게 돈을 제공하고 미디엄은 작가들이 글을 쓰고 돈을 받을 수 있는 파트너 프로그램을 가지고 있습니다.


미디엄은 파트너 프로그램에 참여하는 것을 독려하기 위해 통계를 제공한다.

투명해져라

HQ Trivia, 유튜브의 지불 방식 모두 최근 몇 년 동안 비판의 대상이었습니다. 일부 사람들은 HQ가 90일 이내에 20달러라는 한계점에 도달했을 때만 지불하도록 허용하는 조항 때문에 "글리치로 가득찬 사기"인지 의문을 제기했습니다.(이 최소 현금 인출 규칙은 2018년 1월에 제거되었습니다.) 그리고, 유튜브가 광고주들을 달래기 위해 2017년 광고 정책을 바꾸었을 때, 크리에이터들은 동영상이 악마화되고 있는 것처럼, 때로는 아무 이유 없이, "Adpocolypse"라고 불렀습니다.

지불이 언제 그리고 어떻게 사용자에게 분배되는지 명확하게 하는 것은 불만을 예방하기위해 필수적입니다. 금전적 보상은 (문제 없이 주어질 때) 파워 유저들을 이용하고 제품의 지속 사용을 장려하는 좋은 방법입니다.

결론

디지털 제품은 당신이 좋아하는 앱에서 많은 전달 방법을 사용하는 것처럼 오직 하나의 보상에 제한되어 있지 않습니다. 책임감 있게 사용하면, 보상은 사용자들에게 당신의 제품에 있는 가치를 보게하고 결과적으로 깊은 수준의 참여를 추가하는 아주 좋은 방법입니다.

이 글은 The Hidden Power of Reward Systems In Design를 파파고의 도움을 얻어 번역한 글입니다.

Saturday, 8 December 2018

[번역] Bash 명령어 가이드

Bash는 상호적인 라인 인터프리터 또는 쉘입니다. 저는 간단한 쉘 명령어 사용법과 그것들이 무엇인지 공유하려고 합니다. 저는 시간 절약을 위한 목적으로 이 목록을 작성했습니다. 왜냐하면, GUI 없이는 모든 트랜잭션은 마우스 사용없이 빠르게 움직이기 때문입니다. 이 글은 제 다음 글 iOS 개발자를 위한 Bash 스크립트 가이드를 위한 가이드입니다.

ls

현재 작업 중인 디렉토리의 폴더와 파일 이름을 나열합니다.

$ ls -a # 숨겨진 파일을 포함한 모든 파일을 나열합니다.
$ ls -A # 숨겨진 파일을 포함하고 최상위 디렉토리를 제외한 모든 파일을 나열합니다.
$ ls -F # 항목에 인디케이터(*/=>@| 중 하나)를 추가합니다.
$ ls -S # 파일 크기에 따라 정렬합니다.
$ ls -al # 같은 디렉토리에 있는 모든 파일의 목록을 제공합니다.
$ ls -l # 긴 형태를 사용합니다.
$ ls -nl # 사용자 ID가 포함된 긴 형태를 사용합니다.
$ ls -c # ctime(마지막 변경 시간)으로 정렬합니다.
view raw ls.sh hosted with ❤ by GitHub

man

시스템 참고 메뉴얼을 보기 위해 사용되는 인터페이스입니다.

$ man ls # 명령을 실행하는데 사용할 수 있는 모든 옵션을 보여줍니다.
$ man -V --version # 버전 정보를 표시합니다.
$ man -c # ~/.manpath 파일의 기본 설정이 아닌 설정 파일을 사용합니다.
$ man -d # 디버깅 정보를 표시합니다.
view raw man.sh hosted with ❤ by GitHub

env

현재 사용자의 환경 변수 목록을 반환합니다.

$ env
view raw env.sh hosted with ❤ by GitHub

chmod

파일이나 디렉토리의 권한을 변경합니다.

$ chmod 777 # 모든 사용자가 읽고, 쓰고, 실행할 수 있습니다. 예) chmod 777 my_file
$ chmod 755 # 다른 사용자가 읽고 실행할 수 있지만 변경은 주 사용자만 가능합니다.
$ chmod 777 # 주 사용자만이 읽고, 쓰고, 실행할 수 있습니다.
view raw chmod.sh hosted with ❤ by GitHub

chwon

파일과 디렉토리의 소유권을 변경합니다.

$ chown --help && chown --version
view raw chown.sh hosted with ❤ by GitHub

PATH

콜론으로 구분된 디렉토리 목록을 저장합니다.

$ echo $PATH
view raw path.sh hosted with ❤ by GitHub

grep

파일에서 패턴과 매칭되는 라인을 찾고 결과를 반환합니다.

$ grep "keyword" file.tx # 하나의 파일에서 주어진 문자열로 찾습니다.
$ grep -i "keyword" file.tx # 대소문자 구별없이 찾습니다.
$ grep -R "keyword" file.tx # 디렉토리의 모든 파일을 찾고 찾은 결과를 포함한 라인과 파일 이름을 결과로 반환합니다.
view raw grep.sh hosted with ❤ by GitHub

awk

특정 라인을 추출합니다.

$ awk {keyword} file.tx
view raw awk.sh hosted with ❤ by GitHub

open

파인더에서 현재 폴더를 엽니다.

$ open .
view raw open.sh hosted with ❤ by GitHub

chgrp

파일과 디렉토리의 그룹을 변경합니다.

$ chgrp groupname file.txt
view raw chgrp.sh hosted with ❤ by GitHub

pwd

작업 중인 디렉토리 이름을 출력합니다.

$ pwd
view raw pwd.sh hosted with ❤ by GitHub

cd

현재 작업 중인 디렉토리를 변경합니다.

$ cd / # 루트 디렉토리로 이동합니다.
$ cd .. # 부모 디렉토리로 이동합니다.
$ cd # 파라미터 없이 사용하는 경우에 사용자 홈 디렉토리로 이동합니다.
$ cd ~root # '~' 뒤에 사용자 이름이 주어지면 그 사용자의 홈 디렉토리로 이동합니다.
view raw cd.sh hosted with ❤ by GitHub

HOME

홈 디렉토리 경로를 보여줍니다.

$ echo $HOME
view raw home.sh hosted with ❤ by GitHub

nano

키보드 입력만 받는 커맨드 라인 에디터입니다.

$ nano myscript.sh
view raw nano.sh hosted with ❤ by GitHub

find

파일과 디렉토리를 검색합니다.

$ find directory -name filename # 이름으로 파일을 찾습니다.
$ find directory -cnewer file # 파라미터로 준 파일 보다 더 최근에 수정된 파일들을 검색합니다.
$ find directory -amin n # n분 전 마지막 접근한 파일을 찾습니다.
$ find directory -cmin n # n분 전 마지막 변경된 파일을 찾습니다.
$ find directory -atime n # n일 전 마지막 접근한 파일을 찾습니다.
$ find directory -mtime n # n일 전 마지막 변경된 파일을 찾습니다.
$ find directory -ctime n # n일 전 마지막 변경된 파일을 찾습니다.
$ find directory -print # 찾은 파일의 경로를 표시합니다.
$ find directory -exec # 검색 결과에 따라 명령어를 실행합니다.
# mtime vs atime vs ctime : https://www.quora.com/What-is-the-difference-between-mtime-atime-and-ctime
view raw find.sh hosted with ❤ by GitHub

mkdir

명령어로 디렉토리를 생성합니다.

$ mkdir folder # folder라는 이름을 가진 디렉토리를 생성합니다.
view raw mkdir.sh hosted with ❤ by GitHub

mv

파일이나 디렉토리를 이동시킵니다.

$ mv -i source # 이미 존재하는 파일을 덮어쓰기 전에 안내를 해줍니다.
$ mv -f source # 안내 없이 이미 존재하는 파일은 덮어씁니다.
$ mv -n source # 이미 존재하는 파일은 절대 덮어쓰지 않습니다.
$ mv -v source # 옮기기 전 경로와 옮긴 후 경로를 출력합니다.
view raw mv.sh hosted with ❤ by GitHub

rm

파일이나 디렉토리를 삭제합니다.

$ rm -f file # 삭제하는데 묻지 않습니다. 또한 존재하지 않는 파일에 대한 정보도 제공하지 않습니다.
$ rm -i file # 파일을 삭제하기 전에 안내합니다.
$ rm -r directory # 디렉토리와 하위 디렉토리의 모든 내용물을 삭제합니다.
$ rm -v file # 삭제 과정에 대한 정보를 제공합니다.
view raw rm.sh hosted with ❤ by GitHub

rmdir

디렉토리를 삭제합니다. 폴더가 비어 있을 경우에만 작동합니다.

$ rmdir -p directoryname
view raw rmdir.sh hosted with ❤ by GitHub

touch

파일 내용에 아무런 변화 없이 파일을 생성하거나 엽니다.

$ touch -a file # 접근 시간을 업데이트합니다.
$ touch -c file # 파일이 존재하지 않으면 생성합니다.
$ touch -m file # 변경 시간을 업데이트합니다.
$ touch -t file # 주어진 시간대로 접근 시간을 변경합니다.
view raw touch.sh hosted with ❤ by GitHub

cat

파일의 내용물을 보여줍니다.

$ cat -n file # 화면에 주어진 숫자의 라인만큼 파일 내용물을 보여줍니다.
view raw cat.sh hosted with ❤ by GitHub

wc

파일의 개행, 단어, 바이트 수를 출력합니다. 파일이 여러개일 경우 합쳐서 출력합니다.

$ wc -l file # 행의 수를 반환합니다.
$ wc -m file # 문자 수를 반환합니다.
$ wc -w file # 단어 수를 반환합니다.
view raw wc.sh hosted with ❤ by GitHub

head

파일의 첫부분을 출력합니다.

$ head file # 첫 몇 줄을 보여줍니다.
view raw head.sh hosted with ❤ by GitHub

tail

파일의 뒷부분을 출력합니다.

$ tail file # 마지막 몇 줄을 보여줍니다.
view raw tail.sh hosted with ❤ by GitHub

more

화면 단위로 파일의 내용물을 출력합니다.

$ more file
view raw more.sh hosted with ❤ by GitHub

less

위아래 방향 뿐 아니라 아래위 방향 이동도 지원합니다.

$ less file
view raw less.sh hosted with ❤ by GitHub

nl

라인마다 번호를 추가해서 보여줍니다.

$ nl file
view raw nl.sh hosted with ❤ by GitHub


끝입니다. 읽어주셔서 감사합니다. 당신의 생산성을 높이는데 도움이 되었으면 좋겠습니다.

이 글은 Bash Commands Guide를 번역했습니다.

Friday, 7 December 2018

[번역] 어떻게 마이크로 서비스가 인터넷을 구했을까?

도입


오늘날 분산 시스템이 얼마나 영향력 있는지, 적어도 대학 수준에서는 가장 간과되는 주제 중 하나로 남아있습니다. 컨테이너화(containerization)와 폴트 톨러런스(falut tolerance)와 같은 개념을 이해하는 학생들은 많지 않고 시스템 프로젝트가 해커톤에서 이기는 것을 볼 수 없을 겁니다. 그럼에도 불구하고, 저는 적어도 오늘날의 대규모 시스테이 어떻게 작동하는지 간단하게 이해하는 것이 매우 중요하다고 생각합니다.

이 이야기는 1~2년 동안 일반적인 컴퓨터 과학 교육을 받은 사람이나 웹 개발을 넓게 독학한 사람과 같이 초보자를 대상으로 하는 시리즈 중 첫번째 글입니다. 처음 몇 개의 글은 주요 개념에 대한 높은 수준의 소개와 기술적 세부 사항에 대한 몇 가지 심층적인 설명을 할 것입니다. 나중에 네트워킹, 쿠버네티스나 쿨한 것들에 관한 주제를 탐험해보고 싶습니다. 이번 첫번째 글은 매우 간단하고 마이크로 서비스 이면의 기본 개념과 동기부여를 설명하는 것을 목표로 합니다.

분산 시스템이 인터넷을 돌아가게 한다.

옛날 옛적에, 애플리케이션은 모놀리식하게 만들어졌습니다. 애플리케이션은 웹 서버 자체와 어떤 종류의 데이터 스토리지 시스템으로 구성되었을 가능성이 높고, 하나 또는 두 개의 바이너리에 구축되어 패키지되었습니다. 이 바이너리는 서버 랙에 업로드 되어 기계 위에서 직접 실행되었습니다. 이것이 80년대와 90년대 인터넷에는 괜찮았지만 오늘날 구글은 35억 개의 검색 쿼리를 매일 받고 있고, 아무리 큰 서버라할지라도 그것을 다 처리하기는 어렵습니다.

예전에는 엔지니어가 더 나은 서버, 더 나은 케이블 등을 구입함으로써 수직적으로 확장했습니다. 인터넷의 성장과 무어의 법칙의 종식과 함께, 기존 확장 방식이 빠르게 지속할 수 없게 되었고 수평적 확장의 필요성은 고통스러울 정도로 분명했습니다. 더 좋고, 더 비싼 하드웨어를 사는 대신에, 단순히 싼 서버를 아주 많이 구입하고 모든 서버에 부하를 분산시키는 것입니다.

최초의 수평적 확장은 웹 서버를 중복 실행하는 것이었습니다. 그러나 최근 클라우드 발전과 함께 마이크로 서비스 아키텍처가 빠르게 도입되기 시작했습니다. 이 아이디어는 거대한 애플리케이션을 서비스라고 불리는 개별 컴포넌트로 나누어 각자 전문화된 작업을 수행하는 것입니다. 그러므로 개발자들은 처음부터 끝까지 요청을 처리하는 대신에, 사용자 인증기, 페이지 서버, api 서버, 데이터베이스 모델 서비스 같은 서비스들로 애플리케이션을 분리합니다.


모놀리식 애플리케이션 쪼개기 (출처)

각 마이크로 서비스는 하나 이상의 레플리카로 구성됩니다. Django에서 실행되는 백엔드를 가진 웹사이트의 경우, Django 서버의 복사본 수를 늘리으로써 수평적으로 확장할 수 있습니다. 이 복사본들이 레플리카입니다. 데이터베이스를 사용하는 경우, 데이터베이스의 복사본인 샤드(shard)라는 레플리카의 수를 늘리는 것으로 확장할 수 있습니다. 샤드를 개별로 실행하고 전체 데이터의 일부를 저장할 수 있는 전체 데이터 베이스를 생각해보시기 바랍니다. 샤드의 수를 늘림으로써 데이터베이스를 수평으로 확장할 수 있습니다. 이 복제품들은 다른 기계에서 실행 될 수 있습니다. 그래서 만약 100대의 컴퓨터에서 거대한 웹 서버를 실행하길 원한다면, 100개의 레플리카를 만들어 각각의 컴퓨터에서 실행할 수 있습니다.

집단 스타일 마이크로 서비스 아키텍쳐 (출처)
마이크로 서비스 아키텍쳐 패턴에 대한 더 많은 정보를 원한다면 Arun Gupta 블로그를 방문해보세요. 그는 AWS의 주요 기술자입니다.

장점

아래 항목들은 마이크로 서비스를 사용하는 가장 큰 장점을 나열한 것 입니다. 더 많은 장점이 있지만 이 4가지가 가장 중요합니다.
  • 마이크로 서비스 프레임워크의 가장 크고 부인할 수 없는 장점은 어떤 컴포넌트라도 수평으로 확장할 수 있다는 것입니다. 하나의 서비스(예:신경망)가 과부하 상태라면, 간단하게 특정 서비스의 더 많은 레플리카를 실행하면 됩니다.
  • 서비스들이 독립적입니다. 각 컴포넌트는 별도의 저장소로 저장할 수 있고 전담 엔지니어 팀에 의해 관리됩니다. 컴포넌트는 용도에 가장 적합한 언어로 작성되므로 데티어베이스 서비스는 C로 작성되고 웹 서버는 Python으로 작성될 수 있습니다. 이러한 서비스는 업데이트될 수 있고 파이프라인의 나머지 부분에 영향을 미치지 않고 새로운 컴포넌트가 만들어질 수 있습니다.
  • 이 아키텍처는 플러거블합니다. 서비스의 독립성을 기반으로 하지만 완전히 새로한 단계로 나아갑니다. 회사는 모든 서비스를 쓸 필요도 없습니다. MySQL, Elasticsearch, Redis와 같은 타사 애플리케이션은 모두 시스템에 쉽게 통합될 수 있는 마이크로서비스입니다.
  • 폴트 톨러런스. 이 장점은 시스템이 제대로 설계되지 않은 경우에만 존재합니다. 하나의 서비스 레플리카가 실패해도 전체 파이프라인 또는 해당 서비스에 오류가 발생해서는 안 됩니다. 마찬가지로 특정 서비스의 버그는 다른 비 관련 서비스의 가동 시간에 영향을 미치지 않습니다. 이것이 항상 쉬운 것은 아니며, 폴트 톨러런스는 산업과 연구 모두에서, 특히 분산 데이터베이스나 네트워크와 같은 주제에 대해 야기되는 문제입니다.
그리고 물론 모든 것과 마찬가지로 약간의 단점도 있습니다. 한 서비스에서 다른 서비스로 요청을 보내는 것이 오버헤드가 있고 복잡합니다. 분산 시스템은 종종 의존성, 레플리케이션, 공유 운명 문제를 가질 수 있습니다. 구축과 디버깅의 어려움은 마이크로 서비스의 수와 복잡성에 따라 기하급수적으로 증가합니다.

좋은 소식은 수많은 연구원, 기업, 그리고 스타트업이 이 문제의 모든 측면을 연구합니다. Jenkins, Spinnaker, Jegertraacing과 같은 프로젝트는 산업과 학계에서 매일 새로운 혁신이 이루어지고 있는 오늘날 가장 인기 있는 오픈 소스 솔루션 중 하나입니다.

그래서 분산 시스템은 여전히 상대적으로 새로운 반면 그 영향은 매일 지속적으로 느껴질 수 있습니다. 제 말은, 이 글을 당신이 어떻게 읽고 있는지 생각해보시기 바랍니다.

이 글은 How Microservices Saved the Internet파파고의 도움을 얻어 번역한 글입니다.