스타웍스 개발기 (4) - macOS 앱 개발에 필요한 것

macOS용 스타벅스 WiFi 자동 연결 앱을 만들며 기록을 남기고 있습니다. 그간 바쁘다는 핑계로, 개발 기록을 남기기는커녕 개발 작업 자체도 밀리고 있습니다. 오랜만에, 아니 드디어, 그 (4)편을 남깁니다. 오늘은, 개발에 필요한 전반적인 사전 지식과 필요한 도구들을 소개할까 합니다. 꼭 스타웍스라는 앱 뿐만 아니더라도 일반적인 macOS용 앱을 만든다면 이런 것들이 필요하구나 라고 이해하시기 좋으리라 기대합니다.

MacBook Pro 같은 장비 필요

너무 당연한 얘기인가요? 윈도 애플리케이션을 개발하려면 윈도가 필요하고, 맥용 앱을 개발하려면 맥이 있어야 하는 거죠. 그러나 한편, 안드로이드 스마트폰 같은 경우는 윈도나 맥이나 리눅스 환경에서 따로 개발하고 테스트하고 나서 최종적으로 “다른” 목표 장비에 앱을 얹을 수도 있습니다. 이렇게 개발 환경과 운영 환경이 다른 경우를 전문용어로 “크로스 플랫폼 개발”이라고 한다고 아는 체 해봅니다. 또 다른 예로, 게임 콘솔인 플레이스테이션 같은 게임기에 올리는 게임 소프트웨어도, 개발은 윈도 PC에서 하는 것으로 알고 있습니다.

그런 면에서, “macOS용 앱을 PC에서 개발할 수는 없나?” 생각할 수도 있지만, 아쉽게도(?) 그렇지는 않습니다. 꼭 macOS 장비가 필요합니다. 첫번째 허들이죠. 비싼 맥 장비가 필요해요. 뽀대 나는 맥북프로 한 대 장만하십시다요. 상태 좋은 중고로 사도 괜찮아요.

개발도구 Xcode 설치

윈도에 비주얼 스튜디오가 있고, 안드로이드 개발을 위해 안드로이드 스튜디오가 있지요. 흔히 Java 애플리케이션 개발할 때 쓰는 Eclipse나 IntelliJ같은 툴도 아울러서 그런 도구들을 통합개발환경(IDE, Integrated Development Environment)라고 합니다. “뭐가 통합된 거냐?”면, 아재의 아재들이 개발하던 시절에는 개발 절차 마다의 갖가지 과정의 도구들이 따로 놀던 시절이 있었습니다(물론 지금도 애써 따로 하려면 따로 할 수 있습니다). 소스코드 편집은 별도 에디터에서 하고, 컴파일러 따로 돌리고, 링커 따로 돌리고, 디버거 따로 돌리고, 이런저런 도구들을 따로 골라서 쓰던 시절이 있었는데요, 지금은 있는지도 모르겠는 볼랜드(Borland)라는 개발 도구 회사에서 출시한 터보 파스칼(Turbo Pascal)이 그 모든 도구들을 하나의 도구 안에서 쓸 수 있게 했고, 당시 메이저 언어였던 C환경을 위한 Turbo C까지 상업적 성공을 거두면서 널리 퍼지게 됩니다. 볼랜드는 지금으로 치자면 인텔리J를 개발하는 JetBrain사와 비슷한 존재일지도 모르겠습니다. 규모면에서는 더 컸을지도 모르겠네요. 아아, 아재 티나는 발언이겠지만, 옛 추억의 공감대를 느끼는 분들도 계실듯?

예전에 필름 카메라로 사진 찍을 때, 필름 넣고 찍고, 인화하고 현상하고 다 따로 했지만, 요새는 용어조차 생소하지 않나요? 스마트폰으로 찍고 거기서 바로 주고받고 각자 스마트폰에서 보잖아요? 가끔 사진 프린트하는 거고. 마찬가지로 개발도 이제는 한 도구 안에서 거의 다 합니다.

