NEW 기획 디자인 개발 프로덕트 아웃소싱 프리랜싱

개발

Flutter로 UI를 구현하는 방법

 

본문은 요즘IT와 번역가 Chase가 함께 만든 해외 번역 콘텐츠입니다. 필자인 Obumuneme Nwabude는 Angular(앵귤러)와 Flutter(플러터) 테크 커뮤니티를 운영하고 있으며, 개발자를 위한 앵귤러와 플러터 관련 글을 지속해서 올리고 있습니다. 이번 글은 이미지를 포함한 모든 종류의 UI를 Flutter 코드로 변환하는 방법에 관해 소개하고 있으며, 특히 다양한 UI의 기본 개념과 구현 방법을 알려주고 있습니다.

 
플러터 코드 변환

 

이 글에서는 이미지를 포함한 모든 종류의 UI를 Flutter 코드로 변환하는 방법에 대해 소개할 예정입니다. 미리 말하자면 이 글은 앱 개발 튜토리얼이 아니며, 다양한 UI의 기본적인 개념과 구현 방법을 간략히 소개하는 가이드입니다.

 

 

Flutter 소개

Flutter(플러터)는 하나의 코드 베이스로 모바일, 웹, 데스크톱에서 네이티브로 컴파일되는 구글의 아름다운 UI 툴킷입니다.  (출처 : flutter-ko.dev)

 

웹 프런트엔드 개발에 HTML, CSS, Javascript가 쓰이고, 안드로이드 개발에 Kotlin(또는 Java)과 XML이 사용되는 등 대부분의 프레임워크에는 다수의 개발 언어가 요구됩니다. 하지만 데스크탑, 모바일, 웹 애플리케이션을 모두 개발할 수 있는 Flutter는 오로지 Dart를 기반으로 하며, Flutter 앱 내에서 볼 수 있는 이미지, 아이콘, 글자 등 모든 것이 위젯 형태로 구성되어있습니다.

 

예를 들어 AnimatedWidget, BottomNavigationBar, Container, Drawer, ElevatedButton, FormField, Image, Opacity, Padding 등의 위젯이 준비되어 있으며, 보통 사용자들이 쉽게 이해할 수 있도록 위젯 이름이 만들어집니다.

 

 

Flutter의 위젯들

Flutter에서 위젯은 StatefulWidget[1] 또는 StatelessWidget[2]을 상속(extend)하는 Dart의 클래스입니다. Flutter 2.10을 기준으로 Flutter를 설치하면 기본적으로 위젯 680개(StatefulWidgets 408개, StatelessWidget 272개)가 제공됩니다.

 

flutter 위젯

 

사용자가 필요로 하는 대부분의 기능은 기본 위젯으로 구현 가능하지만, 더 많은 위젯이 필요하다면 pub.dev(Dart와 Flutter의 패키지 매니저)에서 찾을 수 있습니다.

 

pub.dev 위젯

 

글 작성 시점 기준(역자 주: 6월 초) pub.dev에 등록된 위젯은 약 23,000개나 되기 때문에 상상 가능한 대부분의 UI를 손쉽게 구현할 수 있습니다. 물론 필요에 따라 완전히 새로운 위젯을 직접 만드는 것도 가능합니다.

 

 

위젯 트리

Flutter의 위젯들은 기본적으로 트리 형태의 구조를 따릅니다.

 

@override
 Widget build(BuildContext context) {
   return Scaffold(
     appBar: AppBar(
       title: Text(widget.title),
     ),
     body: Center(
       child: Column(
         mainAxisAlignment: MainAxisAlignment.center,
         children: <Widget>[
           const Text(
             'You have pushed the button this many times:',
           ),
           Text(
             '$_counter',
             style: Theme.of(context).textTheme.headline4,
           ),
         ],
       ),
     ),
     floatingActionButton: FloatingActionButton(
       onPressed: _incrementCounter,
       tooltip: 'Increment',
       child: const Icon(Icons.add),
     ),
   );
 }

신규 Flutter 프로젝트의 placeholder 중 일부

 

위의 코드를 보면 Scaffold가 부모(parent)로서 appBar, body, floatingActionButton 파라미터를 받는 것을 확인할 수 있습니다. 그리고 AppBar는 텍스트값을 가진 Title을 파라미터로 다시 받는 연속적인 트리 구조입니다.

 

