알짜배기 예제로 배우는 iOS 프로그래밍

2017-11-30 / 유용호 저


무슨 책인가.

 제목은 '알짜배기 예제로 배우는 iOS 프로그래밍' 책이다. 앱을 개발하고자 하는 시작 단계의 사람들을 위한 흐름 소개서다. 개발 내용을 가장 많이 다루고 있지만, 책의 전체 내용은 앱 출시과정을 위해 어떠한 일을 해야하는지 다룬다. 예제를 통해 앱 개발의 전반적인 내용을 다루며, 무엇을 학습하고, 무엇을 준비해야하는지 알려준다. iOS 앱의 출시만을 목표로 다른 것은 염두에 두지 않는다. 프로그래밍 기초적인 내용도 출시와 상관 없다면 뺐다. 차라리 출시과정을 한 번 간접체험하고 다른 책, 웹사이트, 강좌 등을 이용해 보다 구체적인 학습의 단계로 넘어가는 것이 좋다고 생각했다. 그래서 두께가 두꺼워지지 않도록 신경썼다. 두꺼우면 끝까지 보지 않으니까. 이 책에 나온 각 내용을 상세히 다룬다면 지금의 몇 배의 두께를 감당해야 할 것이고, 그것은 초심자를 위한 것이 아니라고 생각했다. 무쪼록 내가 앱을 만들어왔던 이 발자취가 누군가의 막연함을 덜어주는데 조금이나마 도움이 됐으면 한다.


누구를 위한 것인가.

 철저하게 초심자를 위한 책이다. 최대한 초심자를 위해 쓰려고 노력했다. 전문가가 보기엔 오히려 이상한 부분도 있을 것이다. 설명을 최대한 간략히 하려고 노력했기 때문이다. 사실 앱 제작을 위한 입문서가 할 일은 특정 부분을 상세히 알려주는 것보단, 전체적인 흐름을 체험하고, 무엇을 더 학습해야 하는지 알려주는 것에 있다고 나는 믿는다. 처음 앱을 개발해서 출시하고자 하면 막연하고 답답한 마음이 있다. 나역시 처음 너무도 막막했기에 그 기분을 잘 알고, 다른 누군가가 나와 똑같은 느낌을 느끼는게 싫었다. 초심자와 전문가는 사실 막막함의 차이가 가장 크다. 전문가도 특정 분야에 대해 무엇이든 다 알진 못한다. 다만 전문가들은 그들 스스로 길을 찾아갈 줄 알며, 무엇을 더 익혀야 하는지 알기 때문에, 방향을 고민하진 않는다. 전문가는 자신이 무엇이 부족한지 알고 있고, 그 부족함을 어떻게 채워야 하는지도 알고 있다. 자신이 알고 있는 길을 그냥 걸어가면 되는 것이다. 초심자는 다르다. 자신이 무엇을 모르는지 조차 모른다. 초심자 강의에서 모르는 것을 물어보라고 하면 대부분은 질문이 없다. 이는 초심자가 모르는게 없어서가 아니라, 무엇을 물어봐야하는지 조차 모르기 때문이다. 이 책이 초심자들 스스로 무엇을 모르는지 깨닫는데 조금이나마 도움이 되길 바란다.

무엇이 들어있는가.

 나의 입장에서 이 책은 누군가를 위한 학습서라기 보다는 나의 족적을 돌아볼 수 있는 일기장에 가까운 느낌이다. 이 책에 있는 내용들은 내가 실제 앱을 만들며 겪었던 과정을 그대로 담고 있다. 우선은 앱을 기획하기 위한 도구들을 설명한다. 이러한 도구들은 실제로 내가 앱을 제작하며 사용했던 도구들이다. 생각을 정리하고, 방향을 설정하고, 무엇보다 중요한 것은 어디까지만 구현할지 정하는 것이다. 이 책은 각 챕터별 설명을 위한 앱을 따로 제작하지 않았다. 내가 갖고싶은 앱을 만들고, 그 앱의 제작기를 제공하는 형태다. 그 과정에서 내가 도움을 받았던 도구들과 작성했던 코드들을 거의 그대로 넣었다. 쓰일지 말지 모르는 개념을 넣어서 책을 두껍게 만들기보다는 딱 내가 사용한 개념만을 넣으려고 노력했다. 앱 출시의 간접경험을 제공하고자 하는 목적이었기에 외주에 대한 소개도 넣었다. 모든 걸 혼자할 수는 없기 때문이다. 돈 많으면 다 해결되겠지만, 내가 돈이 없었으므로, 돈 많이 드는 프로그래밍 개발 부분이 주된 내용이다. 출시를 위해 준비해야하는 다른 주변 상황들과 앞으로 무엇을 더 학습해야 하는지도 넣었다.

