안녕하세요.

이들러입니다.

오늘은 코딩 작업 협업시 유의해야할 사항을 이야기하고자 합니다.

이러한 사항은 아래의 제품들을 제작하면서 겪었던 사항을 정리한 것입니다.

쉬운환율계산 : https://goo.gl/YUbPqd

쉬운환율계산무료버젼 : https://goo.gl/FhVBSl

모노리얼 다이어리(무료) : https://goo.gl/Ti93mz

오늘 이야기할 부분은 습관적인 부분입니다.


프로그램 관련해서 작업을 하다보면 협업은 불가피합니다.

그 어떤 사람도 규모가 큰 프로젝트를 혼자서 처음부터 끝까지 해낼 수는 없습니다.

만약 혼자서 처음부터 끝까지 해냈다면 규모가 크지 않은 프로젝트였거나, 아주 긴 기간이 걸렸거나, 

또는 개발자가 초초초천재! 개발자였을 것입니다.

따라서 협업은 개발에 있어서는 어쩔 수 없이 따라오는 부분입니다.


협업에는 도구가 필요합니다.

소스관리 시스템이라던지, 아니면 태스크관리 시스템, 이슈 트랙커 등 다양합니다.

이러한 도구를 안쓴다고 운영이 불가능한 것은 아니지만 쓴다면 실수를 줄이며 여러가지 면에서 더없이 좋습니다.


제가 오늘 말씀 드릴 부분은 이러한 관리적인 툴 부분이 아닙니다.

개발자가 사람으로서 실수할 수 있는 습관적인 부분을 말씀드리려고 합니다.

이미 조직문화나 정규화가 잘 되어 있는 규모있는 팀에서는 없는 일일 수도 있으나,

저희처럼 작은 조직에서는 흔히 일어나는 일입니다. 이 글은 저희 스스로의 경각심을 위해 작성하였습니다.

소설 처럼 내려읽어가는 형태를 취하다보니 코드는 의미만 통하도록 작성하였습니다.


1. 정해진 규칙을 따르지 않는다.

의외로 많습니다. 많은 개발자들이 종이 또는 화면 상의 문서를 보는 것을 좋아하지 않습니다.

물론 저도 좋아하지 않습니다. 이유는 잘 모르겠습니다.^^;;

빨리 뭔가를 따닥따닥 쳐서 눈에 보이고 손으로 만질 수 있는 무엇인가를 만들기를 바랍니다.

그래서 팀내부에 이미 정해져있는 문서를 제대로 읽지 않는 경우가 많습니다.

예를 들어 생활코딩이라는 커뮤니티에서도 가끔 올라오는 질문 중에 if 의 형태에 대한 것이 있습니다.

//if의 형태
// 1번
if ( isExistIdea() == true ) {
    print("존재함")
}

// 2번
if ( isExistIdea() == true )
{
    print("존재함")
}

if 의 두 형태 중 어떤걸 주로 사용하냐의 질문입니다. {} 의 시작지점에 대한 이야기인데 당연히 정답은 없습니다. 그냥 사람따라 다르고 팀따라 다릅니다. 

문제는 1번 형태로 쓰자고 모든 팀원이 논의가 끝난 상태에서 혼자 2번 형태를 사용하는 사람입니다. 정답이 없다보니 누가 뭐라고 하지도 않습니다. PSR 등의 코딩 스타일 가이드가 있긴 한데 강제는 아닙니다. 안따라도 오류가 나진 않으니, 잘 따르다가도 시간이 지나면 스멀스멀 하나씩 올라오기도 합니다. 자동으로 신텍스를 조정해주는 툴을 사용하거나 환경세팅을 통일하거나 하는 방법도 있습니다. 하지만 역시나 중요한 것은 개발자 스스로 끊임없이 자신의 코딩스타일이 가이드에 어긋나지 않았는지 확인하는 것입니다. 예시를 if로 들었을 뿐이고, 실제로 개발시에는 더 많은 논의가 생깁니다. 변수의 작명부터 클래스의 작명, 제어문의 형태, _의 쓰임, 공백의 활용 여부, 라인의 길이까지도 모두 논의 대상입니다. 위에 예시를 든 if문의 경우 팀이 둘 다 허용한다고 하면 둘 다 쓰면 그만입니다. 다만 협업시 이러한 부분은 한 번쯤은 꼭 체크하시길 바랍니다.


2. 있는걸 또 만든다.