위젯 트리 구조
Flutter 위젯 트리 구조 예시

 

위젯 트리는 부모(parent)[3]와 자손(descendants)[4] 또는 자식(child/children)으로 구분되는 계층 구조로 이루어져 있습니다. 이런 트리 구조에서는 자식 위젯이 많아질수록 위젯 트리가 점차 넓어지는데, 신경 쓰지 않고 개발하다 보면 코드에 들여쓰기가 계속 중첩되어 마치 “>” 부등호를 옆에 두고 코드를 작성하는 모양이 되기도 합니다.

 

팁 : 과도한 들여쓰기는 코드를 리팩터링해야 한다는 신호입니다. 일부 위젯 계층을 떼어내어 별도의 위젯으로 추출해야 할 수 있습니다.

 

 

Flutter에서 UI를 구현하는 방법

1. 개발 방향

각각의 위젯마다 화면에 적절한 배치 위치가 다르기 때문에 상단에 구현되는 항목들에 대한 코드를 먼저 작성한 후 아래 방향으로 개발을 진행해야 합니다.

 

Flutter UI

 

가로 방향은 지금 여러분이 이 글을 읽는 것처럼 왼쪽에서 오른쪽으로 코드를 작성하면 됩니다. 단, 오른쪽에서 왼쪽으로(RTL, right-to-left) 개발이 요구되는 경우에는 요건에 맞춰 개발하면 됩니다.

 

2. 위젯 선택하기

개발 방향을 숙지한 이후에는 구현하는 UI에 맞는 위젯을 선정해야 합니다. Flutter에서 위젯의 이름은 그 기능과 모양을 사용자들이 이해하기 쉽도록 작명됩니다. 그렇기 때문에 정확히 어떤 위젯을 사용할지 모르는 채로 프로젝트를 시작했더라도 간단한 검색을 통해 적합한 위젯을 찾을 수 있습니다.

 

3. 위젯 그룹 사용하기

위젯들을 그룹화해서 세로로 정렬하려면 Column을, 가로로 정렬은 Row를 사용하면 됩니다. 그리고 만약 위젯들이 서로 겹쳐야 하는 구조라면 StackPositioned를 사용하면 됩니다.

 

a. Column/Row

Column과 Row는 CSS의 display: flex;와 유사한 개념입니다. Column이나 Row 안에서는 MainAxisAlignmentCrossAxisAlignment 프로퍼티를 통해 위젯이 주축(Main axis) 또는 횡축(Cross axis)에서 정렬되는 방식을 조정할 수 있습니다. 횡축의 정렬 방식은 Center, Start, End, Stretch가 있고, 주축에는 Center, Start, End, SpaceEvenly, SpaceAround, SpaceBetweeen 방식이 있습니다.

 

주축과 횡축은 위젯에 따라 달라질 수 있습니다. Column에서는 세로축이 주축이고 가로축이 횡축입니다. 반대로 Row에서는 가로축이 주축, 세로축이 횡축입니다.

 

위젯 column
<출처: https://arzerin.com/2019/11/20/flutter-column/>
위젯 Row
 <출처: https://arzerin.com/2019/11/20/flutter-row/>

 

Column 혹은 Row에서 어떤 특정한 자식 위젯에 최대 가용 면적을 할당하려면 해당 위젯을 Expanded 위젯으로 감싸면 됩니다.

 

b. Stack 위젯

Stack은 자식(Children) 프로퍼티에 정의된 위젯 목록 중 가장 상위 항목이 가장 아래에 깔리고 하위 위젯일수록 위에 위치하도록 위젯들을 겹칩니다. Stack 안에서 위젯들의 배치는 alignment 프로퍼티의 topCenter, center, bottomEnd로 조정할 수 있습니다.

 

Stack의 크기는 배치되지 않은(non-positioned)[5] 위젯을 기준으로 계산됩니다. 따라서 stack 안에 최소 한 개의 배치되지 않은 위젯이 있어야 하고, 만약 그렇지 않다면 반드시 크기를 명시하는 부모 위젯으로 stack을 감싸야 합니다.

 

Positionedbottom, top, left, right 프로퍼티를 이용해서 하위 위젯의 위치를 stack에 맞춰 조정할 수 있습니다. 여기서 주의할 점은 프로퍼티 값을 음수로 설정해서 위젯을 역방향으로 배치하는 경우 위젯의 일부가 잘려 나갈 수 있다는 것입니다. Positioned 된 위젯이 잘리지 않게 하려면 반드시 clipBehavior: Clip.none 프로퍼티를 별도로 설정해야 합니다.

 