어떻게 보아야 하는가.

 책에 소개된 내용을 한 번 보고나서, 자신만의 앱을 만든다. 글자도 넣어보고, 입력 칸도 넣어보며, 책이 안내한 모양과는 다른 자신만의 앱을 이리저리 만들길 추천한다. 심화단계의 앱은 앱스토어에 올려져 있다. 어차피 무료이니 다운로드 받아서 이것저것 눌러보면 좋다. 그 기능을 어떻게 코드로 타이핑했는지 알려고 하기 보다는, 이러한 형태가 있구나, 정도의 느낌만 알면된다. 추후 비슷한 기능이 필요할 때 그 부분을 찾아서 그대로 타이핑 치거나, 소스코드를 다운받아 참고해도 된다. 시간 상 하나하나 상세히 살펴보기 힘들다면, 소설책처럼 눈으로 쭈욱 읽어나가기만 해도 된다. 소스코드도 넓게보면 하나의 패턴이므로, 우선은 그러한 패턴에 익숙해지길 바란다. 소스코드 뿐만이 아닌 앱 기획, 디자인, 관리 웹사이트 등에 대한 정보를 어떤 방향으로 접근해야하는지의 시각으로 봐주길 바란다. 어떤 분야든 책 한, 두 권 보고 전문가 수준으로 올라가는 분야는 없다. 내가 이 책으로 이루고자 하는건 간단하다. 이 책을 보고 누군가가 이제 자신의 다음 책, 다음 강좌, 또는 다음 질문을 깨닫게 된다면, 나는 그것으로 만족하려 한다.


알라딘: 바로가기

예스24: 바로가기

교보문고: 바로가기

안녕하세요.

오늘은 아이폰 일기장 어플 모노리얼 다이어리 사용법을 설명드리겠습니다.

감성적인 일기장 어플을 찾으신다면 모노리얼 다이어리를 추천합니다.^^


간단 소개.

이름 : 모노리얼 다이어리

취지 : 하루 한 편, 나만을 위한 글쓰기를 해보세요.

iOS 앱스토어 : https://goo.gl/Ti93mz


모노리얼 다이어리는 기억을 흑과 백 이라는 색상을 가지고 표현하고 싶어서 시작된 일기장 어플입니다.

하루 한 편 나만을 위한 글쓰기를 해보자라는 시작이었습니다.

한 장의 사진 위에 자신의 생각을 간단하게 적는 방식으로 글을 작성합니다.

기본적으로 모노리얼 다이어리의 배경색은 전자책 배경색 기반의 부드러움을 제공합니다.

글자색 역시 전자책의 색상을 사용해서 최대한 눈에 피로감을 없애고자 하였습니다.


스크린샷은 캡춰를 위해 실행한 데모프로그램이라 영문이지만, 실제 일기장 어플은 한글을 지원합니다.

설명은 한글 메뉴를 기준으로 설명드리겠습니다.^^


■ 목록보기 : 목록은 위에 선택된 월을 기준으로 표시됩니다.


특징은 Any라는 선택이 있어서 Any를 선택할 경우 해당 부분에 대해서는 모두 표시됩니다.

연도 선택부분을 Any라고 선택하고 월 선택부분을 Oct 라고 선택할 경우.

모든 연도에 10월에 작성된 글들을 모아서 볼 수 있습니다.



연도 선택부분을 2016 이라고 선택하고 월 선택부분을 Any 라고 선택할 경우.

2016년에 작성된 모든 글들을 모아서 볼 수도 있습니다.