반복적인 업무에 사용하는 함수는 참으로 편리합니다. 당연히 이런저런 유지보수를 하다보면 기능이 추가되고 그래서 필요한 함수를 추가할 경우가 생깁니다. 클래스의 메소드 등을 만들다 보면 다른 사람이 만든 클래스나 모듈을 수정하는 일도 있습니다. 급하게급하게 진행하는 경우 문서가 제대로 작성되어 있지 않으니, 코드를 위부터 아래로 쭈욱 훑어본 후에 자신이 원하는 함수가 없으면 함수를 만들기 시작합니다. 문제는 업무를 하다보면 이미 있는 함수를 다시 만드는 경우가 생깁니다. 물론 완전히 같은 함수를 두 번 만드는 경우는 별로 없습니다. 어설프게 같은 함수가 중복되는 경우가 문제입니다.

// 1번
func isBrake(Car) {
    if Car.brake == true {
        return true
    } else {
        return false
    }
}

// 2번
func isNotStopPedal(Car) {
    if Car.brake == false {
        return true
    } else {
        return false
    }
}

위의 두 함수는 같은 일을 하는 함수입니다. 함수명만 다르고 true, false가 뒤집혀 있습니다. 위에 예시는 매우 극단적이지만 조금 확장해서 생각해보면 이러한 경우는 꽤 많습니다. 위의 두 함수가 각각 따로따로 쓰여지게 되면 어느 순간 함수를 고쳐야할 순간에 혼동이 오기 시작합니다. 이러한 경우는 사실 개발자들 사이에서는 그냥 쉬쉬하는 일입니다. 일단 지금 당장 내가 짠 코드는 돌아가니 리팩토링 같은 코드 갱신 작업도 하지 않습니다. 괜시리 만졌다가 문제를 일으키고 싶지 않은 것이죠.^^;; 이 함수들의 문제는 나중에 리팩토링 등을 할 때도 꽤 많은 고민을 하게 만든다는 것입니다. 초기에 빠르게 성장하는 팀에서는 자주 발생하는 일입니다. 이 상태에서 어느 정도 성장 후에 코드를 정리하고자 하면 이미 더욱 커져버린 코드에 짊어져야할 출혈도 만만치 않습니다. 함수든 클래스든 생성 전에 반드시 문서를 확인하시고, 또한 다른 사람과의 크로스체크도 꼭 하시기 바랍니다.


3. 내꺼만 소중하다.

새로 추가된 인력이 주로 하는 실수입니다. 내가 하는 일은 너무너무 중요해서 눈에 잘 띄게 해야지 라는 강한 의식을 가지고 있을 때 발생합니다. 가령 클래스에 새로운 메소드를 추가한다면

//Car Class
Class Car() {
    var brake: Bool = flase

    func setBrake(bool) {
        self.brake = bool
    }

    /////////////////////////////////////////////////
    // isBrake : 브레이크의 존재여부를 알려줍니다
    // 시작
    ////////////////////////////////////////////////
    func isBrake() {
        if self.brake == true {
            return true
        } else {
            return false
        }
    }
    /////////////////////////////////////////////////
    // isBrake : 종료
    ////////////////////////////////////////////////
}

우리는 당신이 짠 소스가 얼마나 대단한 것인지 잘 알고 있습니다. 그러니 그냥 다른 함수 또는 변수들과 같은 형태의 정렬 또는 형태를 사용하세요. 그렇게 눈에 띄게 크게 표시 하지 않아도. 해당 모듈에 문제가 있다면 당신에게 가겠습니다.

이는 1번 규칙을 따르는 문제와 연관이 있습니다. 실제 운영을 하다보면 이러한 형태를 많이 보게 됩니다. 물론 코드는 잘 돌아가고 눈에 띄니 보기도 좋습니다. 하지만 개발 때 뿐입니다. 시간이 지나면 해당 함수는 다른 함수들과 같은 함수이며, 가령 다른 사람이 다른 함수를 수정하기 위해 저 코드를 열어보기라도 한다면 그 사람은 잠시 깊은 사색에 잠길지도 모릅니다.^^



4. 주석을 함께 수정하지 않는다.

주석은 잘못 사용하면 독입니다. 잘못된 주석은 주석이 없는 것보다 훨씬 위험합니다.

최근에는 문서를 자동으로 작성해주는 좋은 프로그램들도 있으니 문제가 안일어날 수도 있겠지만,

