더북(TheBook)

12.5.3 매개변수를 이용해서 웹 서버 모듈 재활용하기

같은 방법으로 여러 노드에서 동시에 웹 서버를 운영하려면 어떻게 해야 할까요? 노드마다 코드를 ‘복사/붙여넣기’하는 대신 모듈을 재활용하는 편이 바람직합니다. 한 가지 방법은 매개변수(parameter)를 이용해서 클래스를 정의하는 것입니다. 매개변수는 클래스 사이에 자료를 주고받는 데 사용합니다. 고유한 값을 넘겨 모듈에 정의해 놓은 클래스를 참조하면 함수에 인자를 넣어 호출하는 것처럼 다양한 결과를 얻을 수 있습니다.

모듈 코드에서 공통된 부분을 제외하고 다른 노드에 적용할 때 달라지는 항목을 찾아 매개변수로 바꿉니다. webapp::web 클래스에서는 가상 호스트 이름으로 사용할 호스트 이름과 포트 번호를 다르게 설정해야 노드마다 다양한 가상 호스트 서비스가 가능합니다. 매니페스트를 수정합니다.

administrator@vmgate:~/code/environments/production$ vi modules/webapp/manifests/web.pp

클래스 선언 뒤에 괄호(( ))를 넣어 전달받을 매개변수를 선언하고 초기화합니다. webapp::web 클래스에서는 호스트 이름과 포트 번호에 해당하는 servernameport에 각각 ${::fqdn}80을 할당했습니다. 리소스 속성처럼 여러 매개변수는 쉼표(,)로 구분합니다. servername으로 사용한 ${::fqdn}은 팩트 변수로 시스템의 호스트 이름으로 해석됩니다. port로 쓰인 80번은 웹 서버 기본 포트 번호를 의미합니다. webapp::web 클래스를 참조할 때 servername이나 port를 명시하지 않은 상태로 호출하면 초기화된 값을 적용하지만, 직접 값을 지정해서 호출하면 초기화 정보는 무시하고 지정한 값에 따라 가상 호스트 서비스가 제공될 것입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.