이더리움 심고 이자 농사 시작

지난 세 네 달 동안 디파이를 경험하면서 ‘이더리움이 디파이의 근본이구나’라는 생각을 했어요. 아직은 네트워크 속도도 느리고 수수료도 비싸지만 차차 나아지리라 생각하고 장기간 보유하기로 마음을 먹었습니다.

그래도 디파이를 경험해 본 사람으로써 이더리움을 그냥 들고만 있을 순 없죠. ㅎㅎ 요즘 이더리움 수수료가 무척 비싼데 나름 수수료가 저렴해진 틈을 타서 이자 농사를 시도해봤습니다.

1 단계. LIDO에 이더리움 예치하고 5% 이자 받기

LIDO 파이낸스에 이더리움을 예치하면 연이율 5.0%를 줍니다.

2 단계. Anchor에 stETH를 담보로 맡기고 UST 대출 받아 11% 이자 받기

LIDO 파이낸스에 이더리움을 예치하면 영수증에 해당하는 stETH를 받습니다. stETH는 ETH와 1:1로 대응하는 것으로 나중에 LIDO로 돌아와서 stETH를 제출하면 그에 해당하는 ETH를 되돌려 받는 개념입니다. 제가 이 stETH를 누군가에게 주면 그 사람이 stETH를 ETH로 바꿀 수 있겠죠.

LIDO 에서 stETH를 bETH로 바꿀 수 있습니다. bETH는 테라 네트워크에서 사용할 수 있는 ETH입니다. 바이낸스의 BETH와 다른 것이니 혼동하지 않도록 주의해주세요. bETH도 stETH와 마찬가지로 1 ETH의 가치를 갖습니다. stETH를 bETH로 바꾸었으므로 1단계에서 받을 수 있었던 5%이자는 더이상 나오지 않습니다.

앵커 프로토콜에서는 이 bETH를 담보로 테라의 스테이블 코인인 UST를 대출해줍니다. UST는 가격이 1달러에 수렴하도록 만들어진 코인입니다. ‘거의’ 달러랑 같다고 보시면 됩니다.

권장 LTV인 45%를 대출 받았습니다. 우측 상단에 큰 녹색 글씨로 적힌게 연이율 입니다. 이 글을 쓰는 시점엔 11.73% 이군요. 전엔 좀 더 높았던 거 같은데 많이 떨어졌네요. 여튼 기존 금융에선 비상식적인 일이지만 디파이에선 대출을 받고 오히려 이자를 받을 수도 있습니다.

3 단계. 페이스북, 테슬라 주식 가격이 반영된 합성자산 구입하고 25% 이상 이자 받기

대출받은 UST를 가장 안전하게 굴리는 방법은 앵커에 예치하고 20% 이자를 받는 것입니다. 하지만 저는 예전부터 사고 싶었던 테슬라와 페이스북을 사기로 했어요.

테라의 또 다른 디파이 서비스인 미러 프로토콜에 가면 주식, ETF, 암호화폐 등 현물 자산을 미러링한 합성자산을 살 수 있습니다. 가격은 현물 가격에 수렴하도록 만들어져있지만 실제로는 현물과 직접적인 관계는 1도 없긴해요.

대출 받은 UST의 1/4씩 mTSLA(테슬라 미러) 와 mFB(페이스북 미러)를 샀습니다. 1/4씩 산 이유는 각 합성자산을 UST와 쌍으로 묶어서 제공하면 이자를 받을 수 있거든요.(일반적으로 유동성 제공이라는 표현을 씁니다.)

테슬라는 28.97%, 페이스북은 27.63%를 주네요.

4 단계. 자동 재예치 설정

기존 금융과 달리 디파이에서는 이자를 매우 빨리 지급합니다. 실시간으로 지급해주는 곳도 있고 몇 시간에 한 번씩 주는 곳도 있고 서비스 마다 다르긴 합니다. 그동안 이 글에서 언급한 연이율은 자산을 예치해두고 아무것도 안하고 놔두었을시 1년간 받게 되는 이자를 말하며 APR이라고 표현합니다. 이자를 재예치하면 복리의 마술 덕에 수익률이 올라가는데요. 재예치를 반영한 연간 이자율을 APY라고 합니다.