저는 여전히 웹소스 등을 수정할 때 에디터툴을 많이 사용하며 코드 중간중간에 주석을 넣기도 합니다.

//Car Class
Class Car() {
    var brake: Bool = false
    var smartKey: Bool = false

    func setBrake(bool) {
        self.brake = bool
    }

    /////////////////////////////////////////////////
    // 브레이크의 존재여부를 알려줍니다
    // 시작
    ////////////////////////////////////////////////
    func isSmartKey() {
        return self.smartKey;
    }
    /////////////////////////////////////////////////
    // isBrake : 종료
    ////////////////////////////////////////////////
}

또다시 극단적인 예이긴 하지만 3번 예시의 코드를 수정해 보았습니다. 관련 코드의 수정은 곧 관련 주석의 수정을 의미합니다. 위의 주석은 차라리 없는게 낫습니다. 주석을 수정할 여유가 없었다면 차라리 주석을 지워버리세요. 그러면 다음 사람은 코드만으로 함수를 이해하려고 노력할 것입니다. 코드가 명확하면 주석이 필요 없다는 말이 있습니다. 물론 그렇긴 하지만 이런저런 일을 하는 모듈일 경우 설명 한 줄 없이 모든 코드가 명확하기란 사실 쉽지 않습니다. 바쁘다보면 코드의 주석은 수정하지 않은 채 코드만 수정하는 일은 사실 굉장히 흔한 일입니다. 그러나 이 작은 실수가 추후 커다란 재앙이 되어 돌아오리라는 것을 ....... 개발자들은 다 알고 있지만 잘 안합니다. -_-ㅋㅋㅋ

따라서 주의해야 합니다.^^



정리

오늘은 흔히 하는 습관적인 실수에 대해서 이야기했습니다. 이러한 사항들은 협업 시에 특히 도드라지는데요. 혼자서 작업할 때는 잘못된 주석도 다 이해하면서 넘어가기 때문입니다. 하지만 한 두 달만 지나면. 자신이 작성해놓은 코드도 타인이 작성해 놓은 코드인것처럼 새록새록했던 기분은 누구나 다 겪어보셨을 것입니다.^^;

이 모든 글은 저 자신에게 하는 말이며, 저 역시 이런 부분이 잘 안되기 때문에 명심하고자 하는 마음에서 작성하는 것입니다.

저 역시 이러한 실수를 자주합니다. 오늘 이런 글을 작성하고, 한 두 시간 후에 또 실수를 하곤 합니다.

하지만 중요한 것은 점점 더 나아지고 있으며, 어제보다 나은 오늘이었고, 내일은 오늘보다 더 좋아질 것이라는 것입니다.

이상 이들러 개발팀이었습니다.^^


쉬운환율계산 : https://goo.gl/YUbPqd

쉬운환율계산무료버젼 : https://goo.gl/FhVBSl

모노리얼 다이어리(무료) : https://goo.gl/Ti93mz

안녕하세요.

이들러입니다.


모노리얼 다이어리의 사용법을 안내드립니다.

모노리얼은 한 장의 사진 위에 자신만을 위한 글을 쓰기 위한 다이어리입니다.

앱주소 : http://goo.gl/Ti93mz


모노리얼은 흐릿한 기억이라는 개념을 흑백이라는 매체를 이용해 표현하고자 하였습니다.

그에 따라 기본으로 표현되는 사진이 흑백인데요.

간단한 탭만으로 사진의 흑백여부를 설정할 수 있습니다.


글쓰기 화면에서 아래의 색상조정 버튼을 탭하면 각종 색상을 조절 할 수 있습니다.

그 중 사진모노 스위치를 켜고 꺼서 사진의 흑백여부를 선택할 수 있습니다.


켜고 끄는대로 사진이 흑백과 오리지널로 변경됩니다.


만일 주로 컬러사진만을 사용하길 원하신다면 설정부분에서 기본값을 변경할 수 있습니다.

메인화면에서 메뉴 버튼을 탭 한 후 설정을 탭하면 설정화면이 나타납니다.


그 중 사진모노 기본값을 켜고 끔으로써 흑백여부를 선택할 수 있습니다.

모노가 켜져있을 경우 흑백으로, 꺼져 있을 경우 원본색상으로 표시됩니다.

사진 모노 기본값을 꺼놓을 경우 새로운 글쓰기 화면에서 사진은 흑백이 아닌 원본색상으로 표시됩니다.

