Postgresql에 radio button/checkbox 데이터 저장하기

나이트 개발자·2023년 9월 24일
0
post-thumbnail

시작하며

Web UI 를 Database 그대로 표현하려다 보면 단순한 텍스트 필드는 간단한 DDL로도 쉽게 구현가능하지만 라디오버튼이나 체크박스의 데이터들을 어떻게 표현할까 고민이 많이 된다. 흔히들 간단히 DB에는 INT 형을 만들고 이를 UI에서 매핑하는 방식들을 쓰지만 매우 수작업에 의존하고 시스템이 복잡해질 경우 자동화 또는 lowcode 적용에 분명 어려움이 생긴다. 그래서 다음과 같이 ENUM 과 ARRAY를 활용하는 방법을 고민해 본다.

라디오버튼이나 콤보박스로 리스트의 내용 중 한 개만 선택할 경우

ENUM 데이터 타입 생성

CREATE TYPE gender AS ENUM ('middle', 'male', 'female');

CREATE

CREATE TABLE UserProfile (
    user_id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    gender gender NOT NULL
);
COMMENT ON COLUMN UserProfile.gender IS 'type=enum;0=middle;1=male;2=female';

INSERT

INSERT INTO public.userprofile (user_id, "name", gender)
VALUES(nextval('userprofile_user_id_seq'::regclass), 'blackpink', 'female');

SELECT

SELECT user_id, name, gender, 
       CASE 
           WHEN gender = 'middle' THEN 0
           WHEN gender = 'male' THEN 1
           WHEN gender = 'female' THEN 2
       END as gender_int
FROM UserProfile;

SELECT user_id, name, gender, 
       array_position(enum_range(NULL::gender), gender) - 1 AS gender_int
FROM UserProfile;

UPDATE

UPDATE public.userprofile
SET "name"='blackpink2', gender='male'
WHERE user_id=3;

체크박스로 리스트의 내용중 여러개를 선택하여 기록할 경우

ENUM 데이터 타입 생성

CREATE TYPE noti_method AS ENUM ('SMS', 'Email', 'kakao', '우편');

CREATE

CREATE TABLE UserProfile2 (
    user_id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    noti_methods noti_method[] DEFAULT ARRAY[]::noti_method[] -- 기본값을 빈 배열로 설정
);
COMMENT ON COLUMN UserProfile2.noti_methods IS 'type=array;SMS=SMS notification;Email=Email notification;kakao=KakaoTalk notification;우편=Postal mail notification';

INSERT

INSERT INTO UserProfile2 (name, noti_methods) 
VALUES ('John Doe', ARRAY['SMS', 'Email']::noti_method[]);

SELECT

SELECT * FROM UserProfile2 WHERE 'Email' = ANY(noti_methods); -- Email을 알림 방법으로 선택한 사용자 조회

UPDATE

UPDATE UserProfile2 
SET noti_methods = ARRAY['SMS', 'kakao', '우편']::noti_method[] 
WHERE user_id = 1;

마치며

lowcode 개발을 하지 않으면 빠르게 변하는 개발 추이를 따라 잡을 수 없는 시대가 돼 버렸다. 매너리즘에서 벗어나 뭐든 자동화할 수 있고 논리적인 개발과정을 스스로 구축해두어야 한다. 노가다 탈피는 이제 필수! 그래서 COMMENT에도 어떻게 자동화하면 좋을 지 힌트를 남겨두었다.

profile
개발하면서 또는 프러덕 관리하면서 겪는 기억해둬야하는 내용을 메모장 삼아 남긴다. Google Keep이나 메모 도구에 남기는 것과는 달리 잘 정리할 수 있어서 언젠가 들춰봐야할 내용들을 담은 글들이 게시된다.

0개의 댓글