2024년 6월 17일 월요일

Laravel : env , config 알아보기

Laravel : env , config 알아보기

Laravel 프레임워크의 전역 환경설정 관련 항목인 .env 파일과 config 디렉토리

Laravel 프레임워크는 애플리케이션을 읽을때, 먼저 config 폴더에 있는 파일들을 읽어들인다. 이때 config 하위의 각 설정파일(app.php, cache.php)등에서는 자체의 설정값과 env() 함수를 통해서 얻어진 설정값을 이용하여 각 항목별로 환경설정을 한다.
왜 이렇게 이중처리를 할까? 생각하게되는데, 애플리케이션 개발시에 app-dev, app-product, app-qa 등 여러상황에 따라 설정값이 달라지도록 해서 각 설정에 맞는 env 파일을 이용하도록 하기 위해서이다.
즉, .env-app-dev 라는 파일을 이용해서 기동하면 개발용 설정변수가 할당되고 .env-app-product 라는 설정파일을 이용하면 실제 서비스용 설정변수가 적용되도록 할수있다는 것이다.

주의할점은 env()함수는 config폴더안의 파일에서만 참조하도록 한다. Laravel에서는 config:cache를 통해 설정내용이 캐싱되면 config하위에 있는 파일들이 정의한 값만 가지게 되므로 env설정파일에 있는 값은 불러들이지 않기 때문에 null 이 되어버리기 때문이다.

실제 운영에서의 예를 들어보자

개발서버 : .env.dev 이름으로 저장
스페이지서버 : .env.stg 이름으로 저장
프로덕션서버 : .env.prod 이름으로 저장

이렇게 3개의 환경이 있어서, 각각 데이터베이스, 인증환경등이 다르다고 생각해보자. 아니, 실제로 다르다.

각각의 서버의 nginx의 환경설정(nginx/fastcgi_params)에 fastcgi_param 에 APP_ENV 라는 파라메터를 전달하는 것으로 각각의 환경을 구분할수있다.

개발서버의 nginx/fastcgi_params 에 추가
fastcgi_param APP_ENV dev;

스테이지서버의 nginx/fastcgi_params 에 추가
fastcgi_param APP_ENV stg;

프로덕션서버의 nginx/fastcgi_params 에 추가
fastcgi_param APP_ENV prod;

이제 프로그램 각 서버의 nginx를 기동하면 각각의 설정(dev, stg, prod)에 맞는 환경설정을 자동으로 읽어낸다.

.env 파일의 구성에 대해 알아보자

.env 파일은 앱이름, 데이터베이스 또는 다른 외부 시스템 접속정보 등 다소 민감한 정보가 들어있을수 있다. 따라서 외부에 공개하는 경우에는 .env 파일을 .gitingnore 파일에 추가해서 외부에 노출되지 않도록 할 필요가 있다.

아래는 .env 에 대한 간단한 항목설명이다.

APP_NAME=Laravel 		# 애플리케이션 이름
APP_ENV=local 			# 구동 환경(dev, stage, production 등)
APP_KEY=			# 애플리케이션의 암호화 키를 설정합니다. 이 키는 보안에 중요한 역할을 하며, 32자 이상의 무작위 문자열이어야 한다.
APP_DEBUG=true 			# 디버그 모드를 활성화할지 여부를 설정합니다. true로 설정하면 자세한 오류 메시지가 표시되며, false로 설정하면 오류 메시지가 숨겨진다
APP_URL=http://localhost 	# 사이트 도메인 주소 설정한다.

LOG_CHANNEL=stack 		# LOG_CHANNEL 변수는 config/logging.php 파일에서 정의된 로깅 채널 중 하나를 지정합니다. 기본적으로 Laravel은 여러 가지 채널을 미리 정의해두고 있습니다. 이들 중 하나를 선택하거나 필요에 따라 커스텀 채널을 정의할 수 있습니다.
LOG_LEVEL=error # 기록될 로그의 최소심각도 수준을 지정한다. error, debug, info, notice 등이 있다.

이하 DB,REDIS, AWS 등 항목이 있다.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

.env 파일에 등록된 값은 config 를 통해서 얻어오는게 좋다.(앞서 얘기했듯이…)

 $environment = config('app.env');

Blade템플릿에서는 아래와 같이 사용한다.

@if (config('app.env') === 'local')
    <p>This is the local environment.</p>
@else
    <p>This is not the local environment.</p>
@endif

config 폴더의 구성에 대해 알아보자

config 폴더하위의 파일들은 bootstrap의 LoadConfiguration.php 에서 읽어들여 메모리에 키-값 형태로 저장된다.
사용자 정의 환경변수를 추가하고 싶다면
config/myval/hehe/omg.php 을 아래와 같이 만든다.

<?php

return [
	'hello' => 'hello. my value',
];

이이렇게 저장했다면, config(‘myval.hehe.hello’) 로 불러들일수 있다.

0 comments:

댓글 쓰기