기존에 작성된 글도 수정시 모노값을 켜고 끌 수 있습니다.

흑백으로 저장되어 있던 사진을 컬러로 변경해 보세요.

작성되었던 글이 사진의 색상에 따라 또 다른 의미로 보여지기도 합니다.


모노리얼 다이어리를 이용해 주셔서 감사합니다.

보다나은 개선을 위해 계속 노력하고 있습니다.

의견이 있으실 경우 언제든 아래 이메일로 보내주세요.^^

지속적으로 모노리얼의 관련 내용을 확인하시려면 페이스북 페이지에 좋아요를 부탁드립니다. ^^


이메일 : monorial@eedler.com

페이스북페이지 : https://www.facebook.com/eedler.co


모노리얼 다이어리 앱을 소개합니다 ^^
앱스토어 : http://goo.gl/Ti93mz
모노리얼 다이어리는 자신을 위해 쓰는 하루 한 편의 글이라는 주제로 세상에 나오게 되었습니다.
앱소개

하루 한 편 나를 위한 글을 쓰세요.

누군가에게 보이기 위한 글이 아닌 자신만을 위한 글.


카페에서 우두커니 누군가를 기다릴 때.

지하철에서 사람들의 모습을 바라보면서.

길에서 우연히 하늘을 올려다봤을 때.

잘 쓸 필요도 없고, 거창할 필요도 없습니다.

나만을 위한 것이니까요.


따뜻한 위로의 글도 좋습니다.

칭찬 섞인 격려의 글도 좋습니다.


우리는 조금 더 자신을 위할 필요가 있습니다.

우린 지금까지도 잘해왔으니까요.



우린 너무 바쁘게 지내고 있습니다.

하루에 한 번쯤은 자신을 위한 위로의 글 하나쯤은 괜찮잖아요.^^


모노리얼은 하나의 사진 위에 간단한 글을 쓸 수 있습니다.

마치 한 장의 사진처럼. 하나의 카드뉴스처럼 글을 볼 수 있습니다.

좌, 우로 쓸어넘기시면 앞 뒤의 글 내용을 볼 수 있습니다.


무슨 생각을 하고 계신가요? 글을 작성해 주세요.


새로운 사진을 부를 수도 있고, 포토라이브러리에서 선택할 수도 있습니다.

사진을 없애고 노트처럼 쓸 수도 있습니다.

사진의 위치와 글의 위치는 드래그해서 위아래를 조정할 수 있습니다.

글쓰기 칸의 사각형들을 위아래로, 화살표를 위아래로 조정하면 위치와 크기를 조정할 수 있습니다.


글씨의 크기, 정렬도 조정하구요.


사진의 흑백처리 여부도 선택할 수 있습니다.

글자의 색, 배경, 뒤쪽의 흐릿한 사진의 투명도까지 조정이 가능합니다.


새로고침 버튼은 최초의 레이아웃으로 조정해줍니다.


설정에서는 기본사진의 흑백처리 여부를 선택할 수 있습니다.

나오는 랜덤이미지의 테마도 고를 수 있습니다.

쓴 글은 iCloud에 백업이 가능합니다.


쓴 글은 목록으로 날짜와 함께 보여지는 단순한 구조를 갖고 있습니다.


위쪽의 연도와 월을 클릭해 보세요. 그 해 그 달에 쓴 글을 볼 수 있습니다.

Any를 선택하시며 모든 기간을 볼 수 있습니다.

연도를 Any 월도 Any 를 선택한다면? 당연히 모든 글을 볼 수 있습니다.^^


작성된 글은 이미지로 다운로드가 가능하며, 공유버튼을 이용해 손쉽게 공유가 가능합니다.

공유버튼을 이용해 페이스북, 또는 트위터에 공유하실 경우 일정기간 광고가 사라지는 기능도 넣었습니다.

광고 제거 결제를 하지 않으셔도 광고 없이 사용이 가능합니다.^^



모노리얼은 흐릿한 기억이라는 매개를 흑백으로 표현하고자 했습니다.

모노리얼을 이용해서 하루 한 편 자신을 위한 글을 써보세요.


칭찬의 글이든, 격려의 글이든.

자신에게 이야기 해보세요.


따뜻한 세상이란건 없을지도 모릅니다.

늘 세상은 그대로 입니다.

이제 우리는 세상을 어떻게 바라볼지 선택해야 합니다.

그 시작은 스스로에게 던지는 아주 작은 위로부터 일겁니다.