하위 위젯 위치
Full code here.

 

4. 리팩터링을 위한 위젯 생성 방법

위젯 트리에서 아래 두 가지 상황이 발생한다면 리팩터링을 고려해야 합니다.

  1. 트리의 일부분이 과도하게 확장되어있고, 문제의 부분만을 떼어놔도 독립적 유닛으로 인정될 수 있는 경우
  2. 일부 위젯들이 사소하게만 수정된 채 반복 사용되는 경우

 

간략한 리팩터링 절차는 아래와 같습니다.

 

  1. 신규 생성되는 위젯의 이름을 반영하는 Dart 파일을 생성합니다.
  2. 위젯에 상태(State)[6] 관리 필요 여부에 따라 StatefulWidget 또는 StatelessWidget를 상속(extends)하는 신규 클래스를 생성합니다.
  3. 빌드 메서드(build method)를 통해 위젯을 생성합니다.
  4. (선택 사항) 임의 파라미터(Optional Parameter)[7]를 추가합니다.

 

// in counter_display.dart
import 'package:flutter/material.dart';

class CounterDisplay extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
  	  mainAxisAlignment: MainAxisAlignment.center,
      children: [
        Text('You have pushed the button this many times:'),
        Text('$counter', style: TextStyle(fontSize: 24)),
      ],
    );
  }
}

// in main.dart
//
// ... 
  body: Center(child: CounterDisplay()),
// ...

 

5. 위젯 커스터마이징 방법

23,000개 이상의 위젯에서도 원하는 UI 컴포넌트를 찾지 못해서 커스텀 위젯을 생성해야 하는 경우도 있습니다.

 

a. Contrainer 위젯

HTML의 div와 유사한 Flutter의 Container 위젯을 이용하면 다양한 UI를 구현할 수 있습니다. 컨테이너의 프로퍼티는 대표적으로 constraints, decoration, margin, padding, transform 등이 있는데, 그중에서도 decoration 하위의 BoxDecoration을 이용하면 컨테이너 위젯의 모양을 사용자의 요구에 따라 자유롭게 변경할 수 있습니다.

 

b. GestureDetector / InkWell

GestureDetector는 탭이 한 번만 감지되면 onTap에 할당된 기능을 실행하고, 두 번 감지되면 onDoubleTap의 기능을 실행하는 등 감지되는 사용자 동작에 따라 다른 콜백[8]을 실행해서 위젯과 사용자가 상호작용하도록 합니다.

 

팁 : 사용자가 GestureDetector의 하위 영역에 있는 빈 공간을 터치할 때는 별도의 콜백[8]이 호출되지 않습니다. 이에 반응하도록 하려면 HitTestBehavior 프로퍼티를 transpective로 설정해야 합니다.

 

GestureDetector(
 // set behavior to detect taps on empty spaces
 behavior: HitTestBehavior.translucent,
 child: Column(
   children: [
     Text('I have space after me ...'),
     SizedBox(height: 32),
     Text('... that can detect taps.'),
   ],
 ),
 onTap: () => print('Tapped on empty space.'),
)

GestureDetector의 사용 예시

 

InkWell은 사용자의 동작을 감지하고 기능을 실행한다는 점에서 GestureDetector와 유사합니다. 하지만 상대적으로 제한적인 수의 동작에만 반응하며, 물결이 퍼져나가는 애니메이션을 구현할 수 있다는 차이가 있습니다.

 

사용자 동작 감지
<출처: https://stackoverflow.com/q/58285012/13644299>

 

또한, InkWell을 사용하기 위해서는 반드시 상위에 Material을 두어야 하기 때문에 MaterialApp[9] 이 InkWell의 조상이 아닌 경우에는 반드시 Material로 감싸는 처리가 필요합니다.

 

 

스크롤링 인터페이스 구현 방법

대부분의 위젯들은 스크롤을 지원하지 않기 때문에 스크롤 인터페이스 구현을 위해서는 ListView와 같은 위젯을 사용해야 합니다.

 

