[영국유학] UoB - 컴싸 재학생의 인턴 개발 이야기 2

2020.07.31

안녕하세요 금방 또다시 인사를 드리게 되었네요. 최근 어플 베타테스트를 하기위해 어플 릴리즈준비중입니다.

근데 생각보다 할게 많고 까다롭네요 ㅜ

저번 글에서는 영국대학교에서의 Computer Science 학생은 어떻게 공부를 하고 프로그래밍 언어들에 대해 간략히 설명해보았습니다.

그렇다면 6월부터 지금까지 일을 하면서 학교에서 배운 내용을 얼마나 활용하고 어느 과목에서 활용했는지에 대해 이야기해볼까 합니다.

특히, 컴싸에 진학하는 후배님들에게 입학전에 알아두면 아주 유용한 프로그램이나 방법들을 알려드리겠습니다.

 

- 통합개발환경

저번 글에서 이야기했듯이, 저는 지금 안드로이드 어플 개발을 하고있습니다. 또한, 안드로이드 개발을 하기 위해서는 자바를 사용한다고 말씀드렸었죠.

그럼 자바를 이용해서 어떻게 어플을 개발할까요? 방법은 여러가지입니다. 저는 '안드로이드 스튜디오'를 이용합니다.

이름부터 대놓고 안드로이드를 지원한다는 이 프로그램은 무엇일까요? 안드로이드 스튜디오같은 프로그램을 '통합개발환경', 영어로는 IDE(Integrated Development Environment)라고 합니다.

IDE는 말 그대로 우리같은 컴싸 학생들이나 개발자들이 개발을 하는데 필요한 환경을 제공해주는 프로그램입니다.

안드로이드 스튜디오는 원래 JetBrains사의 IntelliJ IDEA라는 프로그램을 구글이 안드로이드 개발환경을 적용할 수 있게하여 새롭게 만들어낸 프로그램입니다.

안드로이드 스튜디오는 현재 Java와 Kotlin을 대표적으로 지원하고 있고, 상황에 따라 html, css(?), Javascript도 지원합니다.

이 프로그램의 가장 큰 특징은 코딩을 다 해서 실행을 시키면 코드를 안드로이드에 맞게 번역을하고 물리적 기기, 공기계같은 기기가 없어도 컴퓨터내에서 가상머신을 소환해서 실행을 시킵니다.

동영상 가장 마지막 부분이 바로 그 파트인데, 어플 자체에 회사내부 정보도 있고해서 소환되자마자 바로 화면캡쳐 꺼버렸습니다 ㅋㅋ.

나중에 포트폴리오용으로 재구성하면서 다시 보여드리겠습니다. IDE는 안드로이드 스튜디오만 있는 것이 아닙니다.

언어마다 보편적으로 쓰이는 프로그램이 전부 따로 있습니다.

예를 들어,

C/C++ -> Visual Studio (Microsoft)

Java -> Eclipse (Eclipse Foundation), IntelliJ (JetBrains)

Python -> Pycharm(JetBrains), Jupyter(Jupyter), Spyder(Spyder)

이외에 순수 Editor 프로그램들 -> Visual Studio Code(Microsoft), Atom(GitHub), Sublime Text(Sublime HQ)

또는 수학적 모델링하는 프로그램들 -> MatLab (MathWorks), Octave (GNU)

등등이 있습니다.

여러분은 거짓말 조금 보태서 2학년까지 언급했던 모든 툴 다 만져볼 것입니다. 그렇기 때문에 시간이 나는 틈틈이 코딩을 시작하지 않아도 한번씩 둘러보는것도 좋은 생각입니다.

UoB에서는 입학하는 첫학기에 Programming in Java (제 1학년 기준)이라는 과목에서 코딩의 첫걸음을 Java로 가르치면서 Eclipse도 함께 소개합니다.

그리고 첫학기가 끝나고 다른 언어를 공부할 때 무슨 프로그램을 써라라고 하지 않습니다.

본인이 찾습니다. 왜냐하면 학교에서는 메모장에 코딩을 하거든요. 그렇기 때문에 입학 전에 프로그램들 한번 씩은 보고 들어가보면 좋습니다. 

Git(깃)과 터미널

컴싸의 꽃입니다. Git으로인해 개발자의 개발 속도가 5배이상 줄었다고해도 과언이 아닙니다.

Git이란 개발중에 있는 프로그램의 변경사항을 확인하고 코드를 인터넷에 올려서 공유할 수 있게 하고 폐쇄된 환경에서도 서로의 개발단계들을 공유하면서 개발자들의 프로그래밍적 소통을 원활하게하는 프로그램입니다.

