자바스크립트의 Optional Channing, Nullish Coalescing Operator 문법

용어 자체가 이리 어려우니 개념은 간단하고 매우 좋은 기능임에도 손에 잘.. 안붙습니다.

Optional Channing은 ?. 키워드로 사용되며 객체에 어떤 속성이 있다면 그 속성을 반환하고 없다면 undefined을 반환합니다. 즉 if 문으로 해당 속성을 검사할 필요가 없습니다. 이 Optional Channing의 예는 다음과 같습니다.

const person = { name: "Dip2K", company: { name: "GEOSERVICE", address: "Korea, Seoul" }};
console.log(person.company?.name); // GEOSERVICE
console.log(person.skill?.language); // undefined

Optional Channing은 매서드 호출에 대해서도 사용할 수 있는데요. 객체에 어떤 매서드가 존재할 때 그 매서드를 호출해야 한다면 if 문으로 매서드 존재 여부를 검사할 필요 없이 다음처럼 하면 됩니다.

const obj = {
    getName() {
        console.log("Dip2K");
    }
};

console.log(obj.getName?.()); // Dip2K
console.log(obj.getAge?.()); // undefined

결국 ?.은 바로 직전에 붙은 녀석이 존재하면 그 녀석을 반환하고 존재하지 않는 녀석이면 즉각 undefined를 반환하고 끝납니다.

다음은 Nullish Coalescing Operator입니다. ?? 키워드로 사용되며 ?? 키워드를 중심으로 왼쪽값이 명확히 null 또는 undefiend 일때 오른쪽의 값을 반환합니다. 명확히 null 또는 undefined이라는 의미는 0이나 빈문자열 등은 null 또는 undefiend로 해석되지 않습니다. 예는 다음과 같습니다.

let name = "Dip2K";
console.log(name ?? "Jackass"); // Dip2K 

let age = 0;
console.log(age ?? 10); // 0

let last_name = undefined;
console.log(last_name ?? "Jackson"); // Jackson

결국 이 이름만 거창한 녀석은 값이 있음? 없음 말고(undefined)입니다.

PostgreSQL의 체크 제약 조건(Check Constratint)에 정규표현식 적용하기

PostgreSQL은 매우 강력하고 뛰어나며 안정적인 DBMS입니다. 특히 공간 데이터 처리에도 뛰어난 면모를 보여줍니다. 2021년 DBMS 순위에서 상위권을 수년간 유지하고 있습니다. 1위는 오라클, 2위는 MySQL, 3위는 MS SQL Server이며 4위가 PostgreSQL입니다. 사용 빈도는 타 DBMS와 비교하여 지속적으로 증가하고 있습니다. 특히 유연성과 확장성을 중시하는 북미와 안정성에 보수적인 일본에서 PostgreSQL의 사용율이 매우 높습니다. 엔터프라이즈 DB의 이미지를 강조하기 위해 로고를 코끼리로 표현하고 있습니다.

사용자가 입력한 값을 프로그래밍 코드를 통해서도 유효한지 검사를 해야 하고 실제 서버 단의 REST API에서도 전달받은 값이 유효 한지를 검사해야하며 DBMS에 실제 값이 입력되는 SQL 호출에서도 값이 유효 한지를 검사해야합니다.

이때 입력한 값이 어떤 정해진 규칙을 준수하고 있는지에 대한 검사가 필요할 때가 있습니다. 예를들어서 메일주소나 핸드폰번호에 대한 값이 있습니다. 이러한 규칙은 흔히 정규표현식으로 지정할 수 있습니다. 정규표현식은 개발자라면 반드시 익혀야 하는 도구입니다.

다음은 DBMS에 INSERT 문을 통해 데이터를 추가할 때 값이 정해진 규칙으로 정규표현식 등에 맞는지 검사하도록 테이블 생성시 제약조건을 걸어준 예입니다.

CREATE TABLE "user" (
    id VARCHAR(20) PRIMARY KEY, -- 사용자 ID
    name VARCHAR(20) NOT NULL,
    mobilephone VARCHAR(13) NOT NULL,
    email VARCHAR(40) NOT NULL,
    CONSTRAINT chk_id CHECK (CHAR_LENGTH(id) >= 3),
    CONSTRAINT chk_name CHECK (CHAR_LENGTH(id) >= 3),
    CONSTRAINT chk_email CHECK (email ~* '^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+[.][A-Za-z]+$'),
    CONSTRAINT chk_mobilephone CHECK (mobilephone ~* '^01[0|1|6|7|8|9]-[0-9]{3,4}-[0-9]{4}$')
);

NULL 값 입력 방지, 문자열에 대한 일 길이 이상, 그리고 메일이나 전화번호 등의 형식에 맞는 값인지를 정규표현식을 이용해 검사합니다.