ListViews 스크롤 방향은 기본적으로 수직 방향입니다. 만약 가로 스크롤이 필요하다면 scrollDirection 프로퍼티 설정을 Axis.horizontal로 변경해야 합니다. 이 외에도 많은 스크롤링 위젯이 있지만, 그중에서 slivers를 통해 강력한 스크롤 메커니즘을 제공하는 CustomScrollViewSliverAppBarDraggableScrollableSheet를 간략히 소개하겠습니다.

 

SliverAppBar는 사용자가 스크롤을 할 때 이에 맞춰 앱바의 크기가 줄어드는 효과를 구현합니다. DraggableScrollableSheet는 사용자의 스크롤과 무관하게 액션 버튼을 앱 하단에 고정시키는 효과를 구현합니다.

 

스크롤링 인터페이스 예시1
CustomScrollView 예시

 

스크롤링 인터페이스 예시2
DraggableScrollableSheet 예시

 

 

커스텀페인트란?

CustomPaintpainter 프로퍼티를 이용해서 자유자재로 UI를 그릴 수 있는 캔버스를 제공하는 위젯으로 HTML의 Canvas API와 유사합니다.

 

커스텀 페인트
<출처: https://blog.codemagic.io/flutter-custom-painter/>

 

CustomPaint는 사용 빈도가 높지 않기 때문에 이 글에서는 UI 구현에 상당히 높은 유연성을 주는 요소로 정도로 알아두고 넘어가겠습니다.

 

 

요약

모바일, 웹, PC의 플랫폼을 망라하는 애플리케이션 개발에서 UI 구현은 가장 핵심이 되는 개발 요소 중 하나입니다. 여기에 있어 선언형 UI 프레임워크이자 크로스 플랫폼 개발 툴인 Flutter를 사용하면 몇 가지 위젯의 조합을 통해 다양한 플랫폼에서 작동하는 애플리케이션의 UI를 손쉽게 구현할 수 있습니다.


[1] 상태(동적으로 변화 가능한 데이터)를 포함한 위젯
[2] 상태(동적으로 변화 가능한 데이터)를 불포함한 위젯
[3] 부속 트리(subtree)를 가진 노드
[4] 부모에 속하는 부속노드
[5] Positioned 처리된 부모에 속하지 않는 자손 위젯
[6] 위젯이 작성될 때 동기적으로 읽을 수 있으며 위젯의 수명 동안 변경될 수 있는 정보
[7] 주어진 함수를 호출할 때 지정할 필요 없는 변수
[8] 어떤 이벤트가 발생한 후 수행되는 함수
[9] 구글이 지향하는 Material Design을 사용할 수 있게 해주는 위젯

 

<원문>

How to Implement Any UI in Flutter

 

위 번역글의 원 저작권은 Obumuneme Nwabude에게 있으며, 요즘IT는 해당 글로 수익을 창출하지 않습니다.

댓글 0

요즘IT의 번역글들

이 프로필을 만든 저만 해도 영어가 서툴러 영어로 된 기사는 읽는 게 더딥니다. 그래서 준비했습니다. 읽어볼만한 해외 소식들을 번역해 전합니다. We are the world.

윈도우11은 실패작이다

프로덕트

“파이썬은 느리다”에 대한 반론

개발

파이썬 초보자가 저지르는 10가지 실수

개발

우리가 주목할 UI/UX 디자인 트렌드

디자인

2022년 프론트엔드 개발 동향

개발

코드 리뷰 문화

개발

데이터 분석가는 무슨 일을 할까요?

개발

최고의 오픈 소스 개발 도구 Top 8

개발

데이터 분석이란 무엇일까?

개발

자바 언어의 장단점과 2022년 트렌드

개발

데브옵스(DevOps) vs 데브섹옵스(DevSecOps)

개발

엑셀을 사용한 아름다운 데이터 시각화

디자인

여러분을 더 나은 플러터 개발자로 만들어줄 7가지 프로젝트

개발

모든 디자이너가 숙지해야 할 피그마 팁과 노하우

디자인

디자인 원칙과 디자인 가치, 그리고 디자이너

디자인

디자인, 산출물 그 이상을 넘어

디자인

이 회사는 디자인에 투자하고 있는 회사일까요?

디자인

애자일은 정말 디자인을 배제하나요?

디자인

평판 관리가 프리랜서 경력에 미치는 영향

프리랜싱

리액트 네이티브 개발자들이 겪는 가장 빈번한 5가지 문제와 해결책

