앱 개발 도구들

Seongho·2021년 10월 18일

앱 개발

목록 보기
1/4

https://www.youtube.com/watch?v=ksz_mSninEY

https://www.youtube.com/watch?v=2AS0WAOX8_8

1. 네이티브 앱

안드로이드 혹은 ios의 코드를 그대로 사용

ios라면 OBJ-C 혹은 swift를 배워야 하고, android는 java 혹은 kotlin이 필요하다.

ios, android 모두 개발하려면 swift와 java or kotlin을 둘 다 배워야 하고, xcode와 android studio도 배워야 한다.

  • 퍼포먼스에 집중한다면 좋은 선택지이다.
    • ex) 내 얼굴에 3D 마스크를 입히는 앱
  • OS에서 제공하는 기능을 완전히 사용할 수 있다.

2. 크로스 플랫폼 앱

  • 네이티브 코드가 아닌 것(리액트 네이티브 등)으로 코딩한 후 나중에 ios/android가 이해할 수 있는 코드로 변환
    • 예를 들어 리액트로 작성한 코드를 자바스크립트 코드로 컴파일 후 ios/android가 이를 자바스크립트 엔진으로 실행함.
    • flutter의 경우 Dart 코드로 쓰고 이를 C, C++로 컴파일 함.
    • Xamarin은 C#으로 작성하고 ios/android 둘 다 이해하는 intermediate 언어로 컴파일됨
  • 다양한 개발자를 끌어모을 수 있음
  • 네이티브가 아니기 때문에 퍼포먼스 이슈가 있을 수 있다.

플러터 vs 리액트 네이티브 노마드 코더 2019.07

*스마트폰에서 네비게이션이란?

  • 새롭게 표시할 화면을 기존 화면 위에 순서대로 쌓는 개념
  • 화면은 반드시 전체 화면이고, 이전에 있던 화면은 새로운 화면에 가려서 전혀 볼 수 없음

리액트 네이티브

페이스북이 만듦, 오픈소스 프로젝트, 페이스북이 100% 리액트 네이티브로 만들어진 것은 아님.

자바스크립트 코드를 실시간으로 자바엔진이 해석해서 네이티브 API를 이용하여 화면을 그려줌

  • 필요한 것은 직접 만들어야 하는 측면이 있음
    • 네비게이션같은 베이직한 것이 제대로 지원되지 않을 수 있음
    • 기본 제공되는 기능에 문제 발생 시 오픈소스 형태로, 커뮤니티가 이를 해결하기를 기다리는 느낌?
    • 페이스북의 전폭적인 지원이나 문제 해결 등은 거의 없음
  • 자바스크립트 커뮤니티에 접근할 수 있음 (NPM)

플러터

구글이 만듦, 구글의 전격적인 지원이 있음, 구글은 플러터 중심으로 크로스 플랫폼의 중심이 되고자 함.

캔버스라는 스케치북같은 UI 컴포넌트를 이용해서 자체적으로 코드를 이해해서 화면을 그려준다. (자체 언어 사용)

장점

  • 필요한 많은 것들이 지원된다.
    • 네비게이션, 카메라 등이 있고, 인스톨하면 됨.
    • 아이콘, 애니메이션, 트랜지션 등이 다 갖춰져 있을 것(거의 모든 상황에 대한 위젯이 갖춰져 있다.)
      • ex) safe area라고 해서, 아이폰의 M자 탈모형태의 화면을 고려한 화면 디자인이 있다.
    • 많은 것을 갖고있는 상자
    • 구글이 정리를 잘 해놨다. 문서가 한 군데에 정돈되어 있음.
      • 위젯 설명, 영상 설명, 강의 영상 등이 잘 되어 있음
  • 개발자 경험이 좋다. 시뮬레이터가 인하우스이고, 빠르고 깔끔하다. 리액트 네이티브에 비해 버그가 거의 없다.
  • 리액트 네이티브에서 지원하지 않는 어려운 디자인 요소를 간단히 사용할 수 있음.

단점

  • 구글 앱처럼 생겼다.
    • ex) loading indicator를 넣으면 ios, android 모두 형태가 같다.
    • 이런 구글 형식의 생김새?를 없애려면 조금 시간이 걸린다.
  • NPM 같은 것에 접근할 수 없음
  • 간단한 디자인 구현에 시간이 오래 걸린다.
    • flex box로 리액트 네이티브에서는 간단히 구현할 것도 시간이 오래 걸림
  • 배우는 시간이 좀 걸림(DART)
    • dart는 객체지향 언어(함수보다는 모든게 class)
  • 구글이 포기하면 망해버린다.

