ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • I18N 다국어 DB 모델링 하기
    Database 2024. 2. 7. 22:57

     

     

     

    현재 다국어를 지원하는(i18n) 프로젝트를 맡고 있습니다.

     

    다국어 정보를 DB에 잘 넣기 위해서 모델링하는 작업을 해보았고,

    이 작업을 통해 다국어 DB 설계에 대한 간단한 아이디어를 적어보겠습니다.

     

    유저에게 제공해야하는 언어가 “영어”, “한국어” ,”일본어” … 등등 여러 언어가 있을 때,

    제공해야하는 다국어 타입(?)이 2가지가 있을 것 같습니다.

     

    1. 정적으로 화면에 담아야하는 정보
    2. 동적으로 다국어를 생성하는 정보

     

    첫번째 정적으로 화면에 담아야하는 정보는 화면을 기획할 때 동적인 내용을 제외한 나머지 영역일 수 있을 것 같습니다.

     

    두번째 동적으로 다국어를 생성하는 정보는 보통 운영진(혹은 관리자)에 의해서 동적으로 데이터를 생성하는 부분입니다.

     

    예를 들어 동적으로 다국어를 생성하는 정보에 해당하는 경우는 다음과 같습니다.

    공지사항을 작성할 때 사이트가 한국어, 영어, 일본어를 제공한다면 “한국어 버전 공지글”, “영어버전 공지글”, “일본어 버전 공지글” 이렇게 3개의 내용이 DB에 들어가야 합니다.

     

    또는 쇼핑몰에서 쇼핑몰 관리자가 A라는 상품을 추가할 때 상품명에 대해 한국어는 “A상품”, 영어는 “A Item”, 일본어는 “A商品” 이렇게 설정하여 DB에 들어가야 겠지요.

     

     

    이 글에서는 동적으로 다국어를 생성해야하는 정보에 대한 다국어 DB 모델링하는 아이디어를 제시해보겠습니다.

     

     

     

    방법 1 _ 하나의  테이블에 다국어 칼럼 생성

    첫번째 아이디어는 하나의 테이블에 다국어 정보를 모두 넣는 방법입니다.

     

    먼저, 설명하기 쉽도록 상품 테이블을 만든다고 합시다!

     

    [상품]

    • 상품명 → 다국어 정보
    • 상품 설명 → 다국어 정보
    • 상품 가격

     

    등등 요소가 있을텐데 다국어 정보에 대한 컬럼에 대해 “_{언어코드}” 를 추가하여 구성하도록 해보겠습니다.

     

    PRODUCT 테이블 구조를 그려보았습니다.

     

    상품명(PRODCUT_NAME)에 대해 언어코드를 붙였습니다.

    - PRODUCT_NAME_KO

    - PRODUCT_NAME_EN

    - PRODUCT_NAME_JA 

     

    마찬가지로 상품설명(PRODUCT_DESC)에 대해서도 언어코드를 붙여 칼럼을 추가하였습니다.

    - PRODUCT_DESC_KO

    - PRODUCT_DESC_EN

    - PRODUCT_NAME_JA

     

    장점

    • 하나의 테이블에 다국어 정보를 저장하였기 때문에 상품에 대한 정보를 조회하고 싶을 때 조인할 필요가 없습니다.

    단점

    • 언어코드가 많아지거나, 다국어 정보를 많이 담아야할 경우 칼럼의 수가 많이 늘어납니다.
    • 언어코드가 갑자기 추가될 경우 확장성에 용이하지 않습니다.

     

     

     

    방법 2 _ 다국어를 위한 테이블을 따로 분리

    두번째 아이디어는 다국어에 대한 테이블은 따로 관리하는 방법입니다.

     

    방법 1에서 나온 상품으로 예시를 들어 설명하겠습니다.

     

    상품에 대해 일반정보와 다국어정보로 분리하여 각각의 테이블로 구성합니다.

    • 상품의 일반 정보 : 상품번호, 상품가격
    • 상품의 다국어 정보 : 상품명, 상품 설명

     

     

     

    PRODUCT 정보들에 대해 기본정보를 담은 “PRODUCT” 테이블

    다국어 정보를 나타내는 “PRODUCT_TRANS” 테이블로 분리하였습니다.

     

    이때 다국어 테이블임을 명확하기 위해 메인테이블명 + “_TRANS” 규칙을 정하였습니다.

     

    장점

    • 언어를 추가하거나, 다국어 정보를 추가해도 확장하기 용이합니다.

    단점

    • 정보를 조회하기 위해 조인을 해야합니다.

     

     

     

    결론

    크게 2가지 방법으로 다국어 정보를 처리할 수 있을 것 같습니다.

    저는 두번째 방법으로 선택하여 확장성에 용이할 수 있도록 DB를 설계하고자 하였습니다.

     

     

    'Database' 카테고리의 다른 글

    DB Trigger (트리거) 사용법  (0) 2024.03.20
Designed by Tistory.