개발

“솔직히 우리가 하는 것은 스크럼이 아닙니다!”

기획

데이터 시각화가 인류를 위기에서 구한 세 가지 역사적 사건

디자인

NFT의 장밋빛 미래는 사실일까?

기획

피그마 토큰으로 디자인 시스템 만들기

디자인

디자이너+개발자 = 슈퍼팀 만들기

기획

1인 개발자로서 테크 스타트업을 운영하며

기획

웹 디자이너가 PX대신 REM을 사용해야 하는 이유

디자인

100개의 스타트업을 멘토링하며 깨달은 성공의 비밀

기획

중화권 앱 UI가 영미권 앱 UI와 다른 점 알아보기

프로덕트

내가 테크 리더로 일하면서 얻은 8가지 교훈

기획

모두가 즐길 수 있는 디자인 검토 회의 만들기

디자인

프로덕트 매니저에서 프로덕트 마스터로

기획

10배 이상 뛰어난 개발자가 되는 법

개발

제품 디자인 관점에서 바라보는 NFT 아바타 열풍

디자인

에어비앤비: 대규모 iOS 앱 개발 생산성을 위해 바꾼 것들

개발

스포티파이: 맞춤형 플레이리스트 개발 비하인드 스토리

개발

프리랜서가 일하게 될 15가지 유형의 프로젝트

프리랜싱

슬랙: 제품 원칙을 통해 다시 태어난 알림 기능

프로덕트

페이팔: 실시간 그래프 데이터베이스 분석을 통해 사기를 방지하는 방법

개발

트위터: 수십억 개의 이벤트를 실시간 처리하기

개발

슬랙: 4가지 애자일 가치와 방법

기획

스퀘어: 모바일 우선을 넘어 웹에서 누리는 모바일앱 경험

디자인

스포티파이: 카피를 언어로 만드는 UX 라이팅

기획

마이크로소프트: 디자인의 미래를 위한 4가지 원칙

디자인

메타: AR/VR 경험까지 고려한 디자인 청사진

프로덕트

슬랙: 훌륭한 마케팅 카피를 위한 5가지 원칙

기획

2022년 UX/UI 디자인 트렌드

디자인

구글: 가변 폰트의 놀라운 활용법

디자인

에어비앤비: 위기 상황에서의 디자인 원칙 5가지

디자인

어떻게 두 명의 인턴이 수백만 개의 코드들을 보호할 수 있었나

개발

Lattice로 마이크로 프론트엔드를 구축하는 법

개발

Cool Cats NFT를 구축하면서 배운 것

개발

웹 컴포넌트가 프론트엔드 프레임워크를 대신할까?

개발

당신이 NFT에 대해 알아야 할 모든 것

개발

우리에겐 이상하지만 개발자들에겐 일상인 일들

개발

Next.js 12에서 주목해야 할 5가지 변화

개발

스벨트 vs 리액트, 누가 더 뛰어날까?

개발

개발자를 위한 iOS 15의 새로운 기능

개발

내가 오픈소스를 싫어하는 이유

개발

프로덕트 매니지먼트 고객 여정 5단계

기획

클럽하우스의 인기는 모두 거품이었다?

프로덕트

데이터 기반 의사결정의 장점

기획

시각 디자인의 폐쇄성 법칙이란?

디자인

사용자 경험(UX) vs 서비스 디자인

기획

프로덕트 매니저는 하루 종일 무슨 일을 할까?

기획

제품 주도 성장은 어떻게 이루어지는가?

기획

UX를 망치지 않는 설득력 있는 배너 디자인

디자인

팝업(Pop-up)으로 불리는 것들에 대하여

디자인

드롭다운(Drop-down)으로 불리는 것들에 대하여

디자인

당신의 생각을 표현하는 새로운 이모지

디자인

가장 똑똑한 소프트웨어 엔지니어에게 배운 10가지 교훈

개발

성공적인 UX 프로젝트를 위한 가장 중요한 질문

디자인

2021년, UI 디자이너가 모바일 앱에서 흔히 저지르는 실수

디자인

IT 매니저가 되는 방법과 성공하기 위한 요소

기획

슬랙(Slack) 같은 앱을 만들려면 비용이 얼마나 들까?

개발

아웃소싱이 이토록 인기를 얻게 된 이유는?

아웃소싱

마케터가 UX 관련 역량을 키워야 하는 이유

