본문 바로가기

Flutter

Yapp 24기 지원 후기

Yapp 24기에 Flutter 파트가 생겼다고 해서 지원을 했었습니다

Yapp에서 신설된 flutter 파트라서 관련된 글이 없어서 지원하며 느낀점과 절차에 대해 간단히 작성해보겠습니다.

결론부터 말하면 최종 탈락했습니다 :(

신기한 점은 예비 합격자라는 점이었는데요

메일 일부

합격자들 대상으로 먼저 물어보고 예비 합격자에게도 기회를 주는 것 같았습니다.

 

지원 절차

자기소개서 제출 -> 면접 

이러한 형태로 진행이 됐습니다.

 

자기소개서는

 

1. [공통 질문] 지원자께서 세상의 문제를 해결하기 위해 오너십을 가지고 노력한 경험을 구체적으로 이야기 해주세요.

2. [공통 질문] PM, 디자이너와 협업한 프로젝트에서 발생한 이슈 상황을 어떻게 소통해서 해결하셨는지 구체적으로 작성해주세요.

3. 지원자께서 개발자로서 강점과 추구하는 방향을 작성해 주세요

4. 개발 경력 혹은 경험을 알려주세요. 프로젝트 이름, 기간, 본인의 역할, 성과를 포함하여 작성해주세요.

5. 위 프로젝트 중 기억에 남는 것을 하나 선정해 기술적인 어려움을 겪었던 부분과 어떠한 과정으로 해당 문제를 해결했는지 작성해 주세요.

 

항목으로 구성이 되었습니다.

 

동아리 내에 직장인 비율이 높다 보니 (면접때 듣기론 학생 4~5 : 직장인 6~5 정도라고 하네요)

꽤나 실력자를 뽑는 것 같아서 이것저것 해왔던 프로젝트를 다 넣었습니다 ㅋㅋㅋ...

 

운 좋게 서류를 합격했습니다 :)

 

면접

면접은 40~45분정도 진행되었습니다. 2대 1로 진행이 되었고

 

면접관님들이 차갑지만 따뜻하게 대해주셨어서 긴장이 좀 덜하며 면접에 임했던것 같아요

 

인성 면접과 기술 면접이 각각 20분 정도 진행됐습니다.

 

인성 질문

인성 질문은 주로 프로젝트를 완수할 수 있는지에 대해 질문을 받았습니다.

1. 사용해본 협업 툴 (Jira를 사용한다고 합니다 준비하시는 분들은 참고하세요 :)

2. 프로젝트 마감을 못지키게 될 경우 어떻게 할 것인지 

 

사실 인성 질문에서 딴소리를 많이 해서 떨어진것 같습니다 ㅠ_ㅠ

기술 면접

기술 면접은 자기소개서에 작성된 기술 위주로 질문을 받았고 깃허브 프로젝트 보고 질문을 받았습니다.

 

1. custom widget과 function widget(선언형) 차이, 어떤걸 선호하는지

2. const final 차이 (자기소개서)

3. mvc 모델에 대해 설명 (깃헙)

4. isolate 에 대해 설명 (자기소개서)

5. container에 대해 설명

6. getx, bloc 패턴 설명 (깃헙)

7. freezed 패키지 사용 여부 (꼬리질문)

 

준비한 질문과 달리 기초적인것들이어서 기본기가 많이 부족했다고 생각이 들었습니다..ㅎㅎ

 

결국...

예비번호가 안빠지게 되어 탈락했지만

그래도 면접을 보면서 많이 배웠던 것 같습니다.

 

24기엔 합류하지 못했지만 다음에 또 지원하면 되니까 기다려주세요 ~!~!~!

 

아래는 다른 블로그 돌아다니면서 쓸만하다 싶은 제가 준비했던 면접 질문 리스트입니다

 