연도 선택부분을 Any, 월 선택부분도 Any 라고 선택할 경우 모든 글들을 볼 수 있습니다.

목록에서 날짜부분의 하얀색 동그라미는 '오늘'을 나타냅니다.


■ 글쓰기 : 목록화면에서 오른쪽 아래쪽의 연필 모양을 탭하면 글쓰기가 시작됩니다.


0. 글쓰기

무슨 생각을 하고 있나요?

부분을 탭하시면 글을 작성할 수 있습니다.^^

작성 후 완료를 클릭하시면 기타 다른 효과나 레이아웃을 편집할 수 있으며, 바로 오른쪽 상단의 연필 모양을 클릭하시면 바로 글쓰기가 되기도 합니다.


1. 날짜 변경

위쪽의 날짜 버튼을 클릭하면 다른 날짜의 글을 작성할 수 있습니다.


다른 일기장 어플과 다르게 모노리얼 다이어리 일기장 어플은 미래의 날짜를 선택할 수 있습니다.

미래의 꿈을 명확히 꾸고자 하는 제작자 본인이 쓰려고 만든 일기장 어플답게 미래의 일기를 작성할 수 있습니다.

저는 미래에 제가 이루고 싶은 날짜에 원하는 꿈을 적곤 합니다. 그 날 일기에는 . 저의 꿈이 이미 이루어진 것처럼 적기도 합니다.


2. 사진 변경하기 : 하단의 사진모양 아이콘을 클릭하면 사진관련 메뉴가 표시됩니다.


사진은 자신의 사진을 넣을 수도 있고,

랜덤 이미지를 새롭게 불러올 수도 있습니다.

사진없이 그냥 흰바탕에 글을 쓸 수도 있습니다.


3. 글자형태 변경하기: 하단의 문서모양 아이콘을 클릭하면 글자형태관련 메뉴가 표시됩니다.


폰트의 사이즈와 정렬 방식을 선택할 수 있습니다.


4. 색상 조정하기 : 하단의 색상조정 아이콘을 클릭하시면 관련 메뉴가 표시됩니다.


처음엔 사진도 무조건 흑백으로만 볼 수 있었으나, 제작과정에서 원본색상도 선택할 수 있도록 변경되었습니다.
폰트의 색상도 설정가능하며,
글자 뒤의 검은색 바탕의 투명도를 설정할 수 있습니다.
사진을 배경으로 넣게 되면 사진 뒤쪽의 흰바탕에는 사진의 흐릿한 이미지가 배경으로 표시됩니다. 이 항목의 투명도도 선택 가능합니다.

5. 위치 이동하기 : 사진을 드래그 하거나, 텍스트 칸의 아이콘을 드래그 할 경우 위치를 조정할 수 있습니다.


사진의 위치에 따라 글자의 위치도 변경해보세요. 또다른 느낌의 글이 됩니다.

하단의 리셋버튼을 클릭하면 초기 레이아웃으로 변경됩니다.


■ 내용보기 : 목록 화면 중 보고 싶은 내용을 탭하시면 글 내용을 볼 수 있습니다.


왼쪽, 오른쪽으로 스와이프 하면 이전 글과 다음 글이 표시됩니다.

새로운 글이 표시된 후에 위쪽에 잠시동안 그 날의 날짜가 표시됩니다.


내용보기 화면에서 화면을 탭할 경우 메뉴가 표시됩니다.


0. 공유하기 - 하단의 공유하기 버튼으로 해당 이미지를 다른 프로그램으로 공유할 수 있습니다.

페이스북이나, 트위터에 내용을 공유해보세요. 광고가 일정기간 사라지는 효과도 있습니다.

1. 다운로드 - 버튼 클릭시 한 장의 사진처럼 해당 화면이 캡춰되어 사진갤러리에 저장됩니다.


■ 삭제하기 : 목록화면에서 삭제하고자하는 글을 왼쪽으로 스와이프 하실 경우 해당 글을 삭제할 수 있습니다.

삭제하신 글은 백업해놓지 않은 이상은 다시 살릴 수 없습니다. 꼭 주의해서 삭제하시기 바랍니다^^