기획

미니멀리즘 디자인의 핵심적인 요소들

디자인

새로운 소프트웨어 개발사가 필요하다는 7가지 신호

아웃소싱

2021년을 이끌어가는 프론트엔드 개발 트렌드 5가지

개발

PM을 성장시키는 학습 프레임워크

기획

UI 카피라이팅, 어떻게 써야 하나요?

기획

트렌드 예측: 경쟁에서 앞서는 방법

기획

제품 사고(product thinking)의 힘

기획

인하우스 vs 아웃소싱, 소프트웨어 개발 어떻게 하나요?

개발

그림을 못 그리는 사람도 쉽게 와이어프레임 그리는 방법

기획

스타트업 기업들에게 아웃소싱이 중요한 이유

아웃소싱

제품과 기능, 성공적으로 종료하는 방법 (下)

기획

제품과 기능, 성공적으로 종료하는 방법 (中)

기획

제품과 기능, 성공적으로 종료하는 방법 (上)

기획

UX 디자이너에게 반드시 필요한 12가지 스킬

디자인

패스워드 없는 세상이 오고 있다

개발

디자이너를 쉽게 잃는 방법 10가지

디자인

프론트엔드 코딩 작업에 영감을 줄 8가지 아이디어

개발

구글이 아웃소싱을 하는 이유: 아웃소싱 성공사례 5가지

아웃소싱

일 잘하는 PM이 되기 위한 로드맵 도구 5가지

기획

이제는 말할 수 있다! 아웃소싱에 대한 오해 11가지

아웃소싱

디자인 트렌드, 모던 미니멀 스타일의 UI 가이드

디자인

MVP 개발을 아웃소싱으로 해도 될까요?

개발

온보딩 효과를 높이는 '좋은' 귀차니즘 3가지

기획

게임처럼 즐겨라, 게임화 기법 TOP3

기획

시니어 소프트웨어 엔지니어는 어떻게 일할까?

개발

프로덕트 매니저가 글을 잘 써야 하는 이유

기획

2030년엔 사라질 수도 있는 프로그래밍 언어 5가지

개발

고객들이 언제나 옳은 것은 아니다

기획

유저 스토리는 무엇인가?

기획

고객 성공을 위한 14계명

기획

8px 그리드의 시대가 끝나고, 4px 그리드의 시대가 열릴까?

디자인

모바일 앱은 더 이상 스타트업에게 좋은 아이디어가 아니다

기획

과연 구글의 UX 강좌는 도움이 될까요?

디자인

프로덕트 매니저 여러분, ‘소비자의 요구사항 수집’을 그만두십시오

기획

고객 여정과 경험 지도의 차이점

기획

내가 AI 업계를 떠난 이유 5가지

기획

모달윈도우(팝업)를 디자인할 때 생각할 9가지 원칙

디자인

대기업 vs 중소기업, B2B SaaS 스타트업을 위한 시장은?

기획

내가 개발 인터뷰에서 면접자에게 감동한 이유

개발

HTTP의 새로운 메서드, 서치(SEARCH)에 대하여

개발

세상의 모든 프로덕트 디자이너를 위한 5가지 심리학 원칙

디자인

2021년 테스트 자동화 트렌드 리포트 (下)

개발

2021년 테스트 자동화 트렌드 리포트 (上)

개발

아마존과 스포티파이는 어떻게 사용자를 유지하고 측정할까?

기획

UX 디자이너라면 필수적으로 알아야 할 5가지 법칙

디자인

앵귤러 vs 리액트, 2021년의 승자는?

개발

2021년, SaaS 스타트업 시작을 위한 놀라운 아이디어 10가지

기획

디지털 제품 관리에서 B2B와 B2C 사이의 차이점은?

기획

빠르게 실행할 수 있는 ‘제품 요구사항 문서(PRD)’ 만들기

기획

더 나은 제품을 위한 프로덕트 메트릭스 가이드

기획

노 코드(No Code) 트렌드로 프로그래머들은 일자리를 빼앗길까?

개발

넷플릭스의 플랫폼: 코스모스(Cosmos)에 대하여

프로덕트

비즈니스와 애자일 조직은 어떻게 친해질 수 있을까요?

기획

효과적인 제품 전략 세우기: 다수의 전략적 트랙(MuST) 활용

기획

1년 만에 이메일 마케팅 효과를 극대화했던 방법