인성

  1. 직장인 분들이 많아서 본인이 일을 떠맡을수도 있는데 어떻게 하실건가요?
  2. 갈등 있었던적? 해결 방법?프로젝트를 하면서 의견 조율 등의 어려움이 있었는지, 있었다면 어떻게 해결했는지?
  3. 팀원과 갈등이 생겼을 때 어떻게 해결하고 소통했는지 등
  4. 진행했던 프로젝트 소개
  5. 프로젝트 진행하면서 어려웠던 기술 해결법
  6. 얍을 통해 뭘 얻어가고싶은지
  7. 해온 프로젝트 중 가장 기억에 남는 프로젝트는? 기술적으로 해결해나간 문제는?
  8. 이 기술만큼은 자신 있다 하는 내용이 있으시다면, 설명해주실 수 있으실까요?
  9. 그중 본인이 담당한 기능은?
  10. 병행하고 있는 다른 활동? 취준 중일텐데 시간 많이 쏟을 수 있는지
  11. 얍에는 다양한 스터디가 있는데, 그중 참여하고 싶은 스터디가 있는지?
  12. 본인은 리더인가, 팔로워인가
  13. 다른 팀원의 개발 속도가 느리다면 어떻게 할 것인가 만약에 내가 뒤쳐진다면? 나보다 뒤쳐진 팀원이 있다면?
  14. 만약 함께하는 사람과 기술스택이나 언어가 다르다면 어떻게 할 것인가[]
  15. 프로젝트 시 같이 활동하고 싶은 팀원과 활동하고 싶지 않은 팀원에 대한 본인만의 기준이 있을까요?
  16. 프로젝트 과정에서 작성해주신 전역 상태 관리 매니지먼트를 도입했던 이유는 어떻게 되나요?
  17. 주어진 일이 많으면 어떻게 할 것인지
  18. 시간이 오래걸려도 퀄리티 좋은 걸 선택? 아니면 마감기한에 맞추는게 중요하다고 생각하는지?

기술

flutter 장점에 대해 설명해보세요

hot reload

핫 리로드의 동작방식

개발자가 코드를 수정 → IDE에서 이를 감지 → Flutter 엔진에서 Dart VM에 수정된 코드 전달’

  1. Flutter 엔진: 개발자가 코드를 수정하고 저장하면, 이 변경 사항을 감지하고 처리하는 역할을 하는 것이 Flutter 엔진입니다. 이 엔진은 코드의 변경을 인식하고 이를 다음 단계인 Dart VM으로 전달합니다.
  2. Dart VM: Dart VM(Dart Virtual Machine)은 Dart 코드를 실행하는 가상 머신입니다. Flutter 앱은 Dart 코드로 작성되어 있으며, Dart VM은 이 코드를 실행합니다. Hot Reload 중에는 Dart VM이 수정된 코드를 다시 컴파일하고 실행하여 앱의 변경된 모습을 즉시 반영합니다.
  3. Flutter 프레임워크: Flutter 프레임워크는 Dart 코드를 실행하고 UI를 렌더링하는 역할을 합니다. Flutter 엔진과 Dart VM 사이에서 동작하며, 수정된 코드가 즉시 반영되도록 UI를 업데이트합니다. 이를 통해 개발자는 수정한 내용이 실시간으로 앱에 반영되는 것을 확인할 수 있습니다.

Flutter 엔진: Flutter 엔진은 Flutter 앱의 실행을 담당하는 핵심 역할을 하는 것입니다. 이 엔진은 다양한 기능을 포함하고 있으며, 앱의 렌더링, 상태 관리, 이벤트 처리 등을 처리합니다. 이러한 기능들을 통해 Flutter 엔진은 앱의 동작을 제어하고 사용자 인터페이스를 관리합니다.

Flutter 프레임워크: Flutter 프레임워크는 Flutter 엔진 위에 구축된 UI 프레임워크입니다. 이 프레임워크는 다양한 위젯과 레이아웃을 제공하여 Flutter 앱의 사용자 인터페이스를 구성합니다. 개발자는 Flutter 프레임워크를 사용하여 UI 요소를 만들고 조합하여 전체 앱의 디자인을 결정합니다.

간단히 말하면, Flutter 엔진은 앱의 실행과 동작을 제어하며, Flutter 프레임워크는 UI 요소를 구성하고 디자인하는 데 사용됩니다.

(flutter)선언적 UI는 UI의 모습과 동작을 설명하고, 프레임워크가 이를 해석하여 UI를 렌더링합니다.

(android,iOS)명령형 UI는 개발자가 직접 UI를 조작하고 변경하는 방식