■ 설정하기 : 목록화면에서 왼쪽 상단의 메뉴 버튼을 클릭하게 되면 설정 메뉴가 보입니다.


설정하기는 앱을 사용할 때의 이런저런 환경을 설정할 수 있습니다.^^



0. 잠금 - 해당 앱은 다이어리 앱입니다. 누군가가 보면 부끄럽겠죠? ^^;

잠금 기능을 켜면 비밀번호를 설정하고 잠금 기능이 설정됩니다. 터치ID가 가능한 기기일 경우 손가락 모양의 버튼이 생깁니다. 버튼 클릭시 인증시 터치ID도 사용이 가능합니다.

비밀번호를 잊게 되면 다시는 재설정할 수 없습니다. 비밀번호는 꼭 잘 기억해주세요.^^


1. 사진 모노 기본값 - 처음 글쓰기를 켤 때 사진이 흑백이 처리될지 선택여부입니다. 기본값은 모노리얼 이름대로 켜져있습니다.

끌 경우 처음 글쓰기에 나오는 사진이 원본색상으로 표시됩니다.


2. 테마 - 글쓰기에 기본 표시되는 사진은 수만장의 사진 중 랜덤하게 표시됩니다. 특정 테마를 원하신다면 선택하면 해당 테마에 걸맞는 사진 위주로 표시됩니다.


3. 알림 - 하루 한 번 글쓰기를 도와주도록 알림을 설정할 경우 해당 시간이 되면 알림이 울립니다. 저는 매일밤 10시 반이면 모노리얼이 울립니다.


4. 백업 - 요즘은 기기를 변경하더라도 아이폰전체백업을 했다가 그대로 복원하면 되므로, 기기를 변경한다해도 딱히 데이터가 날아가는 일은 없는데요.

혹시라도 모를 백업 기능합니다. 간혹 비밀번호를 잊으셨다면, 백업 후에 일기장 어플을 지우셨다가 다시 설치하고 복원하셔야 합니다.



여기까지 일기장 어플 모노리얼 다이어리 사용법을 소개해드렸습니다.

모노리얼은 애초에 글쓰기를 좋아하는 제작자 본인을 위해 제작하였습니다. 보다 글 자체에 집중하고, 글의 느낌을 더 잘 전달하기 위헤 노력하였습니다.

글쓰기 자체에 집중하기 위해 과도한 화려함은 오히려 피했습니다. 화려한 글자색, 배경색은 제외했습니다. 이러한 컨셉이 글자 색상이 흰색과 검은색의 중간 단계에서만 선택하게 된 이유이기도 합니다. 여러분들도 보여지는 화려함보다 글쓰기 그 자체에 집중해보시기 바랍니다.

최근에는 사용자분들이 다양한 요청사항을 주셔서 이런저런 사항들에 대한 업데이트를 고려 중입니다.

리뷰를 남겨주신다면, 저희에겐 커다란 힘이 됩니다.^^

일기장 어플 추천하실 때는 모노리얼 다이어리를 기억해주세요.^^

아래 주소로 메일을 주시면 언제라도 적극 검토하여 최대한 개선하도록 노력하겠습니다.^^


앞으로도 계속적으로 개선해서 다양한 분들의 '하루 한 편, 나만을 위한 글쓰기' 를 돕도록 하겠습니다.

감사합니다.^^


모노리얼 다이어리 Monorial Diary

앱스토어 : https://goo.gl/Ti93mz


홈페이지 : http://eedler.com/

이메일 : monorial@eedler.com

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

안녕하세요.

이들러입니다.

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

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

쉬운환율계산 : 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


안녕하세요.
1인 개발팀 이들러입니다.

회사를 그만두고 하고 싶은 일을 하려고 덤빈지 이제 반년쯤 되었습니다.

최근 세번째 제품이 출시되었습니다.

오늘은 앱 개발 작업하면서 썼던 도구들을 정리하도록 하겠습니다.

지난 번 앱에 썼던 도구들을 그대로 사용한 것도 있는데요.

일단은 전체적으로 나열하도록 하겠습니다.


앱개발을 준비하시는 분들께 조금이나마 도움이 되셨으면 좋겠습니다.