계산기를 돌려보면 28.97% APR을 매일 한 번씩 재예치하면 연이율이 33.59%가 되네요. 수익률이 15%이상 높아지는 건데 안할 수가 없죠.

이자를 재예치하는게 어렵진 않지만 매일 하긴 귀찮습니다. 그래서 이를 대신 해주는 서비스가 또 있습니다. ㅎㅎ 테라 네트워크에는 아폴로다오스펙트럼 프로토콜이 자동 재예치 서비스를 해주는데요. 이자는 스펙트럼이 두 배 더 주지만 왠지 아폴로다오가 더 땡겨서 아폴로다오를 쓰기로 했습니다.

직접 재예치 할 때에 비해 수익률은 좀 떨어지지만 매일 귀찮게 수고하지 않아도 되니까 만족입니다. ㅎㅎ

정리

어차피 장기 보유할 이더리움. 이왕이면 그냥 썩혀두는 대신 이자를 받기로 해봤습니다. 이를 통해 기대되는 이익을 대략 정리해보자면

  1. Anchor 에서 원금의 4.95% (원금의 45%의 11%)
  2. ApolloDAO에서 원금의 12.6% (원금의 45%의 28%)

총 17.55% 의 이자를 기대할 수 있겠네요.

여기에 이더리움, 테슬라, 페북 가격이 오르면 시세 차익까지! (나면 좋겠다!! 떨어질 수도 있음.)

이 글은 개인적인 경험을 공유한 글일 뿐 금융 조언을 드리거나 투기를 권유하는 것이 아닙니다. 자신의 자산을 활용하기에 앞서 항상 직접 조사 하고 감당할 수 있는 만큼만 하세요.

unknown error: session deleted because of page crash

라즈베리파이에서 잘 돌던 크롤러가 갑자기 동작하지 않아서 로그를 보니 unknown error: session deleted because of page crash 가 남아 있었다.

삽질을 좀 했는데 결론적으로 문제의 원인은 공유 메모리 공간(/dev/shm)이 부족한 것이었다. (참고: 크롤링 Selenium Chrome 에러)

ps로 프로세스를 목록을 보니 chromedriver가 엄청 많이 떠 있었다.

pkill chrome 으로 프로세스를 모두 죽이니 정상 동작했다.

chromedriver가 많이 떠 있었던 원인은 selenium webdriver를 닫을 때 quit()으로 닫지 않고 close()로 닫았기 때문이었다. (참고: [python] selenium close와 quit 차이점)

라라벨 인증 시험 통과했어요

지난 주말에 시험을 쳤는데 결과가 빨리 나왔네요.

아리송한 문제들이 많아서 재수하겠다 싶었는데, 한 번에 통과해서 다행이에요. ㅎㅎ

+ 후기를 보고 싶단 코멘트가 있어서 추가로 남겨봅니다.

결제

결제는 작년 11월 말에 했어요. 2020년 내에 응시하자는 마음으로 미리 결제했어요. 결제하고 바로 보는건 아니고 3달 이내에 응시하면 되거든요. 돈을 내 놓으면 돈 아까워서라도 봐야하니까 ㅎㅎ 비용은 163.9 유로였습니다.

결제하고나면 로그인 할 수 있는 계정을 안내받는데, 요 메일이 바로바로 오지 않아서 조금 답답했습니다.

결제를 했는데 메일이 안오다니! 바쁘다바빠 현대인에게 있을 수 없는 일!! 못 참고 막 이메일 보내벌임. ㅎㅎ

몇시간 지났나 하루가 지났나 기억이 잘 안나는데 암튼 메일이 오긴 왔습니다. 독촉해서 보내준건 아닌거 같고 걍 느긋하게 처리하는거 같아요.

준비

