다른 서비스
NEW
기획
디자인
개발
프로덕트
아웃소싱
프리랜싱
비즈니스
최근 검색어
전체 삭제
최근 검색어가 없습니다.

개발

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

해외 유명 IT 기업은 각자 자신들의 블로그를 운영해 개발 방법과 기업 문화 등을 소개하고 있습니다. 요즘IT는 이러한 IT 기업 블로그의 콘텐츠를 번역해 소개하는 시리즈를 준비했습니다. 이들은 어떻게 사고하고, 어떤 방식으로 일하는 걸까요?

 

이번 글은 클라우드 기반의 업무 협업 툴로 알려져 있는 ‘슬랙(Slack)'의 ‘How Two Interns Are Helping Secure Millions of Lines of Code'를 번역했습니다. 슬랙은 어떻게 보안 취약점을 발견했을까요? 아래의 글을 통해 두 명의 인턴이 슬랙을 지켜낸 과정을 알아보겠습니다.

 

클라우드 기반의 팀 협업 툴로 잘 알려진 슬랙(Slack)은 사전에 시스템 보안을 철저하게 보장하는 것으로 매우 잘 알려져 있습니다. 이러한 시스템의 철통 보안을 유지하는 방법 중 한 가지는 정적 코드 분석(Static code analysis)입니다. 프로그램을 실행하지 않고 코드를 검사하는 툴을 사용해서 자동으로 보안 이슈를 탐지하는 방법인데요. 정적 코드 분석 툴은 보안에 기반을 둔 규칙들을 근거로 보안이 취약한 부분과 불완전한 프로그래밍 사례를 자동으로 인식할 수 있어, 보안 엔지니어는 더 넓은 대역폭을 사용할 수 있게 됩니다. 

 

슬랙이 보안 측면에서 꽤 안정적이고 보안 인증 요건을 충분히 충족시킬 수 있을 만큼 안정성이 높아서, 수요가 점차적으로 증가하고 있는 공공 부문으로의 진출을 꾀하다 보니, 정적 코드 분석 프로그램을 확장하는 것이 매우 중요한 사안이 되었습니다. 정적 코드 분석은 일종의 가드레일로, 최악의 보안 취약점이 코드 베이스를 뚫지 못하도록 사전에 철저하게 막아주는 역할을 합니다. 그래서 지난 3분기 동안 슬랙의 보안팀은 정적 코드 분석을 최우선으로 꼽았고, 다음 분기에도 집중할만한 부분 중 하나입니다.

 

우리가 코드 베이스[1] 작성 시 주로 사용 언어는 핵(Hack)인데요. 핵 언어는 페이스북이 PHP의 한계를 극복하고자 개발한 PHP와는 별개인 독립적인 언어로, 현재로써는 핵 언어에 폭넓게 적용 가능한 정적 분석 툴이 없습니다. 슬랙에 핵으로 작성된 코드라인만 해도 5백만 줄이 넘는데, 어떻게 이런 대규모의 시스템을 안정적으로 유지 보수하는 일이 가능할까요?

핵(Hack) 코드라인


문제점: 우리(니콜라스 린, 데이비드 프랑켈)는 이 문제를 해결하고자 지난여름 내내 애를 먹었습니다.


핵 언어를 위한 정적 분석 툴 구축하기

새롭게 정적 분석 툴을 구축하는 작업은 매우 복잡하고, 드는 비용도 막대해서 이익을 상회해 버리기 십상입니다. 그래서 우리는 정적 분석 툴을 새로 짜는 대신, 기존의 오픈 소스 툴인 Semgrep을 확장시켜보기로 했습니다. 슬랙은 Semgrep을 사용해서 6개의 서로 다른 언어로 작성된 코드를 스캔해 보안 취약점을 발견하고, 기존의 인프라 스트럭쳐로 Semprep을 CI/CD[2] 파이프라인에 통합시킵니다. 여기서 우리는 슬랙의 기존 정적 분석 툴과 시중에 있었지만 한 번도 사용해보지 않은 툴을 함께 사용하면 공학적 측면에서 엄청난 도약을 기대해볼 수 있겠다는 결론을 내렸습니다. 하지만 당장에 Semgrep은 핵 언어를 지원하지 않는 게 가장 큰 문제였어요. 이 문제를 해결하고자 우리는 r2c의 Semgrep 개발자들에게 컨택했고, 이 복잡한 과정을 크게 아래 두 파트로 요약했습니다.