제품명 : 모노리얼 다이어리

주제 : 하루 한 편 자신만을 위한 글을 쓰세요.

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


!출시배경!

제가 글쓰기를 좋아하고, 최근 이런저런 글쓰기를 하면서

하루 한 편 자신을 위한 습작노트 같은 다이어리앱이 필요했습니다.

사진 위에 글을 쓰는 개념으로 카드뉴스 형식의 한장 짜리 글을 손쉽게 작성하길 원했습니다.
그래서 랜덤하게 이미지를 제공하고 그 이미지 위에 글씨를 쓰는 형태를 생각했습니다.
물론 포토라이브러리에서 자신의 사진도 직접 올릴 수 있어야 한다고 생각했습니다.
화면은 전체화면이 하나의 사진처럼 보이길 원했습니다.
그래야 배경화면 등으로도 사용할 수 있으니까요.
사진은 글쓰기의 배경컨셉이라서 정밀하게는 조정될 필요는 없었으나,
위치 또는 모노리얼의 컨셉에 맞게 흑백처리를 할 수 있어야 한다고 생각했습니다.


오늘 제가 언급할 내용들입니다.
이 내용들은 제가 모노리얼 다이어리를 제작하면서 실제로 사용했던 자원 및 서비스들의 목록입니다.

00. 컴퓨터
01. 개발IDE, 언어

02. 관련클래스

03. 할일관리 도구

04. 소스관리

05. 이미지 서비스

06. 분석도구

07. 광고

08. 아이콘 제작

09. 스크린샷 제작

10. 소개글 작성



!컴퓨터!
2011년도에 구매한 맥북에어를 이용했습니다.
11인치 모니터, i5 1.6GHz, RAM 4G, 126SDD 구성입니다.
화면이 좀 작긴 했지만 앱 자체가 화면이 많은 고사양앱이 아니라서 작업시 그렇게 불편하진 않았습니다.
다만 아이패드 등의 시뮬레이터 등을 돌릴 때 클릭 한 번씩이 좀 오래 기다려야 하는 불편함이 있었습니다.
아이패드 시뮬레이터는 스크린샷을 찍을 때와 테스트 때만 조금 돌렸기 때문에 많이 불편하진 않았습니다.


!개발IDE, 언어!

Xcode를 이용했습니다.

Xcode는 사용할 수록 좋다는 생각이 듭니다. 각종 안내도 잘 되어 있고, 훌륭한 기능에 의외로 빠릅니다.
언어는  Swift 를 이용했으며,  iOS 8.0 이상 사용자가 사용할 수 있도록 제작하였습니다.
데이터가 쌓이는 형태라 데이터베이스가 필요했는데요. CoreData 를 이용했습니다.
iOS의 앱을 개발하기 위해서는 언어로는 오브젝트C 또는 Swift를 이용해야 하는데요.
애플이 앞으로 Swift 로 나간다고 해서 언어는 초기 진입시에  Swift 로 정했습니다.


!관련클래스!

앱을 제작하며 다뤘던 객체들입니다.

전체는 아니지만 직접적으로 손으로 타이핑을 쳐야하는 부분 중점적으로 나열하였습니다.

00. UILabel : 화면에 글자를 표시할 때 사용합니다.

01. UIButton : 화면에 버튼을 배치합니다.

02. UIImageView, UIImage : 화면에 이미지를 표시할 때 사용합니다.

03. UIViewController : 하나의 화면 틀에 사용됩니다.

04. UITableView: 여러 개의 내용을 목록형태로 표시할 때 사용합니다.

05. UITableViewCell : UITableView에서 한 칸에서의 내용을 정합니다.

06 UIPickerView: 여러 개의 목록 중 값을 선택할 때 사용됩니다.

07. GADBannerView : Admob 배너광고를 표시할 때 사용됩니다.

08. GADInterstitial : Admob 전면광고를 표시할 때 사용됩니다.

09. UIActivityIndicatorView : 처리중 사용자에게 기다리라는 의미로 사용됩니다.

10. UIImagePickerController : 사진라이브러리에서 사진을 선택할 때 사용됩니다.

11. UISearchBarDelegate : 검색창을 구성할 때 사용됩니다.