예를 들어, 개발자 2명이서 C라는 프로그램을 만들어야합니다. 그 프로그램은 A+B = C가 되어야 완성이 되는 프로그램인데 개발자1은 A를 담당하고 개발자2는 B를 담당한다고 가정했을 때, Git의 역할은 '+' 입니다.

Git은 2개 이상의 서로 다른 코드를 합쳐주고, 각 개발자의 개발 일기장이라는 역할을 합니다. 2학년 Team Project과목에서 5명이서 서로의 코드들을 공유하고 합치고 진행상황을 확인하는데 이용하였었는데 굉장히 유용했습니다.

(깃으로 일기쓰기)

undefined

깃은 또한 코드를 합치는 것과 더불어서 Open source 개발로 인한 거대한 커뮤니티를 형성하고 있습니다.

Open source란 말 그대로 소스코드가 모든 사람들에게 오픈되어있다는 뜻입니다.

그렇기 때문에 특정 프로젝트에 관심이 있는 사람들이 쉽게 접근할 수 있고 다양한 아이디어들이 한 곳에 응집되어 하나의 프로그램 또는 라이브러리를 만들 수가 있습니다.

이렇게 오픈소스 개발에 참여하는 것이 IT회사에서 일하는 것과 굉장한 유사점을 가지기 때문에 학생들 또는 프리랜서 개발자들의 커리어에도 큰 영향을 줄 수 있다고 저는 생각합니다.

더 나아가, 깃은 개발자가 쓴 코드를 저장하고 많은 사람들에게 보여줄 수 있는 특성을 가지기 때문에 포트폴리오로도 많이 쓰입니다. 

제 깃허브 URL: https://github.com/eddie8615

이런 식으로 학교에서 했던 과제들이나 개인적 또는 팀으로 진행했던 프로젝트들을 올려놓고 보여줄 수 있습니다.

이러한 무수한 장점때문에 Android studio나 IntelliJ와 같은 IDE에서 접근하기 쉽게 잘 만들어놓았습니다.

undefined

그렇다면 Terminal은 무엇일까요? 아마도 맥북사용자는 이름은 들어보셨을겁니다. 터미널은 아까 위에 보셨던 검은바탕에 글자들이 무수히 있는 창을 말합니다.

Windows에서는 command라고 하고, 검색창에 cmd라고 치면 나옵니다. 터미널또는 커맨드로 하는 일은 간단합니다.

MacOS나 Windows의 기본 명령어를 쳐서 작업을 하는겁니다.

예를 들면, cd라는 명령어로 다른 폴더로 넘어간다던가, mkdir로 폴더를 만드는 이런 작업들이죠.

이런 창은 사실 지금과 같이 OS (Operating System)가 나오기 전에 컴퓨터를 사용하기 위해선 꼭 필요했던 창입니다.

그때는 지금과 같이 아이콘 클릭이라는 개념이 없었으니까요. 이것을 왜 할까요? 이미 MacOS나 WIndows는 아이콘을 지원하는데 필요가 없을것 같지만, 학교에서는 Linux를 가르칩니다. 리눅스는 다른 OS와는 달리 굉장히 고전적인 방식을 고수하지만, 개발자들이 느끼기에 명령어만 잘 알고있다면 엄청 편합니다.

사실 아직 편하다는 이유말고는 아직 딱히 장점을 알지는 못하지만 이상하게도 굉장히 끌리는 OS인것은 분명합니다.

이건 제가 여기서 100번 떠드는것보다 직접 느껴보는게 더 좋을듯 싶습니다. 아무튼 UoB에선 리눅스를 많이 쓰고 과제로도 많이 나오는데 명령어는 처음 cd와 mkdir, rm정도만 알려주고 나머지는 본인이 필요한만큼 찾아서 과제를 하기때문에 미리 보는것도 좋은 생각입니다. 

서버(Server)

어플을 혼자 사용하는데는 사실 서버가 필요없습니다. 그냥 핸드폰 내부 저장장치에 저장하고 쓰면 되니까요. 그런데 제가 만드는 어플은 회사내부용 어플이고 회사의 데이터를 봐야하고 다른부서들의 소통을 이끌어내야하는 역할을 하기때문에 서버가 필수입니다. 그래서 어플을 개발할 때 가장 유명하고 좋은 서버를 클라우드로 제공하는 제품 2가지를 알려드리겠습니다.

Firebase (구글)

undefined

첫번째로 구글의 Firebase입니다. Firebase는 모바일앱 및 웹 개발에 필요한 기능들을 지원합니다. 예를들어, 로그인에서의 보안성, 데이터베이스, 구글 드라이브같은 스토리지, Machine Learning Kit 등등을 지원합니다.

