해외서비스 현지화를 위한 소스관리 방법

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

해외서비스 현지화를 위한 소스관리 방법

Post by 비회원 »

이 전 프로젝트가 해외 여러나라 수출하게 되어 각 나라의 요구사항에 따라서 각 나라마다 상이해지는 경우가 있었습니다.
이에 서로 달라지는 것들을 최대한 스크립트로 빼서 관리하였으나, 부득이하게 소스 내에서 추가하거나 수정되어야 하는 경우 코드를 ifdef CHINA 이런씩으로 나누어 각 나라 코드를 관리했습니다. 이는 컴파일을 각 나라마다 해줘야 하며, 소스가 너무 지저분해지는 등 관리의 어려움이 많았습니다.


그래서 이런 경우에 어떻게 하셨으며, 하고 있는 지 궁금합니다.
소중한 노하우 좀 부탁드립니다.
비회원

Post by 비회원 »

약 몇달전 똑같은 질문이 있었습니다

그리고 아주 좋은 답변도 주셨고요

여기 게시판 어디 있으니 찾아보세요...
비회원

Post by 비회원 »

찾아보세요.. 하고 제가 찾았네요(일업나? ㅋ)

viewtopic.php?t=16449
비회원

지저분함이 없을수는 없을것 같군요...

Post by 비회원 »

다국어버전에 대한 소스 및 리소스관리 문제에서는 항상 지저분함(?)이 동반됩니다.
그리고 유지보수자의 입장에서 느낄 수 있는 애환(?)도 같이 따라다니죠^^;

일반적으로 처음부터 다국어 서비스를 염두해두고 게임을 개발하는 경우는 많지 않습니다.
와우, 워해머온라인, 타블라라사등 블럭버스터급 게임들의 경우는 처음부터 철저히 다국어 버전을 염두해서 기획되고 프로그래밍 설계, 구현이 되는데 대부분의 경우는 한국시장을 목표로 개발되기 때문에 훗날 해외버전이 필요할 시점에서 상당한 난관에 부딪히는 경우가 많습니다.


이럴경우 소스코드의 지저분함을 어느정도로 할 것인가가 중요한데...(불행이도 지저분함이 없을수는 없습니다.)

대부분의 경우...서비스 정책, 마케팅, 현지 퍼블리셔의 요구등등..순수 개발환경외적인 요소에 크게 영향받게됩니다.

다음 두가지 경우가 있겠습니다.

1. 국내버전이 최신버전이고 해외버전은 그 뒤를 쫒는 형국일때..
온라인 게임 서비스의 경우...특히...국내버전이 한창 업데이트되는...소위 말하는 뜨는 게임의 경우이고 해외 버전은 국내버전의 최신 서비스 버전을 사용하는게 아니라 서비스정책등의 문제로 국내 과거버전을 사용해야 하는 경우 매우 곤란한 상황에 빠지게 됩니다.

이럴경우 해외버전은 항상 국내버전의 뒤를 쫒아가는 형국인데...
소스코드를 아예 국가별로 분기할 경우에는 국내에서 적용된 수많은 콘텐츠, 버그수정등의 코드를 일괄적용하는 것이 매우 힘들어지는 단점이 있습니다. 물론 소스코드에 국가분기는 필요없겠죠(깔끔?...)
그러나 과연 소스코드 깔끔하게 하고자 국내버전에서 작업된 내용을 다시 옮기는 노력을 할 필요가 있는것일까요?


2. 처음부터 한국은 물론이고 모든 국가서비스 버전이 동일할때...
이 경우는 1번의 경우보다 훨~씬 편한 경우입니다.
그러나 여전히 하나의 소스코드에서 모든 국가버전을 만드는 것이 월등하게 잇점이 많습니다.
이럴 경우 마케팅팀등과 사전협의가 필요한 것이 웬만하면 이벤트도 통일하고...국가 특유의 컨텐츠는 리소스에 한정하자...이런것이 있으면 편하겠죠.

저는 각 국가별로 소스코드를 관리하는 경우와 하나의 소스코드에서 모든 국가버전을 관리하는 경우 모두 경험했습니다만...
하나의 소스코드에서 모든 국가버전을 관리하는 것이 더 좋았던 것 같습니다.
비회원

다른 방법이라면

Post by 비회원 »

* 국가별 소스 관리
- 처음 편함 최고.
- 국가가 많아지면 재앙
- 소스관리 어려움( 빌드 머신이 있는 경우. 나라마다 유지 )
- 버그 발생시 모든 국가를 수작업으로 고쳐야 함. ( diff 툴이 왼수같이 보임 )
- 초기 문제 대응 속도 빠름. 나중에 위의 문제로 제일 느림
- 소스 가독성 좋음
- 수정시. 건설공사에서 땅 파다가 수도관을 건드리는과 같은 효과 발생( 어디에 수도관이 있는 거야 )
- 유지관리 비용 제일 높음
- copy & paste 마이스터 등극
- 버그 발생 확률 높음( 마이스터에 등극하면 낮아짐 )
- 악의 축

* ifdef _JAPAN
- 처음 편함
- 전 국가 단일 소스가 가능
- 국가마다 컴파일해야 함
- 한번에 전국가 빌드하지 않으면 재앙이 발생
- 소스 가독성 최악 -> 개발 속도를 다운 시킴에서 악의 축보다 높을지도
- 유지관리 비용 높음

* if( IsJapan() ) doSomething();
- 처음 불편
- 한번만 컴파일하면 끝남( 단일 소스. 단일 실행파일 )
- 가독성 중간
- 유지관리 비용 낮음
- 처음시도할 때 추천( ifdef 방식에서 변환하기에도 좋음 )

* 국가별 기능 관리에 단일 실행파일
- 처음 제일 불편
- 구조에서 기능을 plug in하게 작성.
- 국가별로 base 실행파일에 기능을 조합하여 릴리즈
- 예외처리는 데이타 파일과 스크립트로 분리
- 가독성 최고
- 유지관리 비용 최저
- 버그 수정 대응 속도 최고
- 영업파트도 좋아함
- IE가 국가마다 빌드할 것인지. 소스가 다를 것인지. 생각해보면 결론은 간단
- 소스 뿐아니라 npc대화 스크립트도 분기가 되는 소스 방식이면 같이 고려할 것
- 유 경험자에게 추천( 개발 중간에 전환은 비용높음. 초기에 구조를 잡아야 함 )
Locked