詳細検索

네, HTTP/2(OpsWorks Basics)로 넘어가죠

아바타
글쓴이 吉田将之

네, HTTP/2(OpsWorks Basics)로 넘어가죠
日本語에서 번역 • 원문 보기

안녕하세요, 저는 팀 활성화 서비스 'Goalous'의 수석 엔지니어인 요시다입니다.

이 글에서는 Goalous가 HTTP/1.1에서 HTTP/2로 어떻게 마이그레이션했는지, 그리고 실제로 어떻게 마이그레이션했는지 이야기하겠습니다.

왜 우리는 이주했을까?

지난달까지도 우리는 한 달 반 넘게 전체 서비스에 대한 대규모 성능 개선을 진행했습니다.

Goalous는 오랫동안 반응이 좋지 않아 꽤 눈에 띄었고, 많은 사람들이 디스플레이 속도가 느리다고 말했습니다. 개발팀으로서 우리는 사용자 스트레스를 줄이고 서비스의 사용성을 향상시키고 싶었으며, 서비스가 깔끔하게 작동하도록 하고 싶었지만, 기능 추가와 개선이 우선순위였기 때문에 시작하지 못했습니다.

하지만 서비스를 유료로 받기 전에 반드시 대응하고 싶었기에, 올해 5월에 전 팀과 함께 서비스 전체 성능 개선에 힘쓰기로 결정했습니다. HTTP/2로의 전환은 성능 향상을 위한 노력 중 하나입니다. 이번에는 HTTP/2의 장점에 대한 세부 사항은 생략하겠지만, 더 알고 싶으시면 여기를 참고해 주세요.

요청과 응답 다중화의 이점을 누리고 싶었기 때문에 HTTP/2로 전환하기로 결정했고, 또 다른 중요한 이유가 있었습니다. 이것이 AWS 문제입니다.

Goalous는 Chef를 사용해 클라우드 엔터프라이즈에서 애플리케이션을 구성 및 운영하는 구성 관리 서비스인 OpsWorks를 AWS에서 사용합니다.

OpwsWorks에는 두 가지 유형이 있습니다: OpsWorks 스택Chef Automate용 OpsWorks 두 가지이며, Goalous는 OpsWorks 스택을 사용합니다.

OpsWorks 스택은 Chef 버전 11과 12와 명확히 구분됩니다. 저희는 오랫동안 Chef 11 스택을 사용해왔지만, 곧 Chef 12로 업그레이드하고 싶어 이번 HTTP2/마이그레이션이 좋은 기회였습니다.

또한, 부하 분산기가 ELB가 아닌 ALB가 아니면 HTTP/2를 사용할 수 없어서, Chef12+ALB를 완전히 새로 스택 만들기로 했습니다.

우리는 어떻게 이주했을까?

안타깝게도 Goalous의 Chef 레시피는 공개할 수 없으므로, 이 글에서는 Opsworks의 Chef12 스택과 ALB를 HTTP/2 구현으로 구성하는 방법에 초점을 맞추고, 샘플 Chef 레시피를 사용해 미니멀리스트 구성 단계를 설명하겠습니다.

참고: AWS OpsWorks Chef 12 스택에서 애플리케이션 로드 밸런서를 사용하세요

1단계. ALB 창설

기본적으로 공식 AWS 문서에 따라 생성됩니다.

하지만 5단계: 타겟 그룹의 타겟 설정은 건너뛰세요. 타겟 그룹의 인스턴스 생성과 타겟 등록은 OpsWorks에서 수행됩니다.

2단계. OpsWorks 스택 생성

OpsWorks 대시보드 페이지에서 Add Stack 버튼을 클릭하세요.

Add Stack 페이지로 전환한 후 먼저 Chef12 Stack을 선택하세요.

  • 스택 이름
  • 지역
  • VPC
  • 기본 서브넷
  • 기본 운영체제
  • 기본 SSH 키

각 팀이 등장합니다.

다음으로, 빨간 프레임에서 '사용자 지정 셰프 요리책 사용' 중 '예'를 선택하여 위에서 언급한 샘플 셰프 레시피의 Git 저장소를 지정하세요.