제가 현재 사용하고 있는 서버인데 굉장히 맘에 듭니다. 업로드, 다운로드 속도도 느리지 않고, 각 기능들이 매우매우 직관적이어서 처음 시작을 해도 금방 쉽게 이해할 수 있습니다.

모든 기능들이 만족스럽지만, Firebase는 SQL형태의 데이터베이스를 지원하지 않고 NoSQL를 지원하기 때문에 SQL에 익숙한 저는 적응하는데 조금 애먹었습니다.

그래도 현재 쓰는 데이터베이스가 매우 쉽게 잘 되어있고 직관적이어서 금방 이해할 수 있었습니다. Firebase는 누구나 gmail 아이디만 있다면 서버를 생성할 수 있고, 무료버전 자체에서 주는 서비스가 엄청나기 때문에 굉장히 좋습니다. 

AWS Amplify (아마존)

 

undefined

다른 하나는 AWS Amplify인데, 사실 안써봤기 때문에 자세히는 모릅니다. 근데 기능들은 Firebase와 거의 동일한것으로 알고있습니다.

개인적으로 AWS에서 돈 뜯긴 적이 있어서 그닥 AWS에 정이 가진 않습니다. 하지만, AWS는 명실상부 전세계 최고의 클라우드 서비스를 자랑하죠.

AWS는 Amazon Web Service의 줄임말입니다. 그리고 뒤에 Amplify라는게 붙었는데, AWS에서 제공하는 서비스들 중에 하나가 Amplify라는겁니다.

AWS에 가입을 하고 들어가보면 서비스들이 굉장히 많습니다.

예전에 AWS에서 RDS (Relational Database Service)라는 기능을 써봤었는데 (RDS는 데이터베이스만 제공하는 서비스입니다) 맘에 들었던 점이, 데이터베이스를 구동하는 가상의 컴퓨터의 사양을 직접 정할 수 있다는 점이었습니다.

물론 좋게 만들수록 추가적인 비용이 발생하지만, 한편으로 AWS가 이런 기능을 어떻게 생각했지 하는 생각도 듭니다. AWS는 조금 비싸다는 것빼고는 좋다고 생각합니다.

 

이제 3개월차 안드로이드 어플 개발하는 입장에서 바라본 현재의 트렌드는 안드로이드 개발은 Firebase를 많이 사용하는 것같습니다.

왜냐하면 안드로이드와 Firebase는 같은 회사에서 만들었으니까요. 물론 Firebase는 원래 Firebase Inc.였다가 2014년에 구글에 의해 인수되었습니다.

iOS는 사실 안해봐서 잘 모르겠습니다. 근데 Firebase가 확실히 iOS에 크게 투자하지 않는다는 느낌이 조금 듭니다.

그래서 저 둘은 요즘 React-native와 Flutter에서의 플랫폼 장악에 포커싱을 하고있는 것 같습니다.

물론 Flutter도 구글이 만들었기 때문에 Firebase에 붙었다고 볼 수 있겠지만, 아직 React-native와 Flutter는 그 자체로 문제가 많기때문에 저 둘에 호환이 가장 잘 되어있는 서비스가 플랫폼을 장악할 것 같습니다. React-native에선 Amplify를 더 많이 쓰는것 같아보여요. 

 

요즘 UoB 1학년때 Full stack application development라는 과목이 개설된거 같아보입니다.

Full stack은 저번에 언급했듯이 Front-end와 Back-end를 둘 다 하는 작업이고 Front-end는 화면구성과 어플내의 기능을 담당하는 쪽이고, Back-end는 서버와 어플의 네트워킹 또는 기능들을 담당하는 것입니다. 제가 그 과목 상세히 다 읽어보진 않아서 어떤 어플을 개발할지 모르겠지만, 아마 안드로이드가 될 것 같습니다.

UoB는 Java를 밀고, 안드로이드는 MacOS와 Windows에서 개발할 수 있는데에 비해, iOS는 MacOS에서만 개발할 수 있다는 것을 감안하면 높은 확률로 안드로이드가 될 것 같습니다. UoB에 진학하시는 분들은 오시기 전에 유튜브에서 TODO앱 같은 간단한 앱을 만들어보고 가보는 것이 크게 도움될 것 같습니다. 

이번에는 되게 전문적인 용어들이 많이 나왔었는데 다음번에는 조금 덜 전문적인 어플개발에서의 Workflow를 한번 이야기해보겠습니다.

 

undefined

로그인


Reset Password 회원 가입하기