Flutter 스터디에서 다양한 프로젝트를 하다가, 이번엔 판을 좀 키워보았습니다.
Flutter에 제공되는 정보를 Next.js를 써서 웹페이지로도 제공을 하고, 한글/영어로 서비스 제공이 가능하도록 하는 것이죠.
Flutter 소스 내에서 사용되는 언어들에 대해서는 easy_localization 패키지를 써서 진행을 했지만, 서비스에서 제공되는 데이터 중 서버(자체서버) api를 통해 오는 데이터들의 다국어 지원을 어떻게 할지에 대해서는 고민이 필요했습니다.
물론 최근에 번역 시스템이 아주 잘 되어있어서 번역 패키지를 쓰는 것도 좋겠지만, 아직 그 '번역체'의 느낌을 저버릴 수가 없더라구요.
좀 더 확실한 글로벌 서비스 제공을 위해 번거롭지만 컨텐츠들을 직접 번역하기로 마음먹었습니다.
구글링과 함께 생각해본 방식을 보자면 3가지 정도 방법이 있을 것 같습니다.
코드 예시는 문법 생각 안하고 작성하니 의미 이해 용도로만 봐주세요 :)
1. 제공하는 언어 별로 스키마에 속성을 추가해준다
Student 라는 테이블이 있을 때 아래처럼 정의를 해주는 거죠.
//Student Table
{
'id': '1',
'name_kor' : '김민수',
'name_eng' : 'Kim, minsoo'
}
아마 3가지 방식 중에 가장 테이블을 적게 만들고 사용할 수 있는 방법일 것 같습니다. 가장 단순하구요
[장점]
데이터베이스 구조가 복잡해지지 않는다
[단점]
api 단에서 처리해주지 않으면 클라이언트에서 언어 설정에 따라 'name_kor', 'name_eng' 등으로 구분해서 접근해야한다.
2. 언어별 테이블을 별도로 구성해준다
//Student_kor Table
{
'id': '1',
'name' : '김민수'
},
//Student_eng Table
{
'id': '1',
'name' : 'Kim, minsoo'
}
//if eng, select * from student_eng where id = 1
//if kor, select * from student_kor where id = 1
[장점]
클라이언트에서 별도로 처리할 필요 없이 'name' 속성에 접근해서 바로 사용이 가능하다.
[단점]
데이터베이스 구조가 약간 복잡해진다.
테이블이 2배로 늘어난다.
3. 모든 번역이 필요한 String 데이터들을 Translation Table에 넣어두고 연동해서 쓴다
//Student Table
{
'id': '1',
'name_tid' : '1'
},
//Translation Table
{
't_id': '1',
'eng' : 'Kim, minsoo',
'kor' : '김민수',
}
[장점]
데이터베이스 번역에 수정이 필요할 경우 쉽게 읽고 수정이 가능하다
지원하고자 하는 언어가 추가될 경우 다른 테이블은 안건드리고 이 부분만 수정해주면 된다.
[단점]
데이터베이스 구조와 쿼리문이 복잡해진다
결론
방법론에 대한 부분이라 정답은 없습니다!(?)
다만, 프로젝트의 규모에 따라 다르겠지만 저는 1번 혹은 3번 방법을 많이 사용할 것 같습니다.
단점을 극복 가능하거나 단점을 덮을 만큼의 이점이 2번에서는 보이지 않아서요.
1번의 단점으로 작성한 name_kor, name_eng 등은 사실 api 단에서 가공해서 클라이언트로 전해준다면 클라이언트에서 동일하게 name으로 접근 가능한 부분이고,
3번의 경우에는 구조가 복잡해질 수는 있지만 추후 수십개의 언어로 서비스를 제공해야 할 경우까지 고려한다면 가장 유연하게 확장이 가능할 것 같습니다.
2번은 장점이 크게 뛰어나지 않은 대신 테이블 수가 (2n - 1)개로 증가하게되니 메리트가 딱히 없는 것 같아요.
제가 현재 하는 프로젝트는 개인 프로젝트이고, 글로벌 서비스를 지원하지만 제가 할 줄 아는 언어가 영어와 한글 뿐이라 그 이상의 확장에 대한 고려는 하지 않고 있습니다.
이렇게 작성해놓고 보니 1번처럼 가장 단순한 방법이 가장 좋을 것 같다는 생각이 들어 1번으로 적용하기로 결정하였습니다.
Simple is the best!~
15분 동안 고민하고 작성한 글이니 허점이 있을 수도 있고 나중에 발생할 수 있는 큰 문제를 간과했을 수도 있습니다.
혹시 그런게 있다면 댓글로 알려주시면 감사하겠습니다 :)
'Tech > etc' 카테고리의 다른 글
더 찾기 귀찮아서 정리하는 정규식 표현 (0) | 2021.03.31 |
---|---|
[Python] 주식 자동매매 봇 만들기 함수(function), class 다루기 (0) | 2020.08.21 |
[Python] 주식 자동매매 봇 만들기 tuple, list, dictionary, set (0) | 2020.08.20 |
[Python] 주식 자동매매 봇 만들기 파이썬 기본문법(변수, 조건문, 반복문) (0) | 2020.08.20 |
[Python] 주식 자동매매 봇 만들기 설치 관련 정리 (0) | 2020.08.20 |
댓글