당시에 처음부터 제대로 배우는 라라벨 원고를 퇴고하고 있었기 때문에 따로 준비는 하지 않았습니다. 어차피 공부하는거 자격증까지 딸 수 있으면 좋겠단 생각이었어요. 떨어지면 쪽팔리니까 몰래보고 떨어지면 없었던 일로 하려고 했죠. ㅎㅎㅎ

원래 계획과 달리 번역서 출시 후 바로 시험을 치루진 못했어요. 어영부영 두 달이 지나버려서 시험 치를 기회를 노리고 있었는데, 지난 주말에 아이들이 처가에 가서 자고 오는 덕에 시험을 치렀습니다. 책 읽은 기억도 흐려지고 준비도 따로 안해서 자신은 없었는데 떨어지면 나만 알면 되니까 ㅋ

시험

시험에 대해서는 자세한 내용은 말하지 못하게 되어있어요.(아마? 시험 전에 안내가 나왔는데 대충 읽어서 ㅎㅎ) 그러니 간단히 소감 정도만 쓰겠습니다.

시험은 저한테는 좀 어려웠어요. 알쏭달쏭한 문제가 많았습니다. 평소에 잘 알던 부분도 ‘그래서 정확히 이거야? 저거야?’ 요런식으로 물으니 쫄리더라고요 ㅋ 게다가 틀리면 더 감점이 되는 구조라, 모르면 차라리 답 안하고 넘어가는게 낫거든요. 참 모든 문제는 4지선다형 입니다.

문제는 45문제 시험 시간은 1시간 입니다.(50분이었나? 가물가물) 문제 내는 알고리즘은 좀 별론지 같은 문제가 중복으로 나오기도 했습니다. 같은 문제가 지문만 살짝 다르게 나온 경우도 있어서 주의해야 합니다.

시험 볼 때는 부정 행위를 방지하기 위해서 제 모습과 화면을 녹화해갑니다. 밝은 방에 혼자 있어야하고, 시험보는 브라우저 외에 다른 브라우저나 탭을 띄우면 안되요. 책이나 기타 자료를 참고하는 것도 안됩니다.

결과

결과 통보는 일주일 정도 걸린다고 본 것 같은데, 의외로 하루 만에 오더군요.

결과는 붙었다고만 나오고 몇개 맞았는지, 뭘 틀렸고 답이 뭔지는 안 알려줍니다. 혹시 다 통과 시켜주는 건 아닌가하는 의심이…

별로 쓸 얘기 없을 거 같았는데 막상 쓰다보니 길어졌네요. 🙂

라라벨 라우트 그룹 사용시 유의사항

라라벨 코리아 페이스북 그룹에 질문이 하나 올라왔습니다.

https://www.facebook.com/groups/laravelkorea/permalink/1862353923927678

처음부터 제대로 배우는 라라벨의 예제 코드 처럼 라우트 그룹을 작성하면 에러가 나는데, 책에 나온 코드 처럼 사용하는 방법은 없느냐 하는 것 입니다.

질문해주신 분이 언급한 예제는 79 페이지의 예제 3-10 이며 내용은 아래와 같습니다.

Route::group(function () {
    Route::get('hello', function () {
        return 'Hello';
    });
    Route::get('world', function () {
        return 'World';
    });
});

위의 코드를 실행하면 질문자분께서 말씀하신 것 처럼 에러가 납니다.

“Illuminate\Routing\Router::group(): Argument #1 ($attributes) must be of type array, Closure given, called in …”

group() 메서드의 첫번째 인자로 배열이 들어와야하는데 클로저가 들어왔다는 내용입니다.

결론부터 말씀드리면 책의 예제 코드가 잘못된 게 맞습니다. ㅠ

Illuminate\Routing\Router::group() 메서드의 시그너처가 아래와 같기 때문에 첫번째 인자로 반드시 배열을 넘겨줘야 합니다.

public function group(array $attributes, $routes)

따라서 예제 코드는 아래와 같이 바뀌어야 정상 동작합니다.

Route::group([], function () {
    Route::get('hello', function () {
        return 'Hello';
    });
    Route::get('world', function () {
        return 'World';
    });
});

클로저만 넘기는 경우도 있던데요?