cross platform

  1. Flutter Embedder: Flutter Embedder는 Flutter 엔진을 호스팅하고 실행하는데 사용됩니다. 각 플랫폼에 맞게 설계된 Flutter Embedder를 사용하여 Flutter 엔진을 특정 플랫폼에 내장(embed)합니다. 예를 들어, Flutter Desktop Embedder는 데스크톱 애플리케이션에서 Flutter를 실행하기 위한 도구입니다.
  2. Flutter Engine: Flutter 엔진은 Flutter 프레임워크의 핵심이며, UI 렌더링, 이벤트 처리, 상태 관리 등의 기능을 담당합니다. Flutter 엔진은 Dart VM과 함께 작동하여 Flutter 애플리케이션의 실행을 제어하고, Flutter 코드를 해석하고 실행합니다.
  3. Dart VM (Dart Virtual Machine): Dart VM은 Dart 코드를 실행하는 가상 머신입니다. Flutter 애플리케이션은 주로 Dart로 작성되며, Dart VM은 이 코드를 실행하여 Flutter 엔진에 전달합니다. Hot Reload와 같은 기능을 제공하기도 합니다.
  4. Flutter Framework: Flutter 프레임워크는 UI를 설계하고 구성하는 데 사용됩니다. 위젯 트리를 구성하고, UI 요소의 상태를 관리하며, 애니메이션과 상호 작용을 처리하는 등의 기능을 제공합니다. Flutter 프레임워크는 Dart 언어로 작성되어 있으며, Flutter 엔진과 함께 동작하여 애플리케이션의 UI를 렌더링합니다.

따라서 Flutter 애플리케이션은 Flutter Embedder를 통해 Flutter 엔진이 호스팅되고, 이 엔진은 Dart VM과 함께 작동하여 Flutter 프레임워크의 코드를 실행하고 UI를 렌더링합니다. 이러한 구조를 통해 Flutter는 다양한 플랫폼에서 동일한 코드베이스를 사용하여 애플리케이션을 개발하고 실행할 수 있습니다.

Dart VM

Dart 언어의 실행을 담당하는 가상 머신(Virtual Machine)입니다. Dart는 Google에서 개발한 프로그래밍 언어로, 웹 애플리케이션, 모바일 앱, 서버 애플리케이션 등을 개발하는 데 사용됩니다. Dart VM은 Dart 언어로 작성된 코드를 실행하고, JIT(Just-In-Time) 컴파일러와 AOT(Ahead-Of-Time) 컴파일러를 통해 코드를 최적화합니다.

Dart VM의 주요 특징과 동작 방식은 다음과 같습니다:

  1. JIT 컴파일러와 AOT 컴파일러: Dart VM은 JIT 컴파일러와 AOT 컴파일러를 함께 사용하여 Dart 코드를 실행합니다. JIT 컴파일러(자바, 자바스크립트, 파이썬)는 Dart 코드를 실행하는 동안 코드를 실시간으로 컴파일하고 최적화하여 실행합니다. 반면에 AOT 컴파일러(C,C++,Rust)는 Dart 코드를 미리 컴파일하여 기계 코드로 변환한 후 실행합니다.
  2. 호스팅 환경: Dart VM은 주로 Flutter 프레임워크와 함께 사용되며, Flutter 앱을 실행하는 데 사용됩니다. Flutter는 Dart 코드를 컴파일하여 네이티브 코드로 변환한 후 Dart VM에서 실행합니다.
  3. 성능: Dart VM은 고성능을 제공합니다. JIT 컴파일러는 코드를 실행하는 동안 실시간으로 최적화를 수행하므로 빠른 실행 속도를 보장합니다. 또한 AOT 컴파일러를 사용하여 미리 컴파일된 코드를 실행함으로써 앱의 시작 시간을 최적화할 수 있습니다.
  4. 가비지 컬렉션: Dart VM은 가비지 컬렉션을 지원하여 메모리 관리를 자동화합니다. 가비지 컬렉터는 더 이상 필요하지 않은 객체를 식별하여 자동으로 메모리를 회수합니다.
  5. 호스트 확장: Dart VM은 네이티브 확장을 통해 C나 C++로 작성된 코드와 상호작용할 수 있습니다. 이를 통해 Dart VM은 기존의 네이티브 라이브러리나 시스템 기능을 활용할 수 있습니다.

Q. main() 과 runApp()의 차이점이 무엇인가요 ?

A. main() : 프로그램의 시작점입니다. Flutter는 해당 함수 없이 실행할 수 없습니다.

  • runApp() : 앱 위젯 트리의 루트로 사용될 최상위 위젯을 받아 화면에 보여주는 함수입니다.

Flutter의 Build 시간이 오래 걸리는 이유

Flutter 앱을 처음 빌드할 때 Flutter가 기기별 IPA나 APK 파일을 빌드하기 때문에 평소보다 시간이 매우 오래 걸린다.

이 프로세스에서 Xcode와 Gradle은 파일을 빌드하는 데에 사용되는데 이 또한 시간이 오래 걸린다.

Flutter에서의 key 란?

Key : 각 요소의 식별자. 키를 사용하여 동일한 위젯으로 구성된 컬렉션을 재정렬하고 수정할 수 있다. 키의 주된 용도는 StatefulWidget을 포함하는 Widget Tree를 수정하는 것이다.