그 외

  • 리액트 네이티브 개발자의 관점에서 리액트 네이티브로 할 수 있는 것(이미 할 줄 아는 것?)은 구현하기 어렵고, 할 줄 모르던건 구현하기 쉽다.
  • 카드 애니메이션은 리액트 네이티브에서는 구현하기 매우 까다롭지만(어디서 오픈소스를 찾아서 써도 오류가 날 것) 플러터에서는 비교적 간단하다. 반대로 bar 구현 같은건 리액트 네이티브 훨씬 간단하고, 플러터는 좀 오래 걸린다.

노마드 의견

  • 자바스크립트, 타입스크립트, 그래프큐엘 백엔드, 리액트js 프론트엔드가 있다면 리액트 네이티브를 사용할 것이다. (integration이 좋음) 그러면 웹, ios, android를 하나의 코드로 만들 수 있다.

  • 백엔드가 장고, 하스켈, 자바 등이라면 플러터를 쓸 것이다. 장고나 자바면 프론트엔드로 어차피 다른걸 써야하기 때문에..

    ==> 자바스크립트 하나만 쓸거면 리액트 네이티브를(대신 애니메이션은 조금 포기해야 할 수 있음)

    ==> 백엔드가 자바스크립트가 아니면 플러터를 사용하자.

댓글 의견

  • 리액트 네이티브나 리액트 같이 자바스크립트 프레임워크는 css를 사용할 수 있어서 gui 코딩을 어렵지 않게 할 수 있는데 C# 파이썬이나 dart같은 프로그래밍 언어는 gui 화면을 구성하는게 많이 까다로울 거 같네요 언어가 어떤게 좋을지 우열을 가리는 것 보다는 그냥 둘다 사용할 수 있는 실력을 갖추는게 더 나은 거 같습니다

3. 하이브리드 앱

  • html, css, js로 구성한 내용을 web view로 감싼 후 보여줌
  • 네비게이션 바가 없는 구글 크롬 윈도우라고 할 수 있음.
  • 네이티브 앱에 대한 지식이 필요 없고, HTML, CSS, JS만 알아도 충분함
  • 모든 UI를 직접 짜야 함
  • 네이티브의 API를 이용할 수 없음. 코도바라는게 네이티브와의 징검다리 역할을 해주는데 결국 이를 이용하려면 코도바도 알아햐 하고 네이티브도 알아야 한다.

크로스 플랫폼이 계속 나오고 있고, 많은 장점을 가지고 있지만 아직 크로스 플랫폼이 해결하지 못하는 단점들이 많이 있다.

  • 아직 크로스 플랫폼으로는 네이티브의 룩앤필(성능?)을 따라갈 수 없다.
  • 네이티브에서 업데이트되는 API가 있으면 하이브리드나 크로스 플랫폼에서 지원해 줄 때까지 기다려야 한다.
  • 크로스 플랫폼단에서 버그가 나오면 처리하기가 어렵다.
  • 디버깅이 까다로운 순간이 있다.

에어비앤비 - 초창기에는 리액트 네이티브를 사용했으나 한계에 부딪혀 2018년에 네이티브로 돌아감

페이스북은 리액트 네이티브의 비중을 줄여나감

플러터만 믿고 개발하다 플러터가 중지되면 유지보수를 받지 못함

드림코딩 의견 정리

하이브리드와 크로스 플랫폼은 네이티브를 뛰어넘기에는 아직 한계점이 있다.

시장 조사를 해보면 아직 안드로이드/아이폰 개발자의 수요가 크로스 플랫폼보다 많다.

반면 크로스 플랫폼도 빠르게 발전하고 있고 지원 가능한 플랫폼의 갯수도 많아지고 있다. (플러터가 그런듯)

원하는 목표에 맞게 적절한 것을 고르자.

  • 나는 빠르게 어플리케이션을 만들 것이고, 주된 사용자층이 고성능의 핸드폰을 사용하여 네이티브 API를 사용할 필요성이 크지 않다면 하이브리드나 크로스플랫폼을 이용해 볼 수 있을 것이다.
  • 모바일 개발자를 꿈꾼다면 네이티브를 먼저 배우고 취미 생활로 크로스 플랫폼을 공부하는게 좋다. 어느 특정 하나를 골라서 진로를 결정하는 것은 위험하다.

채용공고

  1. 신한은행

  1. 요기요

    안드로이드, IOS, 프론트엔드(html, css, js, vue, react, angular, RESTful API) 모두 따로 뽑음

  2. 카카오

    마찬가지

  3. 웍스모바일

0개의 댓글