1. 핵 언어의 문법은 무엇인가?

2. Semgrep이 어떻게 이 문법을 이해할 수 있을 것인가?

 

 

핵 언어 문법 개발하기

모든 인간의 언어가 그렇듯, 프로그래밍 언어도 자체적인 문법 구조를 가지고 있습니다. 각 소스 언어[3]가 가지고 있는 문법 규칙이 자연스럽게 해당 소스 언어를 정의하는 특징이 되기 때문에, 우리는 핵 언어를 정의할 수 있는 문법 규칙을 작성해야 했습니다. 그리고 이 문법을 어떤 소스 코드에든 적용해보면, 그 코드의 구조 내지는 구상 구문 트리[4](CST)를 이해할 수 있게 됩니다. CST는 적용한 문법을 기반으로 파싱[5]된 소스 코드를 시각적으로 정확하게 보여줍니다.

 

핵 소스 트리시터
예시: 핵 소스(위)로 작성한 트리 시터 CST (아래)

 

위 예시에 나타난 전환을 수행하는데 트리 시터(Tree-sitter)를 사용했는데요. 트리 시터는 처리속도가 아주 빠르고 견고한 라이브러리로, 적용한 문법 규칙을 따라 파서[6]를 생성합니다. 이렇게 생성된 파서는 소스코드를 CST로 전환하는 데 사용됩니다. 트리 시터 CST는 강력한 구문 강조 기능, 코드 폴딩[7](Code folding, 린팅[8]과 같이 다양한 유스 케이스[9]에 사용됩니다. 우리에게 가장 중요한 부분은 Semgrep이 트리 스터 CST를 사용하여 의미론적 측면에서 핵을 이해할 수 있다는 점이었는데요. 아래 도표를 한 번 같이 볼까요?

 

소스코드 CST 전환
소스코드를 CST로 전환하기

 

다행스럽게도 슬랙의 백엔드 엔지니어 안토니오 오초아 솔라노는 이미 개인 프로젝트 차원에서 핵 언어 문법을 개발 중이었습니다.

 

“한 언어에 최적화된 꽤 괜찮은 툴을 발견해도 다른 프로그래밍 언어와 섞어서 사용할 수 없을 때가 대부분이라 답답할 때가 많았어요. 이런 상황에서 트리 시터를 알게 되었고, 다른 언어로 확장할 수 있는 개발자 툴의 생태계가 펼쳐질 것을 상상하니 매우 흥분되었죠. 핵 언어 문법 개발을 시작하면서 트리 시터 활용법을 배웠고, 이는 자연스럽게 개인 프로젝트로 이어졌습니다.” - 안토니오 오초아 솔라노

 

우리는 안토니오가 먼저 쌓아 둔 핵 언어 문법에 기반해서 점진적으로 문법을 수정해 나갔습니다. 내부 레포지토리에서 여러 번 반복해서 문법을 실행하고, 그때마다 발생하는 오류를 해결하며 문법 규칙을 작성했습니다. 문법에 오류가 없는지 체크하기 위해서 파싱 비율(parse rate)을 적극적으로 활용했는데요. 파싱 비율은 CST를 구성하기 위해 적절하게 파싱 될 수 있는 코드가 몇 % 나 되는지 나타냅니다. 이렇게 반복적인 오류 수정과 문법 규칙 작성 작업으로 5백만 줄이 넘는 코드라인 중 파싱이 안 되는 12만 줄 이상의 코드라인을 15줄까지 줄여서 무려 99.999% 이상의 파싱 비율을 달성할 수 있었습니다.

 

핵(Hack)
핵(Hack)


그리고 GitHub에 핵 언어 문법을 오픈 소스로 공유할 수 있게 되어 무척 기쁩니다! 하지만 이에 만족하지 않고 100%의 파싱 비율을 달성하기 위해 현재도 꾸준한 업데이트를 진행 중입니다.

 

 

Semgrep에 문법 입력하기

Semgrep의 한 가지 아쉬운 점은 트리 시터 CST 직접 사용할 수 없다는 것입니다. Semgrep은 CST가 아닌 추상 구문 트리(AST)로 문법을 이해합니다. 추상 구문 트리는 오로지 필수적인 정보만을 획득하고, 주석처럼 불필요한 문법이나, 괄호 같은 트리 구조에서 파생된 문법을 제외시킵니다. 또, Semgrep AST는 Semgrep이 어떠한 프로그래밍 언어도 이해할 수 있도록 공통되는 구조를 제공해줍니다.

 

여기서 각각의 프로그래밍 언어는 별개의 CST나 AST를 가지는 것이 아니라, 모두 공통되는 하나의 Semgrep AST에 맵핑됩니다. 이렇게 해서 Semgrep은 여러 가지 언어를 이해할 수 있는 높은 확장성이 돋보이는 툴이 됩니다. Semgrep의 규칙과 AST에 맵핑된 프로그래밍 언어를 의미론적으로 잘 이해하면 소스 코드에서 어떤 부분이 취약한지 가려낼 수 있습니다. 아래 도표가 이 과정을 잘 보여주고 있습니다.

 

트리 시터 Semgrep
트리 시터를 사용한 Semgrep

 

트리 시터 CST를 Semgrep AST에 맵핑하려면, OCaml 언어로 커스텀 파서 파일을 작성해야 합니다. 이 과정도 아래와 같이 단계별로 실행했습니다.

1. 핵 언어 구성소[10] 확인하기

2. 문법과 CST에서 구성소가 잘 실행되는지 확인하기

3. AST에서 적절한 맵핑 확인하기

4. 해당 맵핑 실행하기

 

프로젝트상 가장 많은 노력과 시간을 집중적으로 쏟았던 부분이 바로 이 부분이 아닐까 싶은데요. 핵 언어, 트리시터, Semgrep, 그리고 OCaml 언어까지 다방면의 지식을 복합적으로 활용해서 작업해야 했어요. 이 과정에서 각각의 구성소에 집중적으로 파고들었고, r2c 관계자들과도 직접 만나 문제를 하나씩 해결하다 보니 파싱 비율을 꾸준하게 향상시킬 수 있었습니다. 현재 파싱 비율은 99.9%로 아주 높은 편이지만, 100%의 파싱 비율을 목표로 계속 업데이트를 진행하고 있습니다. 커스텀 파서가 완성되었으니, 이제 해야 할 일은 완성된 Semgrep 규칙을 작성하는 것만 남았네요. Semgrep은 이 규칙을 AST에 적용해서 보안 취약점을 찾아낼 수 있게 됩니다.

 

 

Semgrep 패턴 매칭 활용하기

프로젝트의 막바지에 다다르자, 우리는 본격적으로 Semgrep 규칙을 사용해서 위험한 코드를 감지하기 전에 필요한 마지막 단계를 실행할 수 있었습니다. Semgrep 규칙이 특수 구문으로 작성되긴 했어도, 이 구문이 핵 언어에서는 파싱이 되지 않습니다. 예를 들어, 취약한 해싱[11] 알고리즘 중 하나인 MD5로의 호출을 막고 싶다고 해봅시다. 핵 언어에서는 다음과 같이 나타날 수 있습니다.

 

‘md5(“some string to hash using md5, an insecure algorithm (md5를 사용해서 해싱할 문자열이 있음, 불완전한 알고리즘)”) 우리는 이 함수 호출을 어떤 식으로든 표시하고 싶기 때문에 Semgrep의 규칙 패턴은 아마 이 함수 호출을 이렇게 나타낼 겁니다. : ‘md5(…)’. 이 함수를 따라 모든 호출을 식별하고 싶었기에 우리는 줄임표가 어떤 인자(arguments)든 나타낼 수 있도록 설정했습니다. 또, AST에서 이 줄임표를 정확하게 식별하고자 트리 시터 파서를 확장해서 Semgrep에 특화된 구문을 추적했습니다. 자, 이렇게 해서 우리는 중첩 함수[12] 호출과 문(statement)을 체크하는 것과 같이 아주 복잡한 규칙도 작성할 수 있게 되었습니다. 이 구문을 좀 더 자세히 알고 싶으신가요? r2c의 상세한 설명이 여러분의 궁금증을 해결해 줄 겁니다.

 

슬랙은 Semgrep 규칙을 사용하여 사용자 인풋을 안전하게 관리하고, 인증 과정을 완벽하게 마무리할 수 있습니다. 이것은 OWASP(The Open Web Application Security Project, 오픈소스 웹 애플리케이션 보안 프로젝트)에서 최고 10순위 안에 드는 높은 수준으로, 우리가 Semgrep으로 직접 작성한 모든 핵 언어 코드의 보안 취약점을 체크하고 보안 위협으로부터 시스템을 안전하게 지킬 수 있게 해 줍니다. 훗날, 우리가 이 규칙을 더 큰 규모의 커뮤니티와 공유해서 누구든지 더 안전하고 안정적인 핵 코드를 작성할 수 있기를 진심으로 바랍니다.

 

 

프로젝트를 무사히 마치며

우리의 프로젝트를 요약하자면, 다듬어지지 않은 핵 소스 코드의 텍스트를 처음으로 CST(초기의 구조적 표현)로 맵핑하고 난 뒤 AST로 일반화하는 과정이라 말할 수 있습니다. Semgrep은 AST와 보안 규칙을 사용해서 잠재적인 보안 취약점을 가려냅니다. 아래 그림에 잘 나타나 있습니다.

Semgrep 핵 언어 지원 추가
Semgrep에 핵 언어 지원 추가하기

 

Semgrep에서 핵 언어를 실행하면 개발자가 최종적으로 배치하기 전에 새 코드에 적용되며, 전체 코드 베이스에 매일매일 적용됩니다. 이 작업은 보안 취약점을 자동으로 발견해서 슬랙의 가장 큰 코드 베이스에 보안상 침투하지 못하도록 사전에 예방하여, 슬랙을 사용하는 유저들에게 한층 더 높은 보안성을 제공합니다.

 

<참고 자료>

도표에 사용한 벌레 아이콘 출처: Freepik


[1] Codebase: 특정 소프트웨어 시스템, 응용 소프트웨어, 소프트웨어 구성 요소를 빌드하기 위해 사용되는 소스 코드의 모임

[2] CI/CD: 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법. 기본 개념은 CI는 지속적 통합(Continuous integration), CD는 지속적 배포(Continuous delivery)를 의미.

[3] Source language: 컴퓨터가 자동으로 프로그램을 번역하는 과정에서 입력으로 주어지는 프로그래밍 언어

[4] Concrete syntax tree: 소스코드에서 생략되는 부분이 없이 모든 구문의 입력값 정보를 가진 트리

[5] Parsing: 문장을 문법적으로 분석하는 것

[6] Parser: 인공 언어로 쓰여진 프로그램을 문법 규칙에 따라 구문 해석하고, 그것이 문법에 합치하는지 여부를 조사하는 알고리즘

[7] Code folding: 사용하지 않는 코드를 생략하는 기능

[8] Linting: 소스 코드를 분석하여 프로그램 오류, 버그, 스타일 오류, 의심스러운 구조체를 구분하고자 표시하는 도구

[9] Use case: 시스템의 동작을 사용자의 입장에서 표현한 시나리오. 시스템에 관련한 요구사항을 알아내는 과정

[10] Language construct: 식별자, 명령문, 모듈 등과 같은 프로그램 언어를 기술할 때 필요한 구문상의 구성 요소

[11] Hashing: 해시 함수를 사용해서 해시 테이블에 데이터를 저장하고 검색하는 기법

[12] Nested function: 함수 내에 위치한 또 다른 함수로, 바깥에 위치한 함수들과 달리 부모 함수의변수를 자유롭게 읽을 수 있는 함수

댓글 0

요즘IT의 번역글들

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

북극성 지표(North Star Metric) 선택하기

비즈니스

피그마는 여러분을 나쁜 디자이너로 만들고 있습니다

디자인

인터랙션 디자인 vs 시각 디자인

디자인

좋은 디자인 포트폴리오를 만드는 팁

디자인

나에게 맞는 웹 기술 스택을 고르는 방법

개발

윈도우11은 실패작이다

프로덕트

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

개발

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

개발

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

디자인

2022년 프론트엔드 개발 동향

개발

코드 리뷰 문화

개발

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

개발

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

개발

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

개발

Flutter로 UI를 구현하는 방법

개발

자바 언어의 장단점과 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 이야기를 전달해드려요.

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