입력 후 오른쪽 하단의 Add Stack 버튼을 클릭하여 stack이 추가되었는지 확인하세요.

3단계. ELB API에 권한을 부여하기

기본 IAM 인스턴스 프로필에서 선택한 프로필에 이미 ELB API 관련 권한이 있다면 건너뛸 수 있습니다.

2단계에서 생성한 스택을 선택하세요. 스택의 상세 정보를 볼 수 있으며, 고급 옵션 그룹의 기본 IAM 인스턴스 프로필 빨간 테두리에서 등록된 프로필 링크를 클릭하세요.

역할 세부 정보 페이지에서 역할 정책 생성 버튼을 클릭하세요.

맞춤형 정책을 선택하고 다음 단계로 넘어가세요.

정책 이름을 입력하고 다음 JSON 파일을 붙여넣어 ELB API 권한을 부여하여 정책 집행을 완료하세요.

4단계. 레이어 생성

생성한 스택을 선택한 후 왼쪽 메뉴의 레이어 탭을 클릭하고 레이어 추가(또는 오른쪽 상단의 추가) 버튼을 클릭하세요.

이름과 짧은 이름에 아무 문자열 입력도 완료하세요.

ALB 타겟 그룹을 OpsWorks 스택에 연결

요점: 2017년 8월 기준으로 ALB는 아직 OpsWorks 스택의 부하 분산 설정을 지원하지 못하고 있습니다. 따라서 스택을 ALB에 연결하는 것은 Chef 레시피에서 이루어져야 합니다.

생성된 레이어의 설정 링크를 클릭하세요.

General Settings 탭에는 Custom Json이라는 항목이 있습니다. 이제 Step 1에서 생성된 ALB 타겟 그룹을 OpsWorks 스택과 연관시킵니다.

커스텀 JSON 템플릿은 아래에 나와 있습니다. 이 JSON을 커스텀 존 텍스트 영역에 붙여넣으세요.

다음으로, target_group_arn 값을 Step 1에서 생성된 ALB 타겟 그룹의 ARN 문자열로 대체하세요. 타겟 그룹의 ARN을 확인하려면 EC2 콘솔 왼쪽 메뉴에서 타겟 그룹을 선택한 후 Step 1에서 생성된 타겟 그룹을 선택합니다. 타겟 그룹의 상세 정보가 화면 하단에 표시되며, ARN 필드가 있으니 값 문자열을 위의 커스텀 JSON 안에 복사해 붙여넣어 설정을 저장하세요.

셰프 레시피 설정

레시피 탭으로 가서 다음과 같이 레시피를 라이프사이클 이벤트에 할당하고, 설정을 저장하세요: • Setup:alb_support::install_http_server,alb_support::attach_to_alb ·Shutdown:alb_support::d etach_from_alb,alb_support::uninstall_http_server 레시피 추가하기

*이것은 OpsWorks에서 ALB를 사용해 HTTP/2 요청을 구현하는 예시일 뿐입니다. 사실, Apache나 Nginx 같은 웹 서버 설치는 다른 레시피에 통합되어 있으므로, 이 경우 alb_support::install_http_server,alb_support::uninstall_http_server 필요 없습니다.

EC2 인스턴스 추가 - HTTP/2 요청 검사

OpsWorks의 왼쪽 메뉴에서 인스턴스를 선택한 후 인스턴스를 추가하세요.

추가한 인스턴스를 실행하세요.

성공적으로 시작한 후, Route53에서 ALB와 연관된 도메인에 접근하세요. HTTP/2 요청입니다!

진짜 프로젝트에 어떻게 접목할까

이 글에서는 샘플 레시피를 사용해 Chef12+ALB 스택에서 HTTP/2 요청을 확인했습니다. 하지만 실제 프로젝트에서 이를 사용할 때는,

  • 커뮤니티 요리책이 레시피를 실행할 때 자동으로 가져오지 않기 때문에 Chef12 스택에서 할 일
  • 개발 및 스테이지 환경에서 스택에서 참조할 레시피를 자동으로 생성하는 방법

문제가 많습니다.

이 문제들을 해결하는 방법에 대해 다음 실용판으로 쓸 계획이니, 잠시 기다려 주세요.

Related Articles