Route::middleware(['throttle:uploads'])->group(function () {
    Route::post('/photos', function() {
        //
    });
});

위 코드는 81 페이지의 예제 3-12 입니다.

group() 메서드에 클로저 하나만 넘겨주고 있습니다. 어떻게 된거죠?

group(), 동명이인

이유는 Route::group() 과 Route::middleware()->group() 에 쓰인 group()이 서로 다른 클래스의 메서드이기 때문입니다.

Route::middleware()는 Illuminate\Routing\Router가 아닌 Illuminate\Routing\RouteRegistrar를 반환합니다. 따라서 middleware() 메서드에 체이닝된 group() 메서드는 Illuminate\Routing\Router의 group() 메서드가 아닌 Illuminate\Routing\RouteRegistrar의 group() 메서드인 것이죠.

public function group($callback)

Illuminate\Routing\RouteRegistrar의 group() 메서드 시그너처가 위와 같기 때문에 클로저만 넘겨주면 됩니다.

권장사항

위의 내용을 종합해보면 라우트 그룹을 사용하는 방법이 두 가지인 셈입니다.

  1. Route 퍼사드에서 group() 메서드를 바로 호출하는 방법
  2. Route 퍼사드에서 middleware(), domain(), prefix(), name() 등의 메서드에 체이닝하여 group() 메서드를 호출하는 방법

저는 2번 방식을 권장합니다. 첫째, 1번은 메뉴얼에 안내되지 않는 사용법입니다. 둘째, 그룹을 묶는다는 것은 언제나 목적이 있을 것입니다. 따라서 위에 수정된 예제 3-10의 코드 처럼 빈 배열을 이용해서 그룹을 만드는 건 의미가 없습니다. 그룹을 묶는 목적에 따른 메서드를 모두 제공하고 있으니, 각 메서드를 활용해서 그룹을 만드는게 보기에도, 관리하기에도 더 나을 겁니다.

처음부터 제대로 배우는 라라벨을 번역 출간했습니다

2020년 12월 초에 출간됐는데 블로그에 이제껏 출간 소식 조차 공유를 안했었네요. ㄷㄷ

이제 얼추 한 달이 다 되어 가는데, 걱정했던 것보다는 좋은 평이 남고 있어서 다행스러워요.

혼자 뚝딱뚝딱 전자책을 만들 때는 몰랐는데, 출판사와 일해보니 책을 책 답게 만들기 위해 정말 많은 분들의 노력이 들어가더군요. 초고는 원료 수준이랄까요?

원래는 출간하고나서 스터디파이를 통해 스터디를 운영할까 했는데, 이제 더이상 스터디파이에서는 스터디를 운영하지 않는듯 하더군요. 좀 아쉽긴한데 뭔갈 또 준비하고 계시다고 하니 기대해봐야죠.

여튼 1년간 끙끙대던 일이 끝나서 후련하네요. 🙂

팩트풀니스

사내 독서 동아리 활동으로 읽은 첫 번째 책이다.

이 책에 왜 흥미가 생겼었는지는 기억이 잘 나지 않는다. SNS에서 지인이 추천을 했었고 오랜만에 인문 서적을 읽고 싶었다. 세상 사는데 도움이 1도 안되는 그런 책을 읽고 싶었는데, 결과는 그 반대였다. 위로를 받기도 하고 세상을 대하는 더 나은 방법을 얻기도 했다.

저자는 우리가 다양한 이유로 세상을 오해하고 있다고 한다. 책 서두에 간단한 퀴즈를 내는데, 나 역시 세상을 제대로 이해하지 못하고 있었다. 저자는 세상은 생각보다 더 나아지고 있는데 우리가 가진 세상에 대한 지식은 오래되어 업데이트가 필요하다고 한다.

책에는 미처 몰랐던 놀라운 사실들이 많이 담겨있다. 당연하다고 여겼던 것들을 보기좋게 부정당할 때마다 독서의 즐거움을 느낀다.