저 학교 다닐 때, 교수님들이 펀치카드에 구멍 뚫어서 개발하던 시절 얘기하곤 하셨는데, “그래서 나보고 어쩌라고? 나도 천공카드 뚫어서 하라는 말씀이신가?”라는 생각이 들었는데, 지금 제가 그런 얘기하는 꼴이네요. 후후. 암튼, 그런 이유로 지금은 그냥 평범해 보이는 개발도구인 것들을 여전히 통합개발환경(IDE)이라고 부릅니다.

간단한 얘기를 빙빙 둘렀습니다. macOS나 iOS 앱 개발할 때는 Apple 사에서 제공하는 통합 개발환경인 Xcode를 받아서 쓸 수 있습니다. 한 때 잠깐 유료로 판매한 적이 있었지만, 요새는 무료로 다운로드해서 쓸 수 있습니다.

이렇게 생겼습니다. 이 개발도구 하나로 소스코드도 작성해 개발하고 테스트하고 디버깅하고 애플 앱스토어에 올릴 아카이브도 만들고, 심지어 UI 구성요소 디자인까지 다 합니다. 모든 기능이 다 있는 만큼 하나하나 알면서 쓰기는 꽤 방대하겠지만, 애플에서 잘 작성해 둔 튜토리얼 문서를 보고 하나씩 따라 해 보면서 익히면 조금씩 익숙해지는 것 같습니다.

개발 언어 Swift 학습

애플이 좀 독보적이자 독단적입니다. 다른 플랫폼들은 이미 상용화에 성공한 프로그래밍 언어를 써서 개발도구를 구축하는데, 애플은 자기네들만의 프로그래밍 언어를 만들어버렸습니다. 구글 안드로이드 앱을 개발하려면 이미 성공한 Java 프로그래밍 환경을 쓰는데, macOS나 iOS 개발을 위해서는 스위프트(Swift)라는 새로운 언어를 따로 배워서 써야 합니다. Xcode에서 소스코드를 작성하는 부분에는 이 스위프트라는 언어 문법으로 코드를 작성합니다.

그래도 몇 년 전까지는 Objective-C라고 좀 생소하긴 해도 외부의(?) 프로그래밍 언어를 썼었는데, 이제는 애플이 아예 언어 자체를 직접 만들어 버렸습니다. 개발자 입장에서는, 아무래도 프로그래밍 언어라는 것이, 하나 배우려면 익숙해지는데 오랜 기간과 노력이 필요해서 꽤 부담되는 일입니다. 두 번째 허들! 다행인 것은 언어가 매우 간결하고 신식이라, 배우고 활용하기는 편하다는 점을 꼽을 수 있겠습니다. 그래도 쉬운 일은 아니죠.

(근사한 전문가용 개발환경에 더불어, 학생들 코딩 교육용으로도 많이 쓰려나 봅니다.)

macOS 환경에 쓰이는 프레임워크 학습

조금 전 프로그래밍 언어를 배우는 일도 만만치 않은 일이라고 말씀드렸습니다만, 사실 더 어려운 것은 목표로 하는 개발 환경의 갖가지 구성요소와 활용 방법을 배우는 것이 더 큰 일입니다. 우리가 학교에서 영어를 배우더라도, 영어 문법 자체는 쉽게 외우거나 배우더라도, 실생활에서 써먹는 것과 큰 차이가 있는 것과 마찬가지입니다. 프로그래밍 언어를 배우는 일은, 그 기본적인 문법을 배우는 일이고, 실제 의미 있는 프로그램을 만들려면, 의사소통이 가능한 수준의 어휘도 알아야 하고 관용구도 알아야 하고, 실전 경험도 쌓아야 하는 일이 필요하지요.

맥에서 기본적으로 쓰는 API들은 뭐가 있는지, 어떻게 불러다 써야 하는지, 그 입력과 출력은 무언지, 화면 구성요소는 어떤 게 있으며, 상황별로 어떤 걸 쓰는 게 제일 적절한지, 그 각각의 구성 요소를 준비하고 보이고 반응하는 건 어떻게 하는 건지, 일일이 배워가야 합니다.