모노리얼 : http://goo.gl/Ti93mz



안녕하세요.

혼자면서 팀이라고 부르는 개발팀 이들러입니다.^^


1인 체제를 선택하면서 몇 가지의 결심을 했습니다.

그 중 하나는 두 달에 하나씩 신규 앱을 만들어서 출시하자. 라고 하는 계획이었습니다.

그래서 죽이 되든 밥이 되든. 만족하든 만족하지 않든 두 달에 하나씩 앱을 내놓고 있습니다.

2월에 처음 아이폰 개발을 시작해서

4월 : EzCurrency 쉬운환율계산 https://goo.gl/YUbPqd

6월 : JustOneLine 한 줄 메모장 http://goo.gl/q5wpte

7월 : EzCurrency 쉬운환율계산 2.0 업데이트

8월 : EzCurrencyLite 쉬운환율계산 무료버젼 https://appsto.re/kr/Dthleb.i

8월 : Monorial 모노리얼 다이어리 : 일상을 새기다 http://goo.gl/Ti93mz


여기까지 달려왔습니다. 8월의 환율계산기 무료버젼처럼 파생적인거 빼고는 어떻게든 꾸역꾸역 진행하고 있습니다.

지금 보면 맘에 안드는 부분도 있는데요. 언제나 . 완벽보단 완성이 낫다라는 생각으로 일단 진행하고 있습니다.

특히 8월 말부터 심사를 진행했던 모노리얼이 9월1일이 되서야 런칭이 된게 개인적으론 많이 아쉽습니다.


오늘은 모노리얼 다이어리를 만들면서 배웠던 점을 정리하도록 하겠습니다.

얼마 전 앱을 개발할 때 프로그래밍적인 기술 뿐만이 아닌 다른 부가적인 준비사항들을 함께 이야기 했었는데요.

해당 글은 JustOneLine 개발개요에서 작성했었습니다. http://blog.eedler.com/10

이 글에서 기존 글과 내용이 겹치는 부분은 자세히 작성하진 않았습니다.


기존 글과 마찬가지로 누군가에게 알리기 보다는 저 자신을 위한 글이며,

대단한 전문적 기술이라기 보다는 시작하고자 하시는 분들에게 조금이나마 도움이 되길 바라는 마음에서 작성합니다.

앱개발 방법이라기 보다는 모노리얼을 제작할 때 제 생각의 흐름을 적었다고 생각하시면 오히려 맞습니다.


앱소개

모노리얼 다이어리 : 일상을 새기다


앱스토어 : Monorial 모노리얼 다이어리 http://goo.gl/Ti93mz

개요 : 일상을 기록하세요. 자신을 위한 하루 한 편의 글.

기획의도 : 한 장의 사진과 한 줄의 메모를 한 화면에서 보여주는 제품.

비슷한 컨셉이었으나 기존 JustOneLine 을 만들면서 사용자가 제어하는 부분 너무 적다는 느낌이 강했습니다.

앱을 통제하고 있다는 느낌을 받을 수 없는게 문제였습니다.

그래서 제어부분을 붙이고, 무작위적인 작성이 아니라 하루 한 번 자신을 위한 글이라는 컨셉을 강조하기 위해 날짜를 강조하는 형태가 필요했습니다.

그래서 다이어리 형태로 제작하고자 결정하였습니다.


가격 : 무료 (인앱결제로 광고제거 기능을 추가하자)

생각의 과정 :

1. 광고 없는 유료버젼이 어울린다고 생각했지만 JustOneLine의 경험상 유료결제가 약간의 장벽이라고 생각했습니다.

2. 그래서 광고를 붙이고 무료버젼을 해야겠다고 생각했습니다.

3. 하지만 제작자 본인조차 좋아하지 않는 광고를 사용자에게 제공하긴 어려워서 버튼 하나 누르면 광고가 사라지면 어떨까 생각했습니다. 근데 그냥 사라지면 제가 먹고 살기 힘드니까. -_-;;;

4. 글보기 화면에서 공유버튼으로 SNS에 공유를 하면 일정기간 광고가 사라지는 컨셉을 생각했습니다.

5. 광고가 상관없는 유저는 그냥 사용하면 되고, 광고가 싫은 유저는 제 앱을 사용하고 있음을 SNS에 공유함으로써 제 앱을 홍보해주고 일정기간 광고를 안보길 원했습니다.