이 책은 대부분의 장을 저자의 경험담으로 시작한다. 주로 실수담이다. 덕분에 자칫 딱딱해질 수 있었던 책이 푸근해진 느낌이다. 수십년간의 경험이 한 권의 책에 한 가지 주제로 녹아들 수 있다니. 정말 멋있고 부러운 삶이다.

앞으로 1일 1식 라라벨은 xLY를 통해 발행합니다

1일 1식 라라벨의 지난 글을 보고 싶어하시는 신규 구독자분들이 계셔서 과거의 글들도 읽을 수 있도록 웹사이트를 하나 열었습니다.

웹사이트 이름은 xLY 입니다. 엑슬리라고 읽으시면 됩니다. URL은 https://xly.kr 입니다.

현재는 1일 1식 라라벨 전용 웹사이트이지만 장차 주기성있는(daiLY, weekLY, monthLY 등등) 유료 컨텐트 발행 플랫폼으로 확장할 포부를 가지고 있습니다.

간간히 이 블로그에 전체 공개로 발행하던 1일 1식 라라벨 컨텐트는 앞으로 xLY에서 읽으실 수 있습니다. 기존에는 무료 구독 옵션은 없었는데, xLY에서 무료 구독을 하시면 전체 공개 컨텐트를 메일로 보내드립니다. 많은 구독 부탁드려요~

[1일 1식 라라벨 47호] 라라벨 6.0 릴리즈!

1일 1식 라라벨 2019년 9월 구독자를 모집 중입니다. 여기에서 신청하실 수 있습니다.

라라벨 6.0이 릴리즈되었습니다! 이번 버전은 LTS 입니다. 직전 LTS는 5.5 였습니다. 버그 수정은 2021년 9월 3일까지, 보안 수정은 2022년 9월 3일까지 지원합니다.

시맨틱 버저닝

이번 버전에 들어서면서 가장 큰 변화라고 할 수 있는 건 역시 시맨틱 버저닝을 채택한 것이라고 할 수 있습니다. 이전까지 라라벨은 독자적인 버전 체계를 가지고 있었습니다. (참고, 라라벨은 시맨틱 버저닝을 사용하지 않는다 – 이현석의 우체통) 버전 넘버 x.y.z 중 x를 패러다임 변화, y를 메이저(하위호환성이 지켜지지 않을 수 있음), z를 마이너 변화로 관리해왔는데요, 6.0 버전부터는 x-메이저, y-마이너, z-버그패치가 됩니다. 전과달리 y까지는 하위호환성이 유지되니 안심하고 업데이트하시면 됩니다.

라라벨 Vapor 호환

6.0 Vapor와 호환이 됩니다. 오늘 모던 PHP 유저 그룹에서 Vapor 관련 발표를 하기로 되어있었어요. 6.0으로 업데이트해야 Vapor를 쓸 수 있는 줄 알고 부랴부랴 업데이트를 했는데, 해보니 5 버전에서도 사용 가능하더군요.

Ignition

어제 소개해드렸던 에러/예외 페이지 패키지 Ignition이 내장되어있습니다. composer.json 파일을 보면 이전 에러 페이지 패키지인 Whoops가 제거된걸 볼 수 있는데, 완전히 대체된건 아닙니다. Ignition이 Whoops에 의존한다는 것 같네요.

향상된 인가 리스폰스

지금까지는 권한 확인 결과를 확인하고 그 결과에 따라 다른 메시지를 보여주기가 어려웠습니다. 6 버전 부터는 Gate::inspect() 매서드로 쉽게 결과를 확인할 수 있고, 컨트롤러에서 인가 헬퍼 매서드를 써도 결과에 따라 메시지가 다르게 나타난다고 합니다.

잡 미들웨어

HTTP 리퀘스트는 미들웨어가 있었지만, 잡에는 미들웨어가 없었습니다. 특정 시간 동안 너무 많이 실행되는지 검사하는 등의 로직을 미들웨어로 빼서 잡의 handle() 매서드를 더욱 명료하게 유지할 수 있게 되었습니다.

레이지 컬렉션

