본문 바로가기
활동 일지/서베이지

[고민 일지] Backend 설문 옵션에 확장성 더하기

by seoyamin 2024. 1. 1.

서베이지는 설문자와 설문 참여자를 (a.k.a 패널) 연결해주고 수수료를 받는 중개 서비스이다.

이 과정에서 설문이 특정 나이대, 성별을 대상으로 하는 경우, 자격이 되지 않는 패널의 참여를 막기 위하여 어플에서 해당 패널의 자격이 되는 설문만을 필터링하는 기능을 제공한다.

 

이번에 Spring boot를 이용한 서버를 도입하게 되면서, 몇백명의 패널에 대하여 효과적인 설문 옵션 관리 방법을 고민하게 되었다. 이번 글에서는 그 고민 과정을 기록해놓으려 한다.

 

Enum을 활용하자!

서베이지에서는 설문과 패널을 효과적으로 매칭하기 위하여 다양한 필터링 조건을 제공한다.

나이대, 성별 등 여러 필터링 조건에 대하여 기존에는 각 옵션의 값을 0부터 시작하는 인덱스 값으로 저장하였다.

 

예를 들면 10대면 0을, 20대면 1을 저장하는 식이다. 그러나 Effective Java 도서를 참고하니, 이러한 방식은 그 값 자체가 어떠한 의미를 갖는지 곧바로 파악하기 어려우며, 새로운 옵션이 중간에 추가되는 경우 값을 설정하기가 어려워 유지보수에 부적절한 방식임을 알 수 있었다.

 

이러한 한계점을 돌파하는 방법은 바로 enum이다.

enum은 다양한 필드를 가질 수 있으며, string 값 자체로 저장할 시, 그 값 자체가 가지는 의미를 직관적으로 표현할 수 있다. (MALE, FEMALE 등)

 

 

또한 자체 메서드를 정의하고 사용할 수 있어서, 사용자 생년월일을 저장하는 서베이지에서 날짜 계산을 통해 현재 나이에 맞는 enum을 리턴하는 메서드를 구현할 수 있었다.

 

public static TargetAge from(LocalDate birth) {
    LocalDate now = LocalDate.now();
    int age = now.getYear() - birth.getYear();

    if(age >= 20 && age <= 24) return AGE_20_24;
    else if(age >= 25 && age <= 29) return AGE_25_29;
    else if(age >= 30 && age <= 34) return AGE_30_34;
    else if(age >= 35 && age <= 39) return AGE_35_39;
    else if(age >= 40 && age <= 44) return AGE_40_44;
    else if(age >= 45 && age <= 49) return AGE_45_49;
    else if(age >= 50 && age <= 59) return AGE_50_59;
    else if(age >= 60 && age <= 69) return AGE_60_69;
    else return ALL;
}

 

'활동 일지 > 서베이지' 카테고리의 다른 글

[서베이지 Backend] 진짜 진짜 서버 도입  (0) 2023.08.25