6. 이러한 방식은 여러 게임에서 이미 사용하고 있었으니 부담은 없었습니다. SNS에 공유하고 혜택 받기 형태는 게임에서 널리 사용하고 있었으니까요.

7. 처음엔 공유 버튼을 눌러서 게시 버튼을 눌렀는지 그냥 창을 닫아버렸는지 체크가 되는지조차 몰랐지만 일단 진행하기로 결정하였습니다.



작업 정리


실제로 앱개발을 진행하다보면 프로그래밍이 그렇게 큰 부분이 아니라는걸 깨닫게 됩니다.

아주 중요하지만 전부는 아니죠. 그래서 다른 많은 부분들에 세세한 신경을 써야하며, 다른 외부자원을 많이 활용해야 합니다.

물론 전 겁나 돈 많이 벌고 겁나게 잘 나가는 프로개발자가 전혀 아닙니다.

그래서 이런 말씀을 드릴 만한 자격이 되는진 모르겠지만

앱을 기획 하실 때 앱의 기술, 기능만을 기획하는게 아니라. 출시를 어떻게 할지, 홍보를 어떻게 할지 같이 고려하시길 바랍니다.

물론 저도 여전히 그 부분을 잘하지 못해서. 지금도 배우고 있는 단계입니다. 아주 혹독하게... ^^;;


1. 할일관리

2. 소스관리

3. 사진이미지

4. 광고붙이기

5. 분석도구

6. 소개글 작성

7. 인앱결제

8. 홍보

참고. 언어는 Swift, 개발환경은 Xcode로 진행 했지만 특별한 사항이 없어서 제외했습니다.



1. 할일관리 트렐로 https://trello.com/

어떤 작업을 하시더라도 할일관리는 필요합니다. 10년 전쯤 처음 업무라는걸 하기 시작하면서 여러가지 도구를 거쳐왔는데요.

메모장, 포스트잇, 엑셀, 스케줄러프로그램 등 그 중에서 단연 제 맘에 들었던 도구는 역시나! ..... 노트였습니다... 연습장 -_-;

최근 몇 년 사이에는 일하는 공간이 여기저기 바뀌면서 노트로는 좀 힘들어서 프로그램적인 도구를 찾아야했습니다.

그 때 여성 게임개발자인 저의 콤푸타 스승님의 추천으로 트렐로를 알게 되었습니다.

할일관리는 여전히 트렐로입니다. 도구는 한 번 정하면 바꾸기 힘드므로, 여전히 전 트렐로를 사용하고 있습니다.

포스트잇처럼 이리저리 왔다갔다 할 수 있어서 편리합니다.