12. SKPaymentTransaction : 인앱결제를 구성할 때 사용됩니다.

13. SKProductsRequest : 인앱결제 목록을 가져올 때 사용됩니다.

14. NSUserDefaults : 각종 사용자 설정값을 저장할 때 사용됩니다.

15. NSManagedObjectContext : 코어데이터 다량의 데이터를 구조적으로 저장할 때 사용됩니다.

저는 처음 시작시에 어떤 기능을 붙여야할 경우 어떤 오브젝트를 써야할지 몰라서 고민했던 기억이 있습니다.

여러 다양한 책들과 구글의 도움을 많이 받았는데요. 여러 다양한 예제들을 많이 봐두시면 도움이 될듯합니다.


!할일관리 도구!

스케쥴을 관리할 할일관리 도구가 필요했습니다. 트렐로 서비스를 이용했습니다.

https://trello.com

이 서비스를 이용하는 첫번째 이유는 무엇보다! 무료 -_-;

유료버젼도 있으나, 무료만 사용하더라도 간단한 하나의 프로젝트 관리는 충분히 가능합니다.

해야할일, 하고있는일, 완료된일, 배운점 등으로 보드를 나눠서 사용했는데요.

칸반형태로 일을 진행하시고자 하시는 분들에게는 익숙한 패턴입니다.



!소스관리!

