vhost.conf 파일은 Apache HTTP 서버의 별도의 가상 호스트 설정을 정의하는 파일입니다. 가상 호스트란, 하나의 IP 주소에서 여러 개의 웹 사이트를 운영하는 것을 의미합니다. vhost.conf 파일을 사용하면 각 가상 호스트마다 별도의 설정을 적용할 수 있습니다.
vhost.conf 파일은 Apache 설정 디렉토리에 있는 httpd.conf 파일에서 Include 명령을 통해 호출됩니다.
Include conf/extra/httpd-vhosts.conf
vhost.conf 파일에서 가상 호스트를 정의할 때는 <VirtualHost> 태그를 사용합니다. 각 가상 호스트마다 ServerName과 DocumentRoot 등의 설정을 정의할 수 있습니다.
interface Multer {
/**
* Returns middleware that processes a single file associated with the
* given form field.
*
* The `Request` object will be populated with a `file` object containing
* information about the processed file.
*
* @param fieldName Name of the multipart form field to process.
*/
single(fieldName: string): RequestHandler;
/**
* Returns middleware that processes multiple files sharing the same field
* name.
*
* The `Request` object will be populated with a `files` array containing
* an information object for each processed file.
*
* @param fieldName Shared name of the multipart form fields to process.
* @param maxCount Optional. Maximum number of files to process. (default: Infinity)
* @throws `MulterError('LIMIT_UNEXPECTED_FILE')` if more than `maxCount` files are associated with `fieldName`
*/
array(fieldName: string, maxCount?: number): RequestHandler;
/**
* Returns middleware that processes multiple files associated with the
* given form fields.
*
* The `Request` object will be populated with a `files` object which
* maps each field name to an array of the associated file information
* objects.
*
* @param fields Array of `Field` objects describing multipart form fields to process.
* @throws `MulterError('LIMIT_UNEXPECTED_FILE')` if more than `maxCount` files are associated with `fieldName` for any field.
*/
fields(fields: ReadonlyArray<Field>): RequestHandler;
/**
* Returns middleware that processes all files contained in the multipart
* request.
*
* The `Request` object will be populated with a `files` array containing
* an information object for each processed file.
*/
any(): RequestHandler;
/**
* Returns middleware that accepts only non-file multipart form fields.
*
* @throws `MulterError('LIMIT_UNEXPECTED_FILE')` if any file is encountered.
*/
none(): RequestHandler;
}
iOS 장치에 설치되어 있는 동안 동일하게 유지됩니다.사용자가 장치에서 해당 공급업체의 앱을 모두 삭제한 후 그 중 하나 이상을 다시 설치하면 값이 변경됩니다.Xcode를 사용하여 테스트 빌드를 설치하거나 애드혹 배포를 사용하여 기기에 앱을 설치할 때도 값이 변경될 수 있습니다.따라서 앱이 이 속성의 값을 어디에나 저장하는 경우 식별자가 변경되는 상황을 적절하게 처리해야 합니다.
-> 빌드 구분에 따라 buildConfigField를 통해 실제 소스에서 BuildConfig.PAID 이런식으로 변수로 활용가능
서비스로직 , manifest 등.. 에서 변수가될 값을 코드상에서 제어 가능하다.
android {
...
buildTypes {
debug {...}
release {...}
}
// Specifies the flavor dimensions you want to use. The order in which you
// list each dimension determines its priority, from highest to lowest,
// when Gradle merges variant sources and configurations. You must assign
// each product flavor you configure to one of the flavor dimensions.
flavorDimensions "api", "mode"
productFlavors {
demo {
// Assigns this product flavor to the "mode" flavor dimension.
dimension "mode"
...
}
full {
dimension "mode"
...
}
// Configurations in the "api" product flavors override those in "mode"
// flavors and the defaultConfig block. Gradle determines the priority
// between flavor dimensions based on the order in which they appear next
// to the flavorDimensions property above--the first dimension has a higher
// priority than the second, and so on.
minApi24 {
dimension "api"
minSdkVersion 24
// To ensure the target device receives the version of the app with
// the highest compatible API level, assign version codes in increasing
// value with API level. To learn more about assigning version codes to
// support app updates and uploading to Google Play, read Multiple APK Support
versionCode 30000 + android.defaultConfig.versionCode
versionNameSuffix "-minApi24"
...
}
minApi23 {
dimension "api"
minSdkVersion 23
versionCode 20000 + android.defaultConfig.versionCode
versionNameSuffix "-minApi23"
...
}
minApi21 {
dimension "api"
minSdkVersion 21
versionCode 10000 + android.defaultConfig.versionCode
versionNameSuffix "-minApi21"
...
}
}
}
...
flavorDimensions속성을 사용하여 'full' 및 'demo' 제품 버전을 그룹화하는 'mode' 버전 차원과 API 수준을 기반으로 제품 버전 구성을 그룹화하는 'api' 버전 차원을 생성합니다.
-> 빌드 flavor로 커스텀 이름에 따른 빌드구분 , API 버전에따른 빌드 구분 둘다 가능함을 보여준다.
빌드
- 빌드한후 왼쪽 build variants를 보면 build 방식이 내가 작성한 gradle에 따라 분리 되있는걸 볼 수 있다.
리소스
-> 기존 main 디렉토리가 존재, sb 라는 커스텀 디렉토리 생성으로 buildFlavor이름과 맞는 파일 생성후
URI의 특정한 문자를 UTF-8로 인코딩해 하나, 둘, 셋, 혹은 네 개의 연속된 이스케이프 문자로 나타냅니다. (두 개의 대리 문자로 이루어진 문자만 이스케이프 문자 네 개로 변환됩니다.
let test1 = '66.6퍼센트는 중국, 브라질, 인도, 러시아, 멕시코 등 5대 개발도상국이 생산했다.• 나머지 개발도상국은 모두 합쳐 6조 3000억'
cvt(test1)
function cvt(text){
let covert = encodeURIComponent(text)
//텍스트를 이스케이프 문자열로 치환
console.log(`Encode: ${text} => ${covert}`)
//이스케이프된 문자열을 텍스트로 치환
console.log(`Decode: ${covert} => ${decodeURIComponent(covert)}`)
}
decodeURIComponent()
encodeURIComponent나 비슷한 방법으로 생성된 Uniform Resource Identifier(URI) 컴포넌트를 해독합니다.