개인적 취향차이겠지만. 좀 더 할일관리 태스크관리 느낌을 받고 싶으시다면 분더리스트(https://www.wunderlist.com/)도 추천합니다.


혼자 하면서 칸반 같은 개발방법론을 도입. 이라고 하기엔 너무 거창합니다. 그냥 개발방법론 까지는 아니지만 전 현재 할 일을 최대 세 개까지만 놓습니다.

여러 경험으로 전 제가 엄청 뛰어난 업무능력자가 아니라는 것은 알고 있습니다.

살펴보니 동시 할일이 세 개를 초과하면 일의 진척이 오히려 느려진다는 것을 알게 되었습니다.

그래서 일이 겹칠 경우 기존 일을 예정목록으로 돌리든, 마무리를 해서 완료목록으로 넘기든 해서 항상 하고 있는 일은 세 개 이하로 유지하고 있습니다.

트렐로는 이러한 점에서 현재 할 일의 갯수가 명확하게 눈에 들어와서 즐겨사용하고 있습니다.



2. 소스관리 https://bitbucket.org/ https://www.sourcetreeapp.com/

 

프로그램을 만들다 보면 중간중간에 저장할 일이 있고, 다른 사람들과 협업을 해야할 경우도 있습니다.

이럴 경우 단순 컨트롤S 만으로는 힘듭니다. 진행하다 뭔가 변경사항이 있을 경우. 우리에겐 컨트롤Z가 있지만. 3일 전 상태의 코드로 컨트롤Z를 할 수는 없습니다.

소스관리 시스템은 그 때 그 때의 상황별 코드와 코멘트를 남길 수 있으며, 다른 사람들과 협업을 하며 하나의 통일된 코드를 유지하고자 할 때 좋습니다.

실무에서는 프로덕트 코드가 존재하고 브랜치 등으로 분류를 따로 만들어서 작업 후 완료되면 프로덕트 쪽에 합치는 방식도 사용합니다.

단순하게 프로덕트코드는 언제나 돌아가는 코드여야 하는 원칙이 있게 되는거죠. 팀의 성격에 따라서 사용방식은 천차만별이지만 사용하시길 추천드립니다.

전 Git을 사용합니다. 어떤 걸 사용하더라도 개발을 들어가기 전에 한 번 알아보시기 바랍니다.

JustOneLine 의 글에서도 언급했지만 제 호스팅서비스는 여전히 비트버킷입니다. 프로그램은 소스트리를 여전히 사용하고 있습니다. 왜 그런지는 모르겠지만 전 이게 좋습니다. ^^



3. 사진이미지 https://unsplash.com/


프로그램에 사용할 때 무료인 사진을 찾는 일은 생각보다 어렵습니다.

모노리얼에서는 늘 새로운 배경화면이 나왔으면 좋겠다고 생각했고, 무료로 사용할 수 있는 이미지여야 좋았습니다.

물론 당연하게도 그 사진은 이뻐야죠. 인터넷에 찾아보면 몇 개의 무료로 사용할 수 있는 라이센스를 갖고 있는 이미지사이트들이 있습니다.


앱을 개발하시기 전에 사용할 자원이 사용해도 되는 것인지 확인하시기 바랍니다.

가장 좋은건 역시나 정당한 대가를 지불하고 사용하는 것입니다.

그림, 사진 이미지 뿐 아니라, 버튼이미지, 폰트 등도 라이센스를 꼭 확인하시기 바랍니다.



4. 광고붙이기 https://apps.admob.com/

기존 유료앱을 만들 때는 생각하지 않았기 때문에 얼마전 처음으로 앱에 광고를 부착했습니다. 예전에는 애플에서 iAd라는 서비스를 했었는데 이제 더이상 지원하지 않아서

다른 회사의 광고플랫폼을 부착할 필요가 있었습니다. 그래서 선택한건 제일 큰 회사꺼 쓰자는 생각에. 구글의 애드몹을 선택했습니다.


만드시고자 하는 앱이 무료앱이라면 광고 부착을 많이 생각하실텐데요.

전 애드몹을 선택했지만 광고플랫폼 회사가 애드몹만 있는 것은 아닙니다. 다른 몇 개의 회사에서 지원하는 광고플랫폼을 잘 비교해보고 추가하시기 바랍니다.



5. 분석도구 https://console.firebase.google.com/

제가 선택한 툴은 파이어베이스입니다. 구글애널리틱스가 있는데. 향후에 구글이 파이어베이스라고 하는 서비스로 모든 것을 대동단결? 할 것이라는 소식을 저의 조언자께서 해주셔서 파이어베이스로 붙였습니다.


사용자분석은 이젠 그리 특이한 개념이 아닙니다.

실제로 자신의 앱이 어떤 사람이 어디에서 어떤 버튼을 누르며, 하루 몇 시간을 사용하는지 분석하는 일은 당연한 수순이 되고 있습니다.

전에는 저도 급한 맘에 자세히 알아보지 않고 분석도구를 추가하지 않았는데요. 앱에 관한 사용자분석은 반드시 해야하는 부분이라고 생각합니다.

물론 전 기존에 일단 출시하고 사용률이 좀 올라가면 부착할 생각이었지만. 이번에 경험해보니 처음부터 부착하더라도 부담없는 작업으로 되어 있습니다.

기획단계에서 이러한 서비스들도 함께 고려해 보시기 바랍니다.



6. 소개글 작성

소개글 작성은 영어와 한글이 있습니다.

전 영어를 유창하게 잘하는 편이 아닙니다. 그래서 상품설명의 문구를 작성하더라도 글을 감흥이 느껴지게는 작성할 수 없습니다.

그래서 애초에 영어는 감성이 없는 설명식으로, 한국어는 좀 감성적으로 작성하였습니다.

소개글은 아직도 수정 중인데요. 계속 변화를 줄 생각입니다. 사용자 입장에서 스토리와 기능을 적절하게 섞는 설명은 여전히 저에겐 너무 어렵습니다.

이번엔 영어 번역은 집단번역 서비스 플리토(https://www.flitto.com/)를 이용하지 않고, 근처 지인에게 간단한 검수만 받았습니다.

앱등록시 스크린샷은 전처럼 https://launchkit.io/ 서비스를 이용했습니다.


최근 앱스토어 관리 웹사이트 아이튠즈커넥트(https://itunesconnect.apple.com/)  의 변경으로 모든 사이즈를 다 업로드할 필요 없이.

5.5인치 하나만 업로드 해도 앱에서 크기별로 특별한 레이아웃의 차이만 없다면 심사가 가능하며, 각 디바이스별로 알아서 보여집니다.

그래서 5.5인치 디바이스용 하나만 업로드 한 후 전체 크기별 디바이스에 적용하였습니다.



7. 인앱결제

모노리얼 앱스토어에는 인앱결제 마크가 있는데 실제로 인앱결제는 없습니다.

광고제거 기능을 추가 했었는데 8월달이 지나는 것이 싫어서 일단 출시하자는 생각에 광고제거 인앱결제를 빼고 출시했습니다.

언제나 완벽보다 완성이 낫다는 생각에 -_-; 기능은 추후에 업데이트 하면 되는 것이니까요.

인앱결제 때문에 같은 사유로 몇 번이나 리젝을 당했기 때문이었습니다. 전 당황했습니다. 전 아무리 해도 잘 됐거든요 -_-;

나중에 확인해보니 제 핸드폰은 터치ID가 없는데 터치ID 기능이 있는 경우 비밀번호를 입력하려고 하다가 취소를 하면(?) 뭐... 여하튼 그런 과정을 하면 제대로 작동 안하는 오류가 있다는 것을 알게 되었습니다. 아직 고치진 못했죠.... -_-; .  그래도 앱의 사용에는 문제가 없어서 일단 인앱결제는 빼고 출시했습니다.


많은 앱들이 광고제거를 위해 인앱결제를 붙이고 있지만 유료, 무료버젼을 따로 만드는 경우도 있습니다.

컨텐츠가 쌓이는 경우에는 유료를 구매했을 때 쌓였던 컨텐츠에 대한 고민 때문에 인앱결제가 유용합니다.

그러나 환율계산기처럼 자료가 쌓이는 형태가 아니라면 선택은 오롯하게 팀의 결정이겠지요.

앱을 만드실 때 결제부분을 어떻게 하실 지도 같이 고민하시기 바랍니다.

저 같은 경우 막연하게 인앱결제로 해야지 라고 생각했다가 생각보다 긴 시간을 이 곳에 썼습니다.

차라리 처음부터 인앱결제는 없이 출시하고 추후에 붙였더라면 출시시기가 훨씬 당겨졌을 것입니다.



8. 홍보 - 아직 모르겠음.

마케팅은 정말 어렵습니다. 어떻게 알려야할지 제 앱의 포지션을 어떻게 잡아야할지는 정말 어려운 부분입니다.

앱 소개에 기능만을 쭈욱 나열한 순수히 개발자적인 소개글을 보고

마케터로서 조언해주시는 분은 '사람은 제품을 그렇게 선택하지 않는다'는 것이었습니다.

명확한 상황과 포지션을 고민해보라고 합니다. 그래서 지금 고민 중입니다.




마무리


이번 글에는 프로그래밍적인... 코드를 어떻게 작성해야지 하는 부분은 언급하지 않았습니다.

그것까지 쓰면 내용이 너무 많이질꺼 같아서 ^^;

앱의 화면에 버튼을 어떻게 만들고 탭 했을 때 어떻게 보여질지 같은건. 그런건 구글에서 하나 하나 찾아보셔도 되는데.

전체적인 흐름을 언급한 글은 별로 없길래 한 번 작성해봤습니다.


전문가분들에겐 별거 아닐 수도 있겠지만,

첫 시작에 어떤거부터 해야하지 고민하시는 분들에게는 전체적인 흐름이 이렇다는 것을 말씀 드리면 도움이 될꺼 같았습니다.

이러한 도구나 플랫폼의 구성, 선택? 같은 것들은 오롯이 팀의 결정입니다.

취할게 있으면 취하고, 버릴게 있으면 버리면 됩니다.

다만 취할 수도 있었는데, 생각 못해서 고려대상에서 제외되지 않길 바라는 마음에서 이렇게 정리해보았습니다.

긴 글 읽어주셔서 감사합니다. ^^


참고글 JustOneLine 개발개요 http://blog.eedler.com/10


모노리얼 : 일상을 새기다 http://goo.gl/Ti93mz 

하루 한 편 당신만을 위한 글을 써보세요.^^

+ Recent posts