구성
애플리케이션의 기본 구성
Netuno에서 생성된 모든 애플리케이션에는 데이터베이스 연결, 액세스 키 및 기타 필수 매개변수를 정의하는 특정 구성이 있습니다.
Netuno는 애플리케이션이 실행되는 환경(로컬, 공식 서버 또는 기타 환경)에 따라 이러한 구성을 정리하는 지능형 시스템을 사용합니다.
애플리케이션 구성은 프로젝트 루트에 있는 config 폴더에 중앙 집중화됩니다.
기본 경로: my-app/config
실행 환경
config 폴더 안에서 파일은 생성된 환경에 따라 이름이 지정됩니다. Netuno는 현재 실행 중인 환경에 해당하는 파일만 자동으로 로드합니다:
-
개발:
_development로 명명된 파일은 Netuno 환경이 개발로 설정된 경우에만 읽힙니다. -
운영:
_production로 명명된 파일은 Netuno 환경이 운영으로 설정된 경우에만 읽힙니다.
구성 파일 유형
각 환경에 대해 함께 작동하는 두 가지 유형의 파일을 사용할 수 있습니다:
JSON
_development.json_production.json
역할: 정적 정의 및 매개변수 설정을 저장합니다.
예: 데이터베이스 자격 증명, 외부 API URL 및 고정 구성을 배치합니다.
JS
_development.js_production.js
역할: 구성이 로드되는 시점에 로직을 실행합니다.
예: 구성을 동적으로 변경하거나 애플리케이션이 완전히 실행되기 전에 필요한 초기 작업 및 처리를 수행합니다.
전역 환경 정의
애플리케이션이 어떤 구성을 사용해야 하는지 알 수 있도록 Netuno 서버에 현재 작동 중인 "모드"를 알려야 합니다. 이 전역 구성은 Netuno 루트의 단일 파일에 정의됩니다.
- 전역 구성 파일 찾기: Netuno가 설치된 루트 폴더로 이동합니다.
config.js라는 파일을 찾아 엽니다. - 환경 변수 찾기: 파일 안에서
config.env속성을 찾습니다. - 원하는 환경 설정: 활성화하려는 환경에 따라 변수 값을 변경합니다.
개발 환경
자신의 컴퓨터에서 프로그래밍하고 테스트하는 동안 사용됩니다.
// Netuno 루트의 ./config.js 파일에서
config.env = 'development'
운영 환경
프로젝트가 완료되어 사용자를 위해 공식 서버에서 실행될 때 사용됩니다.
// Netuno 루트의 ./config.js 파일에서
config.env = 'production'
기타 환경(사용자 지정)
Netuno는 유연하며 사용자 지정 환경 이름을 만들 수 있습니다. 예: test, homologation, staging.
// Netuno 루트의 ./config.js 파일에서
config.env = 'test'
애플리케이션 구성은
_로 시작해야 하며.json확장자를 가져야 하고, 동일한 환경의.js확장자 파일도 함께 있어야 합니다.
GIT 저장소
Git을 사용하여 애플리케이션 코드를 버전 관리할 때 데이터 보안을 보장하는 것이 중요합니다.
구성 파일에는 일반적으로 데이터베이스 비밀번호, 비공개 API 키 등과 같은 민감한 정보가 포함됩니다. 따라서 실제 구성 파일을 저장소에 절대 전송해서는 안 됩니다.
비밀번호가 유출되지 않도록 하면서 다른 개발자를 위해 프로젝트를 문서화된 상태로 유지하려면 다음 두 단계를 따르세요:
1. 실제 파일 숨기기
애플리케이션 루트에서 .gitignore라는 파일을 엽니다(또는 생성합니다). Git이 완전히 무시하도록 .json 구성 파일의 경로를 추가합니다.
.gitignore에 추가할 내용 예시:
config/_development.json
config/_production.json
config/_test.json
2. 예제 구성 파일
새 개발자가 프로젝트를 쉽게 구성할 수 있도록 필요한 데이터가 포함된 예제 파일을 생성합니다.
- 애플리케이션의 config/ 폴더로 이동합니다.
sample.json이라는 파일을 생성합니다._development.json의 구조를 그 안에 복사하고 필드 이름만 남깁니다.
config/sample.json의 모습은 다음과 같아야 합니다:
{
"database": {
"host": "여기에_HOST_입력",
"user": "사용자_이름",
"password": "비밀번호"
}
}
코드에서 구성에 액세스하는 방법
구성 파일(예: _development.json)에 변수와 키를 정의한 후에는 애플리케이션 로직에서 이를 사용해야 합니다. 예를 들어 API에 연결하고 저장된 액세스 토큰이 필요한 서비스를 만들 때 사용합니다.
Netuno에서는 기본 제공 리소스 _app을 통해 이러한 구성에 액세스할 수 있습니다.
데이터를 가져오는 방법
서버에서 실행되는 모든 코드(예: server/services/ 폴더) 안에서 _app.config() 함수를 사용하여 활성 구성 파일에 있는 값을 가져옵니다.
연결 방식이 어떻게 이루어지는지 이해하려면 구성 파일(config/_development.json)에 다음과 같이 정의했다고 가정해 보세요:
{
"name": "내 애플리케이션",
"version": 2
}
"name" 키의 값을 가져와 서버 콘솔(log)에 출력하려면 .js 서비스에서 다음 코드를 사용합니다:
// 1. Netuno는 JSON 파일에서 "name" 키를 찾아 값을 가져옵니다.
// 2. 그런 다음 이 값을 'appName'이라는 JavaScript 변수에 저장합니다.
let appName = _app.config().getString("name");
// 3. Netuno 터미널에 변수 내용을 출력합니다: "내 애플리케이션"
_log.info(appName);
사용자 지정 구성
데이터베이스 및 서버의 기본 구성 외에도 자체 구성 변수를 만들 수 있습니다.
이는 예를 들어 "페이지당 최대 항목 수" 또는 "이메일 발송 간격"과 같은 비즈니스 규칙을 정의할 때 매우 유용하며, 이러한 규칙이 바뀔 때마다 애플리케이션 코드를 수정할 필요가 없습니다.
이러한 변수는 _development.json 또는 _production.json과 같은 JSON 구성 파일의 "settings" 블록 안에 저장됩니다.
JSON 구조 및 공개 범위(공개 vs. 비공개)
구성을 만들 때 사용자 인터페이스(프론트엔드)에서 볼 수 있는 항목과 서버(백엔드)에서만 보호되어야 하는 항목을 분리하는 것이 중요합니다.
- 비공개 변수:
"settings"블록 안에 있습니다. 서버만 액세스할 수 있습니다. - 공개 변수:
"public"하위 블록 안에 있습니다. 관리자 영역의 사용자 인터페이스(ui폴더)로 전송됩니다. 예: 대시보드 개발 시.
.json 파일을 구성하는 방법 예시:
{
...
"settings": {
"public": {
"itemsPerPage": 10
},
"emailInterval": 10
}
}
코드에서 구성에 액세스하는 방법
이 데이터를 가져오는 방법은 코드를 작성하는 위치에 따라 달라집니다:
1. 서버/백엔드(서비스)
일반 또는 비공개 구성에 액세스하려면 서버 코드(server 폴더의 .js 파일)에서 _app.settings() 리소스를 사용하세요.
// 비공개 변수 "emailInterval"에 액세스합니다
const emailInterval = _app.settings().getInt("emailInterval");
_log.info("설정된 간격은: " + emailInterval);
2. 인터페이스/프론트엔드(UI)
인터페이스 개발 시(ui 폴더의 파일) "public" 블록 안에 정의된 모든 항목에 액세스할 수 있습니다. 이를 위해 전역 객체 netuno.config.app.settings를 사용하세요.
// 프론트엔드에서 공개 변수 "itemsPerPage"에 액세스합니다
const itemsPerPage = netuno.config.app.settings.itemsPerPage;
console.log("테이블에 " + itemsPerPage + "개 항목을 표시합니다.");
결론
Netuno의 구성 시스템은 애플리케이션에 유연성과 구조적 보안을 제공합니다. 이를 통해 다음이 가능합니다:
- 다중 환경 관리: 독립적인 매개변수 설정을 사용하여 다양한 실행 컨텍스트(개발, 운영 등)를 생성하고 지원합니다.
- 변수 사용자 지정:
settings블록을 사용하여 비즈니스에 특화된 구성을 추가합니다. - 책임 분리: 백엔드로 제한된 구성과 프론트엔드에서 액세스할 수 있어야 하는 구성을 격리하고 보호합니다.