제너레이터를 이용해서 더 적은 리소스를 사용하는 컬렉션인 레이지 컬렉션이 추가되었습니다. 며칠전 대량의 엘로퀀트 모델을 다루는 방법에서 소개했던 cursor() 매서드가 레이지 컬렉션을 반환하도록 변경되었습니다.

향상된 엘로퀀트 서브쿼리

조나단 리인잉크가 라라콘 US 2019에서 발표했던 내용이 6.0에 정식으로 포함되었습니다. 리인잉크가 관련하여 글을 쓴 것 같더군요. 조만간 공부해서 소개하도록 하겠습니다.

라라벨 UI

라라벨 기본 프론트 엔드 스캐폴드가 laravel/ui 라는 별도 패키지로 분리되었습니다. 이제 라라벨의 기본 스케폴딩은 부트스트랩도 Vue도 적용되지 않는다고 하네요. 패키지를 설치하고 간단한 아티즌 커맨드로 기존 스타일의 UI를 적용할 수 있다고 합니다.

마치며

뭐랄까 새로 추가된 기능들을 통해 더 강력하고 더 깔끔해진 느낌이네요. 앞으로 기회 되는대로 새로 추가된 기능을 하나씩 자세히 소개해보도록 하겠습니다.

1일 1식 라라벨 47호

2019년 9월 4일

1일 1식 라라벨 9월호 구독자 모집!

어쩌다 보니 벌써 8월이 하루 밖에 안남았네요. 늦게나마 9월호 구독자 모집을 시작합니다.

7,8월과 마찬가지로 9월 한 달간 매일 한 편씩 라라벨 관련 글을 메일로 보내드립니다. 주말과 휴일엔 쉽니다.

다행히 아직까지는 한 번도 펑크를 내지 않았어요. 날짜를 넘겨서 보내드린 날은 며칠 됩니다 ㅠ 8월호에는 아래와 같은 글들을 보내드렸습니다.

  • 클래스에 final을 선언해야할 때는 언제인가?
  • 라라벨 5.8.30 새기능
  • 라라벨 서비스 컨테이너 언제, 왜 쓰는가?
  • 라라벨 Vapor 비용 & 성능 최적화
  • 액션으로 리팩토링하기
  • 패키지스트 한국 미러
  • 라라벨 백업 패키지 spatie/laravel-backup
  • PHPUnit 실행 결과를 예쁘게, PHPUnit Pretty Result Printer
  • 라라벨 제너레이터로 프로젝트 시작하기
  • 라라벨 제너레이터 사용기 1
  • TailwindCSS용 온라인 코드 에디터 Tailwind.run()
  • 라라벨 시프트와 테스트 제너레이터 사용기 1편
  • 라라벨 시프트와 테스트 제너레이터 사용기 2편
  • 라라벨로 만든 애플리케이션을 자가진단 해보자
  • 라라벨 웹 팅커
  • 테스트 속도를 향상시키는 비법
  • 엘로퀀트 모델로 대량의 데이터 처리하기 chunk(), cursor(), each()
  • 여러분의 코드 품질은 어떤가요?
  • Policy 자동 적용
  • 파사드는 어떻게 동작하는가?

위와 같은 글들에 관심있으신 분들은 아래 링크로 이동해서 구독 신청해주세요.

지나간 글들을 읽을 수 있도록 준비중입니다. 아마 9월부터는 7~8월 글도 읽으실 수 있을 겁니다.

그럼 많은 구독과 공유 부탁드립니다~

[1일 1식 라라벨] 라라벨 Vapor

이 글은 2019년 7월 29일에 1일 1식 라라벨에 발행된 글입니다. 일부 시점이나 버전 정보가 블로그 발행시점과 다를 수 있습니다.

지난 주 라라콘에서 라라벨이 새로운 서비스를 소개했습니다. 바로 Vapor 입니다. “서버는 우리가 다 알아서 해줄게요, 여러분은 라라벨 애플리케이션에만 신경쓰세요”라고 이야기하는 것 같습니다. 매트 스타우퍼가 라이브 블로깅으로 정리한 라라벨 Vapor 소개(Introducing Laravel Vapor)와 모하메드 새드의 AWS 람다란 무엇이고, 라라벨 Vapor가 이를 어떻게 사용하는가(What is AWS Lambda, and how Laravel Vapor uses it)를 요약해서 소개하겠습니다.