기획

솔루션 아키텍트를 위한 팁: 아키텍처 다이어그램의 5가지 유형

개발

새로운 맥 OS ‘빅서’에 대한 UX 디자이너의 생각

디자인

디자인 트렌드, 뉴모피즘의 정석

디자인

스스로 학습하는 UI/UX 디자이너가 되기 위한 2021년 로드맵, 3편

디자인

스스로 학습하는 UI/UX 디자이너가 되기 위한 2021년 로드맵, 2편

디자인

2021년 모바일 UX 트렌드 10가지

디자인

스스로 학습하는 UI/UX 디자이너가 되기 위한 2021년 로드맵, 1편

디자인

앱 설정 기능의 UX를 개선하는 효과적인 방법

디자인

다크모드 UI 디자인의 원칙

디자인

온라인 고객 경험을 개선하기 위한 5가지 방법

기획

신생 스타트업에서 일하는 프로덕트 매니저를 위한 현실적인 조언

기획

웹 개발자와 소프트웨어 개발자의 차이는 무엇인가요?

개발

랜딩 페이지 디자인을 개선하는 13가지 꿀팁

디자인

오프라인 비즈니스가 온라인에서 존재감을 가져야 하는 이유 5가지

기획

상향식 가격 책정 및 패키징 정책: 사용자 여정을 가이드로 활용하기

기획

B2B 제품의 UX, 그것은 숨겨진 영역인가요?

기획

상단 내비게이션 vs 사이드 내비게이션, 어느 것이 더 나을까?

디자인

자동완성 검색 기능 UX 설계를 위한 8가지 팁

디자인

프로덕트 매니저는 전문적인 IT 기술을 갖춰야 하나요?

기획

실리콘밸리 51개 기업들이 말하는 프로덕트 매니저의 역할 9가지

기획

아웃소싱에 대한 모든 것

아웃소싱

앱 디자인 가이드, 사람들이 즐겁게 사용할 수 있는 앱을 만드는 법

디자인

처음부터 완제품이 아니라 ‘MVP’를 만들어야 한다

기획

플러터 vs 리액트 네이티브 vs 네이티브, 성능이 더 우수한 것은?

개발

스타트업 프로덕트 매니저로 성장하는 법, 30-60-90일 플랜

기획

당신의 두뇌는 진보하고 있다: 성취감을 위한 3가지 전략

기획

디자이너들을 편하게 해주는 HTML/CSS 마법 10가지

디자인

코딩의 미래는 ‘노 코드(No Code)’이다

개발

내가 엔지니어링 매니저로 일하면서 저지른 실수들

개발

내가 롬 리서치(Roam Research)를 좋아하는 이유와 실제 사용법 (下)

기획

내가 롬 리서치(Roam Research)를 좋아하는 이유와 실제 사용법 (上)

기획

프로그레시브 웹 앱(PWA)이란 무엇이며, 왜 필요한가?

개발

PWA vs 네이티브 앱, 어떤 것을 선택해야 할까?

개발

UI 디자인에 여백을 활용하는 8가지 팁

디자인

마이크로소프트와 링크드인의 새로운 시도, 프리랜서 마켓에 도전장을 던지다

기획

토마스넷은 왜 가입자 수를 폭발적으로 늘려준 테스트 결과를 거부했을까?

기획

잘 팔리는 기업용 소프트웨어 디자인하기

디자인

파이어베이스(Firebase)란 무엇인가? 파이어베이스 심층 탐구 : 하편

개발

파이어베이스(Firebase)란 무엇인가? 파이어베이스 심층 탐구 : 중편

개발

파이어베이스(Firebase)란 무엇인가? 파이어베이스 심층 탐구 : 상편

개발

업워크(Upwork)가 조사한 요즘 가장 인기 좋은 개발 기술 15가지

개발

일자리 산업이 휴먼 클라우드(human cloud)에 적응하는 방법

기획

팬데믹 이후 세계에서의 디지털 가속화는 어떤 모습일까?

기획

같은 분야를 다룬 글들을 권해드려요.

요즘 인기있는 이야기들을 권해드려요.

일주일에 한 번!
전문가들의 IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.

일주일에 한 번! 전문가들의 요즘IT 이야기를 전달해드려요.

[구독하기] 버튼을 누르면 개인정보 처리방침에 동의됩니다.