다른 환경의 개발도 마찬가지입니다. 백엔드 개발에 많이 쓰이는 자바를 배웠더라도, 그 위에서 또 스프링 프레임워크라는 옛 전화번호부 만한 책 두권 정도의 어마 무지 방대한 내용을 살펴봐야 하지요. JPA 같은 기본적인(?) 것들을 알아보는 데도 두꺼운 책한 권이 따로 필요할 정도입니다. 백엔드 개발자가 같은 자바를 쓰는 안드로이드 앱을 개발한다고 해서 그렇게 편한 것만도 아닙니다. 어차피 안드로이드 환경의 공부를 따로 해야 하거든요. 같은 Java 프로그래밍 언어라서 쉬울 것 같지만, 그건 그저 첫 계단을 쉽게 오르는 것에 불과합니다.

그래도, 애플의 문서나 개발 환경이 잘 되어있어서, 잘 따라 해 보면서 배우면 재미있는 것 같습니다.

버전 관리 도구 Git

요새는 소스코드를 저장하고 관리하는 일에 Git을 많이 씁니다. 혼자 개발할 때는 무심코 개발하는 사람도 많겠지만, 처음에 개념 잡고 연습하는 시간을 조금 투자하고 나면, 꽤 유용하게 활용할 수 있습니다. 소스코드는 수시로 바꿔가며 작업하게 되는데, 언제 어디서 뭐가 바뀌었는지 확인하는 일도 필요하고, 어느 순간 이런 작업을 하다가, 새로운 방향으로 다시 작업을 해야 하는 일도 자주 있어서, 단순히 디렉터리 전체를 복사해서 하는 것보다 유연한 방법이 있으면 좋습니다. 그래서 Git 같은 도구를 쓰고요, 이게 여럿이서 작업할 때만 필요한 일 같기도 한데, 막상 혼자서 써도 꽤 유용한 경우가 많습니다. macOS 앱을 개발할 때뿐 아니라, 어떤 개발을 하시더라도 Git같은 버전 관리 도구는 배워서 쓸만한 가치가 있습니다. 요새는 굳이 이런 언급을 하지 않아도 누구나 당연스레 쓰는 것 같아서 괜한 말씀을 드리는 것 같습니다.

Git으로 관리하는 프로젝트는 GitHub 웹서비스에 올려서 공개해 가며 작업할 수 있습니다. 제 이번 프로젝트의 저장소의 모습입니다. 지금도 누구나 오셔서 보시고 소스도 받아가실 수 있어요. (아직 작성 중인 소스만 있을 뿐.)

그 외+

지금까지는 macOS용 네이티브 애플리케이션 개발을 위한 기초 설명이었고, 스타웍스에는 여기에 조금 더 필요한 게 있습니다. 아무래도 웹 환경에서 인증 처리하는 것을 가로채서 다른 일을 처리해야 하기에, 약간의 HTML/자바스크립트 기술이 조금 더 필요합니다. 이미 웹 프론트엔드 개발을 하시는 분이라면 아주 간단한 작업이지만, 앱이나 서버 개발만 하시던 분이라면 조금 새로이 공부를 하셔야 하는 부분이 있지요. 이건 프로젝트를 더 진행하면서 차근히 더 설명해가며 진행하도록 할게요. 저도 어차피 주력분야는 백엔드라 아주 쉽게 풀어서 프론트엔드 개발 설명을 드리게 될 것 같습니다.

너무 자세한 설명이었을까요?

이번 편은, 아직 macOS 개발을 안 해보신 분들을 위한, 아니 어쩌면 아예 개발을 안 해보신 분들까지도 이해하실만큼 풀어서 설명해보았습니다. 앞으로 계속 그럴 수도 없으면서 조금 무모한 글이 아니었나 싶습니다. 다음 편 부터는 다시 수위(?)를 높여서 착착 진행해 볼게요. 다음 편에 만나요, 제발~~~

Like what you read? Give 김대현 a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.