Git(https://git-scm.com/)을 이용했습니다. 호스팅서비스로는 https://bitbucket.org/ 을 이용했습니다.


Git은 브랜치 등으로 프로젝트를 다른 방면으로 작업 후에 합치거나 할 때 유용합니다.

물론 저희는 혼자서 작업하는게 대부분이라 코드의 병합 문제 등이 거의 발생하지 않았으나,

코드가 어느 시점에서 어떤 상태였는지 확인하는 것은 추후 유지관리 부분에서 굉장히 중요하므로,

소스관리 시스템을 꼭 사용하시기 바랍니다.



!이미지 서비스!

글쓰기 화면에서 보여질 랜덤한 이미지가 필요했습니다.

다양한 디바이스 크기에 맞춰질 고퀄리티의 이미지가 필요했습니다.

물론 라이센스에서도 문제가 없어야 했습니다.

https://unsplash.com/ 서비스를 이용했습니다. API 신청시 시간당 5000콜 커버가 가능합니다.

API에서는 랜덤한 이미지를 임의의 크기로 제공하는 서비스를 제공합니다.

저희 같은 가난한 팀에게는 신의 은총 같은 서비스입니다. +______+



!분석도구!

Firebase(https://firebase.google.com/)를 이용했습니다.

분석도구는 앱의 사용주기를 확인하기 위해서 필요했습니다. 유료앱이 아닌 무료앱이기에

구매로 이벤트가 끝나는 것이 아니라, 사용자가 앱을 오랫동안 사용할 수 있는 방식을 계속 고민해야 했습니다.

그러다보니 첫번째는 어느 지역의 누가 어떤 버튼을 얼마나 누르는지 알고 싶은게 제 마음이었습니다.

그래서 분석툴이 필요했는데요. 그런 과정에서 Firebase를 선택하게 되었습니다.

서비스는 앱을 생성 후 필요한 파일을 다운로드 후에 작업프로젝트에 추가해주는 방식이었습니다.

저도 처음해봐서 약간 헷갈리는 부분이 있어서 추후에 다시 정리할 생각입니다.



!광고!

애드몹(https://apps.admob.com/)입니다. 구글의 광고플랫폼을 이용하기로 했습니다.

Firebase 설치시 Admob이 포함되어 있어서 함께 설치하였습니다.

뷰를 추가하고 해당 뷰에 광고를 넣어주는 함수를 실행하는 형태였습니다.

광고는 사용자가 사용중 광고를 클릭하면 클릭당 금액이 적립되도록 되어 있습니다.

이러한 광고로 얼마만큼 효용이 있는지는 아직 미지수지만 일단 지켜볼 생각입니다.

애드몹은 스크린샷이 없습니다. 홈화면에 무조건 제 수익 등이 보여서 부끄럽더라구여 >,.<;;

많았으면 자랑삼아 올렸을텐데.. 초라한 성적에 -_-ㅋㅋ



!아이콘 제작!

아이콘 제작은 1024x1024 크기의 png 파일 하나가 필요합니다.

해당 파일로 나머지 다른 아이콘 크기는 리사이즈 해주는 툴(App Icon Resizer)로 리사이즈 하면 되었습니다.

우선은 포토샵으로 1024x1024 크기의 아이콘을 제작한 후 App Icon Resizer 로 각 디바이스에 맞는 아이콘 크기로 리사이징 했습니다.

App Icon Resizer는 1024x1024 크기의 png 파일을 드래그앤드롭으로 프로그램에 넣으면 폴더를 지정하게 됩니다.

폴더를 선택하면 각각 디바이스의 요구사항에 맞는 크기로 리사이징을 해줍니다.

리사이징 된 각각의 아이콘을 Xcode상에서 아이콘에 배치해주면 됩니다.



!스크린샷 제작!

런치킷(https://launchkit.io/) 서비스를 이용하시면 보다 편리하게 스크린샷을 만드실 수 있습니다.

최근에는 단순 디바이스에서의 캡춰화면이 아닌 디바이스틀도 보이고 화면 위아래에 글자를 넣는 형태가 일반적인데요.

이 곳의 서비스를 이용하면 손쉽게 그러한 이미지를 만들 수 있습니다.

최근 아이튠즈커넥트의 변경으로 모든 디바이스 크기의 스크린샷을 다 올리는 것이 아니라,
레이아웃의 큰 변화만 없다면, 5.5인치의 스크린샷 하나로 전체 디바이에 적용 가능합니다.
예전에는 스크린 크기별로 이미지를 조정해야 했기 때문에 이러한 서비스가 필수적이었다면, 이제는 5.5인치 하나만 만들어서
전체적용해도 되므로, 서비스의 매력은 조금 떨어진 것이 사실입니다.
그러나 여전히 틀에 이미지를 선택하고 글씨를 선택하고 간단한 클릭 몇번만으로 훌륭한 스크린샷이 나온다는 것은 참으로 매력적인 서비스입니다.


!소개글 작성!

소개글 작성은 한글과 영문으로 작성을 해야 합니다.

저희 팀은 영어를 그리 잘하는 인원이 없으니, 일단은 한글로 작성 후 번역을 의뢰하는 것이 그동안의 수순이었습니다.

저희가 사용한 번역서비스는 플리토(https://www.flitto.com/)입니다.

이 곳은 한 장이나 단락별로 번역을 요청할 수 있으마, 제품소개글 정도의 간단한 페이지라면 2,3천원 선이면 번역이 가능합니다.

회원가입 후 포인트를 구매하고 그 포인트로 번역의뢰를 할 수 있습니다.

글자 기준으로 금액을 책정하다보니, 의뢰 전에 한글부터 가다듬는 작업이 필요합니다.




지난 번 앱에 이어서 진행되다보니 별다른 도구의 변화는 없었습니다.

무료버젼의 특성상 광고가 추가되고, 그러다보니 사용자분석이 필요해져서 추가적인 분석툴이 추가되었습니다.

물론 이러한 툴만 있다고 개발이 되진 않습니다. 대부분 많은 고민과 기획, 디자인적인 부분, 개발부분에서의 문제해결 등이 필요합니다.

다만 이러한 내용이 있다는걸 정리하면서 저도 제 머리속에서 한 번 정리를 하고

이 글을 읽으시는 아이폰앱개발을 시작하시고자 하시는 분들에게 조금이나마 도움이 되고자 하였습니다.

쓰다보니 글이 길어졌습니다. 긴글 읽어주셔서 감사합니다.  ^^


아 중요한 목적. 모노리얼 다이어리 많이 이용해 주세요. ^^

공유버튼을 이용해서 페이스북이나 트위터에 내용을 공유하시면 일정기간 광고가 사라져서 광고 없이도 사용이 가능합니다.^^

의견이 있으실 경우 monorial@eedler.com 으로 보내주시면 적극 반영하겠습니다.^^

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

+ Recent posts