동기

라라벨은 포지(Forge)라는 배포 서비스를 가지고 있습니다. 포지를 사용하면 AWS, DigitalOcean, Linode 같은 클라우드 서버에 애플리케이션을 쉽게 배포할 수 있습니다. 편리한 서비스이지만 사람들이 오토 스케일링 같은건 어떻게 해야하는지 문의했나봅니다. 이에 대해 라라벨팀은 포지에 오토스케일링 기능을 추가하는 대신 새로운 접근 방법을 택했습니다. 바로 서버리스입니다.

서버리스 (Serverless)

서버리스는 말그대로 서버가 없다는 뜻입니다. 하지만 정말로 서버가 없는건 아니죠. 실제로 어딘가에 서버가 존재는 하지만 나는 그 존재를 알 필요가 없다는 것입니다.

라라벨의 index.php 파일을 열어보면 아래 내용을 볼 수 있습니다. (전에 리퀘스트 라이프 사이클에서도 다뤘던 내용이죠! ^^)

$response = $kernel->handle(
  $request = Illuminate\Http\Request::capture()
);

$response->send();

애플리케이션에 리퀘스트를 보내면 Kernel::handle 메소드가 처리하고 브라우저에게 리스폰스를 되돌려줍니다. 그동안은 이를 위해 서버를 마련하고 어떤 요청이 들어오던 index.php를 실행하도록 준비하고 기다리고 있었습니다.

Kernel::hanle 메서드만 똑 떼어내서 어떤 서비스에 올려놓고, 메서드가 실행되는 횟수만큼만 비용을 낸다면 어떨까요? 서버에 배포하거나, 라이브러리를 업그레이드하거나, 저장공간을 관리하는데 전혀 신경안써도 됩니다. 단지 기능을 업로드하고 기능이 동작하는만큼만 돈을 내는 것이죠.

이게 기본적인 서버리스입니다.

AWS 람다(Lambda)

람다는 AWS의 FaaS(Function as a Service)입니다. 람다는 주로 마이크로서비스 아키텍처의 일부로 사용되며, 한 번에 한 가지 일을 처리합니다.

  • 이미지를 S3에 올리면 섬네일을 만든다.
  • 큐에 잡을 전송하면, 람다가 실행되고 잡을 처리한다.
  • HTTP 리퀘스트를 엔드포인트로 전송하면, 람다가 실행되고 응답을 생성한다.

이런 식입니다. 이는 일반적으로 애플리케이션을 애플리케이션을 여러개의 서로 다른 서비스로 쪼개고, 각 서비스는 개별 코드 베이스를 갖는 것을 의미합니다.

마이크로서비스는 장점이 많지만 여러 서비스를 엮는게 어렵습니다.

Vapor는 여러분의 라라벨 애플리케이션을 AWS 람다로 변환합니다. 람다를 실행한 이벤트에 따라 Vapor가 애플리케이션의 특정 기능을 수행해줍니다. 사용자가 엔드포인트를 방문하면 라우터로 보낸 후 응답을 되돌려주고, 잡이 추가되면 워커를 작동시키는 식입니다. 이런식으로 라라벨 애플리케이션 작성 방법은 그대로 유지한채 서버리스의 장점을 취할 수 있습니다. Vapor가 라라벨 애플리케이션을 서버리스로 변환하는데 필요한 모든 일을 해줍니다.

마치며

그냥 단순히 배포와 오토스케일링을 처리해주는 서비스인가?라고 생각했는데 라라벨을 서버리스로 변환해주고 편하게 관리할 수 있게 해주는 서비스였네요. 정말 엄청나네요! AWS 비용이 얼마나 나올지 가늠이 안되긴하는데 저는 서비스가 정식 오픈 하는대로 한 번 써볼까 합니다. Vapor 자체는 프로젝트 수에 상관없이 한달에 39$라서 크게 부담은 안되는 듯 합니다.