ios

44 개의 포스트

toss

토스의 속도와 품질, 상용 도구로 충분한가 — 토션(Tossion) (새 탭에서 열림)

토션(Tossion)은 흩어진 자동화·수동 테스트 결과와 테스트 케이스를 하나의 플랫폼에서 연결하고, QA 조직이 필요한 기능을 직접 빠르게 확장하기 위해 만든 테스트 관리 플랫폼입니다. 테스트 런에는 당시의 테스트 케이스와 판정 근거를 스냅샷으로 보존해 과거 결과의 신뢰성을 확보하고, AI·PR 분석·실기기 자동화까지 하나의 흐름으로 통합했습니다. 토스는 상용 TCM의 기능을 사용하는 데 그치지 않고, 빠른 개발 속도와 품질 기준에 맞춰 플랫폼 자체를 계속 진화시키는 것을 목표로 합니다. ## 흩어진 테스트 정보를 하나의 기록으로 통합 - 기존에는 자동화 테스트 결과, 매뉴얼 테스트 결과, 테스트 케이스와 판단 근거가 서로 다른 곳에 흩어져 과거 결과를 확인하는 데 시간이 걸렸습니다. - 토션의 기본 구조는 **프로젝트 → 스위트 → 섹션 → 테스트 케이스**이며, 섹션은 트리 구조로 관리됩니다. - 테스트 케이스는 제품 변화에 따라 수정·삭제되지만, 테스트 런은 당시 검증 내용을 보존하기 위해 별도로 축적됩니다. - 테스트 런을 생성할 때 테스트 케이스를 단순 참조하지 않고 다음 정보를 복사해 독립적인 행으로 저장합니다. - Assignee - Test Step - Description - 테스트 런의 각 행에는 상태 변경 이력이 쌓이며, 누가 언제 어떤 Version에서 어떤 판단을 했는지 확인할 수 있습니다. - 섹션을 직접 선택한 테스트 케이스에는 Type·Platform 등의 필터를 적용하지 않습니다. 명시적인 선택이 자동 조건보다 우선하기 때문입니다. ## 테스트 런의 스냅샷과 변경 이력 - 테스트 런은 **Active → Completed → Closed** 상태로 진행됩니다. - Closed 시점에 테스트 케이스, 코멘트, 자동화 결과를 스냅샷으로 저장합니다. - 이후 원본 테스트 케이스가 수정되거나 삭제되어도 종료된 테스트 런의 화면과 리포트는 변하지 않습니다. - 이를 통해 “지난달에는 무엇으로 검증했는가”라는 질문에 당시 상태 그대로 답할 수 있습니다. ## 빠른 피드백을 반영하는 협업 기능 - Assignee별로 전체 테스트 수와 남은 테스트 수를 보여 주는 진척도 차트를 제공합니다. - Status, Type, Assignee, Version, Platform, RNR, History 등 실제로 필요한 필드만 추가·유지합니다. - 여러 사용자가 같은 테스트 런을 동시에 사용할 수 있도록 다음 기능을 제공합니다. - 현재 접속 중인 사용자 아바타 표시 - 사용자별 색상 구분 - 편집 중인 테스트 케이스와 Description 잠금 - 창을 닫거나 연결이 끊기면 잠금 자동 해제 - 다른 사용자의 Status 변경을 새로고침 없이 반영 - 핵심은 기능의 규모보다 사용자 요청을 개발·배포·활용하는 시간이 짧다는 점입니다. ## 상용 TCM 대신 직접 만든 플랫폼 - 토스의 빠른 개발 속도에서는 품질 검증도 같은 속도로 변화해야 하며, 품질이 속도의 희생양이 되어서는 안 됩니다. - 상용 도구는 제공 업체가 정한 기능과 로드맵 안에서만 사용할 수 있습니다. - 토스가 필요로 한 것은 정해진 기능을 제공하는 도구가 아니라, 새로운 요구를 즉시 추가할 수 있는 플랫폼이었습니다. - 이를 기반으로 다음 기능을 직접 추가했습니다. - 릴리즈 PR 분석 - AI 기반 테스트 케이스 생성 - 실기기 회귀 테스트 실행 - 자동화 결과를 수동 테스트 케이스별로 기록 ## 릴리즈 PR 분석과 QA 범위 결정 - RC 빌드나 릴리즈 마일스톤에 포함된 PR을 모두 수집해 QA 라벨이 있는 PR과 없는 PR로 나누어 분석합니다. - QA 라벨이 있는 PR은 검증 관점을 정리하고, 라벨이 없는 PR은 정말 QA 검증이 필요 없는지 다시 확인합니다. - 분석 목적은 기능 요약이 아니라 “이번 릴리즈에서 반드시 확인해야 할 항목”을 찾는 것입니다. - QA 서버의 Agent가 토션에 등록된 작업을 주기적으로 확인하고, 작업을 받으면 서버에 로그인된 AI를 실행합니다. - 수백 개의 PR을 한 번에 처리하지 않고 여러 묶음으로 나누어 병렬 분석합니다. - AI 결과는 다음과 같은 규칙으로 검증합니다. - 화면명이나 구체적인 조건이 없는 모호한 문장 - PR 제목을 그대로 옮긴 요약 - 함수명이 그대로 남은 설명 - 재현 단계·기대 결과·실패 증상·판단 근거가 빠진 테스트 케이스 - 부적합한 결과는 AI가 다시 분석합니다. - 병합된 PR 수와 분석 결과 수를 대조해 누락된 PR이 있으면 해당 항목만 재처리합니다. - 과거 장애가 발생한 파일 목록과 이번 PR의 변경 파일을 비교해 위험도를 조정합니다. - 결과는 묶음 단위로 토션에 저장해 중단 시에도 완료된 분석을 보존하고, 재실행할 때 이미 처리한 PR은 건너뜁니다. - 최종적으로 추려진 항목은 Sprint 테스트 런의 범위와 검증 근거가 됩니다. ## AI 기반 테스트 케이스 생성 - 기능 개발 속도를 사람이 따라가기 어렵기 때문에 AI가 테스트 케이스를 생성해 토션에 등록합니다. - AI는 “자산 > 계좌 연결 > 은행 선택”처럼 경로를 출력하고, 토션이 이를 실제 섹션 트리로 변환합니다. - 기존 섹션이 있으면 재사용하고, 없으면 중간 단계를 포함해 새로 생성합니다. - 결과의 신뢰성을 확보하기 위해 세 겹의 검증을 적용합니다. 1. AI가 누락된 분기·에러 상황·경계값을 스스로 재검토 2. 표기 규칙, 테스트 케이스 번호, 화면 누락, 요구사항 반영 여부를 스크립트로 검증 3. 별도의 AI가 테스트 계획을 작성해 범위와 위험 요소, 적용할 테스트 기법을 정의 - 테스트 계획과 실제 테스트 케이스를 비교해 다음을 확인합니다. - 계획에는 있지만 테스트 케이스에 없는 항목은 누락 - 테스트 케이스에는 있지만 계획에 없는 항목은 범위 이탈 - 화면 중심으로만 테스트하면 상태 전이처럼 화면에 드러나지 않는 테스트 축을 놓칠 수 있습니다. - 따라서 테스트 계획에서 상태 전이, 경계값 등 필요한 테스트 기법을 먼저 지정하고, 테스트 케이스가 이를 모두 포함하는지 확인합니다. - AI의 토션 접근은 화면이 아닌 CLI로 제한하고, 환경 차이로 인한 설치·런타임·경로 문제를 줄이기 위해 단일 실행 파일로 배포합니다. ## 토션에서 실기기 회귀 테스트 실행 - 신규 기능은 사람이 직접 검증하고, 안정화된 테스트 케이스는 회귀 자동화 대상으로 편입합니다. - 토션의 실행 화면에서 다음 항목을 선택해 바로 테스트를 시작합니다. - 대상 기기 - 빌드 - 실행 범위 - 결과를 연결할 테스트 런 - QA 서버의 러너는 Android·iOS 실기기를 관리하며, 스스로 토션에 등록되지만 관리자 승인 전에는 작업을 받지 않습니다. - 러너는 주기적으로 연결된 기기 상태를 보고하므로 실행 가능한 기기를 화면에서 확인할 수 있습니다. - 토션이 발급한 빌드를 설치해 실행함으로써 어떤 빌드에서 나온 결과인지 명확히 유지합니다. - 전체 회귀 또는 특정 섹션만 선택해 실행할 수 있습니다. - 테스트 중에는 시나리오별 통과·실패 여부, 실행 시간, 오류 메시지가 실시간으로 기록됩니다. - 결과는 시나리오가 아니라 **스텝 단위**로 저장됩니다. - 상태 - 소요 시간 - 오류 메시지 - 해당 시점의 스크린샷 - 시나리오 단위 영상 - 실행 결과를 특정 테스트 런에 연결하면 자동화 결과가 수동 테스트 기록의 각 테스트 케이스에 직접 반영됩니다. ## 자동화 결과를 테스트 케이스와 연결 - 별도 자동화 리포트에 “200건 중 3건 실패”라고만 표시하면 어떤 수동 테스트 케이스가 실패했는지 사람이 다시 대조해야 합니다. - 이를 해결하려면 양방향 연동이 필요합니다. - 테스트 케이스를 자동화 코드로 변환 - 자동화 결과를 다시 테스트 케이스별 기록으로 저장 - 토션은 자동화 결과를 테스트 케이스 한 건 단위까지 내려보내 수동 검증 기록과 자동화 실행 결과를 같은 맥락에서 확인할 수 있도록 설계되었습니다. - 제공된 글은 이 자동화 코드 생성 기능의 상세 구현 설명 직전에서 끝납니다. 토션의 핵심은 테스트 관리, AI 분석, 테스트 생성, 실기기 자동화를 각각 분리하지 않고 하나의 테스트 런과 테스트 케이스 흐름으로 연결한 데 있습니다. 유사한 플랫폼을 구축할 때도 먼저 결과의 스냅샷·이력 보존을 설계하고, 이후 AI와 자동화를 기존 기록 구조에 연결하는 방식이 실용적입니다.

discord

Discord 패치 노트: 2026년 8월 4일 (새 탭에서 열림)

Discord의 2026년 8월 패치는 설정 화면 개편, Electron 42 업그레이드, 데스크톱·모바일 전반의 성능 및 안정성 개선에 초점을 맞췄습니다. 설정 메뉴의 명칭과 관련 항목을 정리해 탐색성을 높였고, 오버레이·테마·프로필·게임 활동 등에서 발생하던 다양한 UI 버그를 수정했습니다. 모든 수정 사항은 병합됐지만 플랫폼별 적용은 순차적으로 진행될 수 있습니다. ## 설정 화면 개편 - `Activity`가 `Games & Apps`로 변경되었습니다. - `Content & Social`은 `Messaging Permissions`로 이름이 바뀌었습니다. - `Authorized Apps`, 연결 설정, 운영체제별 페이지와 키 바인드 등 관련 항목을 더 명확하게 묶었습니다. - `Data & Privacy`, `Activity Privacy` 등 여러 설정 페이지의 문구와 스타일을 개선했습니다. - 설정 항목의 이름과 배치를 정리해 사용자가 원하는 기능을 찾기 쉽게 했습니다. ## Electron 42 업그레이드 - 데스크톱 클라이언트를 Electron 42 기반으로 업데이트했습니다. - Electron 유지보수 측면의 개선과 함께 Discord의 CPU 사용량이 일부 감소했습니다. - 이번 버전은 대규모 기능 추가보다는 클라이언트의 기반 기술과 실행 효율 개선에 초점을 맞췄습니다. ## 데스크톱 안정성 및 계정 기능 수정 - CAPTCHA 완료 후 이메일 변경이 실패하던 문제를 해결했습니다. - 서버 초과 상태에서 유효한 초대 링크를 사용해도 “유효하지 않거나 만료된 초대”로 표시되던 오류를 수정했습니다. - 서버 선택 드롭다운에서 선택이 적용되지 않거나 목록이 현재 선택 항목으로 되돌아가는 문제를 고쳤습니다. - 긴 서버·역할 목록을 스크롤할 때 목록이 갑자기 맨 위로 이동하는 현상을 해결했습니다. - 전화번호 인증 오류가 표시될 때 입력 필드가 어긋나는 문제를 수정했습니다. - 프로필 편집 화면이 저장할 변경 사항이 없는데도 상점으로 이동한 뒤 계속 열려 있던 문제를 해결했습니다. - 비공개 서버 프로필을 사용하는 사용자에게도 기본 프로필 보기 메뉴가 표시되도록 수정했습니다. ## 오버레이와 게임 활동 개선 - 오버레이가 활성화된 상태에서 일부 게임을 탭 전환하면 화면 전체가 검게 변하던 문제를 해결했습니다. - 서버가 선택된 상태에서 오버레이 채팅 위젯을 드래그해 위치를 변경할 수 없던 문제를 수정했습니다. - 오버레이에서 서버 아이콘을 드래그할 때 이미지가 잘못 잡혀 채팅 위젯이 커서를 따라다니던 현상을 해결했습니다. - 오버레이에서 그룹 DM을 만들면 모달이 게임 오버레이가 아닌 기본 Discord 창에 열리던 문제를 수정했습니다. - 활동 감지를 끈 게임을 실행했을 때 백그라운드에서 실행 중인 다른 게임의 플레이 상태가 지워지던 오류를 해결했습니다. - 게임 데이터를 불러온 직후 사용자 프로필 팝업의 크기가 변하거나 흔들리던 문제를 수정했습니다. ## 테마와 프로필 UI 수정 - 테마 미리보기 종료 후 원래 테마로 돌아가지 않고 미리 본 테마가 기본값으로 저장되던 문제를 해결했습니다. - 사용자 지정 테마 편집기를 연 뒤 테마 전환이 작동하지 않던 문제를 수정했습니다. - 친구 탭의 `Active Now` 패널에 사용자 지정 테마의 그라데이션이 적용되지 않던 문제를 해결했습니다. - 프로필 카드에서 사용자 지정 상태 문구의 하단이 잘리던 현상을 수정했습니다. - 긴 서버 이름, 연결 이름, 사용자 지정 상태가 잘리지 않고 말줄임표로 표시되도록 개선했습니다. - 프로필 효과 미리보기 카드의 불필요한 여백을 제거했습니다. - 배지에 마우스를 올렸을 때 Early Supporter 배지의 눈이 투명해지던 시각적 오류를 수정했습니다. - 프로필 편집 드롭다운과 배지 모달의 클릭 영역, 닫기 버튼, 포인터 커서 표시 문제를 개선했습니다. ## 기타 데스크톱 버그 수정 - 긴 드롭다운과 작은 창 크기에서 모달이 잘못 배치되거나 콘텐츠가 잘리던 문제를 해결했습니다. - 서버 목록을 클릭한 뒤 키를 입력하면 주황색 포커스 링이 나타나던 현상을 수정했습니다. - 친구 추가 입력란에 `#`을 입력할 때 판별자 안내 문구가 텍스트와 겹치던 문제를 해결했습니다. - Linux에서 Stable과 Canary 클라이언트가 작업 표시줄과 창 관리자에서 하나로 묶이던 문제를 수정했습니다. - 활동 사이드바의 확장 영역과 아이콘 클릭·호버 동작을 개선했습니다. - 위시리스트 안내 팝업과 Xbox Game Pass 안내 팝업의 위치가 어긋나던 문제를 수정했습니다. ## 모바일 성능 및 표시 문제 개선 - Android에서 게임 프로필의 공지 목록을 스크롤할 때 프레임이 떨어지던 문제를 개선했습니다. - iPad에서 상태 표시줄 아래로 잘리던 프로필 헤더의 닫기 버튼과 액션 버튼을 수정했습니다. - Android의 You Bar에서 특정 스와이프 동작 후 빈 화면에 멈추던 문제를 해결했습니다. - PIP 모드에서 복귀한 뒤 서버 목록 하단의 일부 아이콘이 표시되지 않던 문제를 수정했습니다. - iOS에서 상태 문구가 있는 사용자의 이름 스타일 효과가 멤버 목록에서 제대로 표시되지 않던 현상을 해결했습니다. - Android에서 여러 줄 텍스트를 닉네임·서버 이름·역할 이름 같은 한 줄 입력란에 붙여넣을 때 입력창이 비정상적으로 커지던 문제를 수정했습니다. - iOS의 `Active Now` 카드에서 긴 게임 제목이 잘리던 문제를 해결했습니다. - Android와 iOS에서 사용자 프로필의 긴 연결 링크가 잘리지 않고 표시되도록 개선했습니다. - Android 라이트 테마의 Server Boosts 화면에서 카드와 배경의 흰색 음영이 서로 달랐던 문제를 수정했습니다. 이번 패치는 새로운 기능보다는 설정 구조 정리와 반복적으로 발생하던 UI·플랫폼별 오류 제거에 의미가 있습니다. Discord 데스크톱 사용자는 업데이트 후 테마, 오버레이, 게임 활동 관련 동작을 확인하고, 문제가 계속되면 플랫폼별 최신 버전 적용 여부를 점검하는 것이 좋습니다.

discord

Discord Social SDK 버전 1.10에서 모바일 플랫폼 지원 정식 출시 (새 탭에서 열림)

Discord Social SDK 1.10은 iOS와 Android 모바일 지원을 정식 출시해, 게임 개발자가 모바일에서도 Discord의 소셜 기능을 활용할 수 있게 했다. 주요 개선 사항은 Android Rich Presence, 딥링크 기반 계정 연결, 모바일 Discord Social Commerce이며, 이를 통해 플레이어 유지율·참여도·신규 유입을 높이는 것이 목표다. Tencent, Scopely, Ninja Kiwi 등의 사례는 친구 관리, 파티 구성, 커뮤니티 참여를 게임 경험과 자연스럽게 연결할 수 있음을 보여준다. ## 모바일 플랫폼 지원 정식 출시 - Discord Social SDK는 C++, Unreal Engine, Unity 프로젝트에서 사용할 수 있다. - 지원 플랫폼과 최소 버전은 다음과 같다. - Android 7.0 이상 - iOS 15.1 이상 - 모바일 환경에 맞춰 작은 화면과 이동 중 플레이를 고려한 기능 개선이 이루어졌다. - 계정 연결과 소셜 기능을 통해 게임의 도달 범위, 플레이 시간, 참여도를 높이는 것을 목표로 한다. ## Android Rich Presence 개선 - Android 게임에서 실시간 게임 상태를 공유하는 방법이 여러 가지로 확대됐다. - 계정 연결뿐 아니라 RPC(Remote Procedure Call)를 통해서도 Rich Presence를 제공할 수 있다. - 플레이어의 현재 게임 상태를 Discord 친구들에게 노출해 게임 발견과 소셜 공유를 촉진한다. - 향후 Rich Presence 초대 기능과 결합해 친구의 게임 참여를 유도할 수 있다. ## 딥링크 기반 모바일 계정 연결 - 모바일 계정 연결 과정에 딥링크가 추가됐다. - 브라우저 리디렉션이나 수동 로그인 절차를 줄여 앱 안에서 더 빠르게 Discord 계정을 연결할 수 있다. - Tencent의 Delta Force 사례에서는 단일 탭 방식의 계정 연결로 모바일 온보딩과 캠페인 활성화 과정의 마찰을 낮췄다. - 계정 연결은 게임 내 친구 목록, 초대, 커뮤니티 기능을 사용하기 위한 기반으로 활용된다. ## 모바일 Discord Social Commerce - Discord Social Commerce가 모바일로 확장돼, Discord를 통해 게임 아이템을 판매할 수 있게 된다. - 기존 플레이어뿐 아니라 친구와 잠재적인 신규 유저에게도 상품을 노출할 수 있다. - Marvel Rivals 파일럿 결과: - 구매의 41%가 선물 구매였다. - 선물 구매자의 25%는 휴면 유저 또는 신규 유저였다. - Discord의 소셜 관계가 수익화뿐 아니라 플레이어 재활성화와 신규 유입에도 기여할 수 있음을 보여준다. ## Tencent의 Arena Breakout 사례 - 크로스플랫폼에서 분산된 친구 목록과 파티 구성의 불편함을 해결하기 위해 SDK를 도입했다. - 주요 기능: - **Unified Friends List**: 여러 플랫폼의 친구 목록을 하나로 통합 - **Game Invites**: 분대 구성과 게임 초대 절차를 간소화 - 개선된 모바일 Account Linking - 도입 효과: - 분대 구성 시간 단축 - 세션 간 크로스플랫폼 메시지 증가 - 공식 Discord 서버 활동 증가 - 향후 기간 한정 게임 이벤트와 Discord 소셜 기능을 결합할 계획이다. ## Scopely의 Marvel Strike Force 사례 - Discord를 게임 내 커뮤니케이션과 동맹 관리 플랫폼으로 활용했다. - 플레이어 간 소셜 상호작용뿐 아니라 고객 지원과 커뮤니티 운영을 위한 전용 채널도 제공했다. - 도입 이후 나타난 결과: - 신규 플레이어의 계정 연결 증가 - 동맹별 Discord 채널 생성 가속 - 전반적으로 긍정적인 커뮤니티 반응 - 게임 커뮤니티 관리와 플레이어 지원을 Discord 안에서 함께 운영할 수 있다는 점을 보여준다. ## Tencent의 Delta Force 사례 - 공식 Discord 커뮤니티를 단순한 공지 채널이 아니라 플레이어가 함께 만들어가는 커뮤니티 공간으로 발전시켰다. - Account Linking과 Unified Friends List를 먼저 도입해 게임과 커뮤니티 사이의 경계를 줄였다. - 브라우저 이동과 수동 로그인 대신 모바일 단일 탭 계정 연결을 적용했다. - 주요 효과: - 온보딩 과정 개선 - 캠페인 참여 활성화 - 분대 구성 편의성 향상 - 커뮤니티 제작 콘텐츠와 게임 활동의 연결 - 향후 Discord 내 게임 검색 노출과 Rich Presence 초대 기능도 확대할 예정이다. ## Ninja Kiwi의 Bloons TD 6 사례 - Bloons TD 6는 Account Linking과 Unified Friends List를 도입해 Discord 기반 소셜 경험을 구축하기 시작했다. - 제공된 글의 내용은 이 사례의 초기 도입 기능을 소개하는 부분에서 끝나며, 구체적인 성과 수치는 제시되지 않았다. 모바일 게임에 Discord Social SDK를 도입하려면 먼저 계정 연결과 통합 친구 목록으로 진입 장벽을 낮추고, 이후 Rich Presence·게임 초대·커뮤니티 채널을 결합하는 방식이 효과적이다. 특히 모바일에서는 브라우저 전환과 수동 로그인 단계를 최소화하는 것이 온보딩과 유지율 개선에 중요하다.

toss

토스의 디바이스 팜 만들기 (새 탭에서 열림)

네뷸라는 팀별로 흩어져 운영하던 실기기 테스트 환경을 중앙 플랫폼으로 통합해, 누구나 API 호출 한 번으로 실제 스마트폰을 제어할 수 있도록 만든 사내 디바이스 팜입니다. Appium 대신 자체 드라이버를 개발해 속도와 확장성을 높였고, 실시간 미러링·보안·24시간 운영 안정성까지 직접 구축했습니다. 그 결과 15대에서 시작한 팜은 100대를 넘어 수백 대 규모로 확장되며 전사 공용 테스트 인프라로 자리 잡았습니다. ## 팀별 디바이스 팜의 한계 - 각 팀이 맥북이나 맥미니에 5~10대의 기기를 직접 연결하고 관리했습니다. - Appium 설정, 기기 인식, OS 버전 대응, 연결 장애 복구를 팀마다 반복해야 했습니다. - 기기 관리와 테스트, 보안·컴플라이언스까지 개발자가 함께 맡아야 했습니다. - 팀별 자원이 격리되어 회사 전체의 기기를 효율적으로 공유하기 어려웠습니다. - 네뷸라는 이러한 운영 부담을 중앙화하고 전문 플랫폼으로 이전하기 위해 시작됐습니다. - 맥미니 5대와 기기 15대, 개발자 1명으로 시작해 1년간 100대 이상으로 성장했습니다. ## API 한 번으로 실기기 제어 - 사용자는 기기가 어느 호스트에 연결됐는지, ADB나 Xcode를 어떻게 설정했는지 알 필요가 없습니다. - `occupy` API로 조건에 맞는 기기를 점유한 뒤 액션 API를 호출하면 됩니다. - 예를 들어 다음과 같은 흐름으로 기기를 사용할 수 있습니다. - Android 기기 점유 - 좌표 `(540, 1200)` 클릭 - 테스트 종료 후 기기 반환 - 예약, 케이블 연결, 로컬 환경 설정을 숨기고 단순한 인터페이스를 제공하는 것이 네뷸라의 핵심 가치입니다. ## 네뷸라의 4계층 아키텍처 - **클라이언트** - 웹 프런트엔드, SDK·CLI, 직접 API 호출 등 다양한 접근 방식을 제공합니다. - **서버** - 기기 발견·점유·할당·테스트 실행을 관리하는 오케스트레이션 계층입니다. - 테스트 요청은 Kafka로 전달되고 여러 Runner가 분산 처리합니다. - `occupy · assign · release` 기반 분산 락으로 한 기기를 여러 테스트가 동시에 사용하는 문제를 방지합니다. - **에이전트** - iOS용 Mac mini와 Android용 Linux 호스트에서 실행됩니다. - ADB·Xcode로 연결된 기기를 자동 발견하고 서버 요청을 로컬 기기로 전달합니다. - **기기 계층** - 기기마다 controller server와 controller runner가 동작합니다. - 실제 화면 클릭, 텍스트 입력 등의 동작은 이 계층에서 수행됩니다. ## Appium 대신 개발한 Nebula Driver ### 빠른 명령 처리 - Appium과 Android 기기에서 명령 지연을 비교한 결과, 클릭·입력 작업에서 네뷸라가 10배 이상 빠른 경우가 있었습니다. - Appium은 동작 전 화면이 안정될 때까지 기다리는 `waitForIdle`을 사용해 견고성을 높입니다. - 네뷸라는 화면이 진행 중이어도 노드에 바로 명령을 전달하고 즉시 반환하는 속도 우선 방식을 택했습니다. - `waitForIdle`을 끄면 성능 격차가 2~3배 수준으로 줄어들지만, 실시간 조작이 중요한 네뷸라에는 속도 중심 설계가 적합했습니다. ### Stateless 구조 - Appium은 세션 기반이라 세션 생성에 약 15~40초가 걸릴 수 있습니다. - 기기 수가 늘수록 세션 생성 실패와 세션 관리 비용도 증가합니다. - 네뷸라는 기기 컨트롤러를 미리 실행해 두고, 상태 없는 HTTP 호출을 받는 구조를 사용합니다. - 세션 시작 비용과 세션 장애를 줄이고, 대규모 기기 운영에 유리한 구조를 만들었습니다. ### 사내 환경에 맞춘 확장 - 자체 인터페이스를 소유하므로 필요한 기능을 직접 추가할 수 있습니다. - 한글·이모지 입력을 지원하는 자체 IME를 구현했습니다. - 토스 앱 전용 신호 트리거를 추가할 수 있습니다. - 사내 앱센터와 연동해 pre-release 빌드를 기기에 바로 설치할 수 있습니다. - 보안 정책도 드라이버 규격 안에서 강제할 수 있습니다. - Android는 ADB·UiAutomation, iOS는 Swift·XCTest를 기반으로 구현하고, OpenAPI 스펙으로 Go·TypeScript 코드를 자동 생성했습니다. ## 실시간 화면 미러링 - 네뷸라는 정해진 테스트 스텝만 실행하는 도구가 아니라, 사용자가 화면을 보면서 동시에 조작할 수 있어야 했습니다. - 따라서 실시간 조작과 실시간 영상 스트리밍을 Android·iOS 모두에서 해결해야 했습니다. ### Android 미러링 - scrcpy는 Android 화면을 데스크톱 앱에 보여주는 데 적합하지만, 서버를 거쳐 여러 브라우저에 배포하는 구조에는 맞지 않았습니다. - 네뷸라는 scrcpy의 인코딩 방식을 참고하되 자체 미러링 경로를 구현했습니다. - `SurfaceControl`로 가상 디스플레이를 만들고 `MediaCodec`으로 H.264 영상을 인코딩합니다. - 인코딩된 영상은 브로드캐스터를 통해 여러 브라우저 시청자에게 전달됩니다. ### iOS 미러링 - iOS는 Android처럼 화면을 자유롭게 추출하기 어렵고 USB 사용 방식에도 제약이 있습니다. - 기존 QVH·Appium MJPEG 방식은 화면을 보면서 동시에 조작하는 요구를 충족하지 못했습니다. - QuickTime Player의 iOS 화면 캡처 방식과 유사한 경로를 USB 독점 없이 내재화했습니다. - 그 결과 조작과 미러링을 동시에 수행할 수 있게 됐습니다. - Android와 iOS 모두 실시간 H.264·브로드캐스팅 경로로 통일해 브라우저에서 여러 기기를 한 번에 볼 수 있습니다. ## 중앙화로 강화한 보안과 컴플라이언스 - 팀별 운영에서는 개발자가 테스트와 기기 관리, 보안 준수를 모두 책임져야 했습니다. - 네뷸라 팀은 사내 보안팀과 협력해 모바일 기기 팜 운영 기준을 정의했습니다. - 중앙 플랫폼에 보안 정책을 적용해 모든 기기에 동일한 기준을 일괄 반영할 수 있게 했습니다. - 사용자는 보안 요건이 적용된 환경에서 테스트에만 집중할 수 있습니다. ## 24시간 운영을 위한 안정성 ### 하드웨어 운영 - USB 연결 안정성, 케이블·허브 선택, 전원 공급, 서버실 설계를 직접 검증했습니다. - 물리적 장애를 완전히 제거할 수 없기 때문에 사람의 대응 체계와 이중화를 함께 준비하고 있습니다. ### 소프트웨어 운영 - 호스트별 컨트롤러와 미러링 프로세스를 오케스트레이션합니다. - 프로세스가 종료되더라도 자동으로 복구되도록 설계했습니다. - 서버·에이전트·컨트롤러·미러링 구성요소에 무중단 배포를 적용했습니다. - 기기 상태, 프로세스 상태, 서버 성능을 함께 관측하는 모니터링 체계를 구축하고 있습니다. - 여러 팀이 상시 사용하는 공용 인프라이므로 안정성을 핵심 기능으로 취급합니다. ## API 위에 만들어진 테스트 생태계 - 기기 15대에서 100대 이상, 수백 대 규모로 확장 중이며 24시간 운영됩니다. - 웹페이지에서는 미러링 화면을 보며 클릭으로 테스트 스텝을 만들 수 있습니다. - SDK로 E2E 테스트 코드를 작성하고, CLI로 터미널·CI/CD·AI 에이전트에서 기기를 제어할 수 있습니다. - 제품 로그가 기대대로 기록되는지 검수하는 시스템에도 활용됩니다. - AI 에이전트가 API를 호출해 테스트 스텝을 직접 판단하고 실행할 수도 있습니다. - 하나의 공개 API를 기반으로 여러 도구와 활용 사례가 자연스럽게 확장됐습니다. - 사용자 사례에 따르면 Appium 기반 테스트를 이전한 뒤 실행 속도가 크게 향상됐고, 수동 검수 시간이 30~40분에서 10분 이내로 줄었습니다. 네뷸라의 사례는 기기 수를 늘리는 것보다, 복잡한 하드웨어와 운영 문제를 단순한 API 뒤로 숨기는 것이 중요하다는 점을 보여줍니다. 비슷한 플랫폼을 구축한다면 초기부터 기기 점유 모델, 실시간 미러링, 보안 정책, 자동 복구와 무중단 배포를 함께 설계하고, 내부 사용자가 쉽게 확장할 수 있는 단일 API를 중심에 두는 것이 좋습니다.

discord

Discord 패치 노트: 2026년 7월 7일 (새 탭에서 열림)

Discord의 2026년 7월 7일 패치 노트는 앱 성능·연결 속도 개선과 플랫폼별 버그 수정을 다룬다. iOS의 React Native Fabric 전환으로 앱 초기화 시간이 약 20% 단축됐고, 세션 연결 p95/p99 시간도 약 100ms 줄었다. 또한 메시지 전달 시 `@silent` 사용, 모든 서버에서 채널 고정 지원 등 사용성 기능이 확대됐다. ## 앱 성능과 안정성 개선 - iOS를 React Native의 New Architecture인 **Fabric**으로 이전했다. - 일반적인 앱 초기화 시간이 약 20% 개선됐다. - 향후 Android와 iOS의 성능·신뢰성 개선 프로젝트를 확장할 기반을 마련했다. - 세션 시작 로직의 설정값을 변경해 세션 연결 시간의 p95/p99를 약 100ms 단축했다. - Linux에서 NVIDIA GPU 사용 시 X11 연결이 점진적으로 누수되던 문제를 수정했다. - 장시간 실행 후 새 애플리케이션을 열 수 없게 되는 현상을 방지한다. - Windows에서 Discord가 시작 프로그램으로 자동 실행될 때 게임 창의 포커스를 빼앗던 문제를 수정했다. - 이제 백그라운드에서 조용히 실행된다. - 빠르게 두 번 새로 고친 뒤 데스크톱 클라이언트에서 마우스 클릭이 작동하지 않던 문제를 해결했다. ## 메시지 전달과 채널 사용성 - 메시지 전달 기능에서 `@silent`를 지원한다. - 새벽에 DM으로 메시지를 전달할 때 상대방에게 알림을 보내지 않을 수 있다. - 기존에는 Community 서버에서만 제공되던 **채널 고정(Channel Pinning)** 기능을 모든 서버로 확대했다. - 사용자가 자주 쓰는 채널을 개인적으로 채널 목록 상단에 배치할 수 있다. - Linux에서 GIF와 동영상이 반복 재생되지 않던 문제를 수정했다. - 반복 재생 처리가 운영체제별로 제대로 동작하도록 개선됐다. ## 데스크톱 인터페이스 및 프로필 수정 - 프로필 모달의 우측 상단 모서리와 배너 이미지가 어긋나던 문제를 해결했다. - 긴 검색어 입력 시 검색 드롭다운의 “결과 없음” 문구가 컨테이너 밖으로 넘치지 않도록 수정했다. - 작은 창에서 로그인 화면에 불필요한 스크롤바가 나타나고 로그인 박스가 중앙에서 벗어나던 문제를 고쳤다. - 프로필의 사용자 지정 상태 hover 표시가 사각형으로 보이거나 잘못 정렬되던 문제를 수정했다. - 최근 아바타 목록에서 일부 GIF 아바타가 깨져 다시 선택할 수 없던 문제를 해결했다. - 프로필 편집 중 “위젯 추가”를 눌러도 저장하지 않은 변경 사항이 사라지지 않도록 했다. - 사용자 지정 상태의 “24시간 후 삭제” 설정이 자정에 조기 만료되던 문제를 수정했다. - 일반 텍스트 입력창에서도 맞춤법이 틀린 단어를 우클릭하면 맞춤법 제안이 표시되도록 했다. - 검색 필터의 “이후(After)” 날짜가 필터 창을 다시 열 때마다 하루씩 앞당겨지거나 늦춰지던 문제를 해결했다. - 서버 프로필에서 기본 프로필로 전환할 때 tenure 배지 안내창이 잘못 표시되던 문제를 수정했다. - 다른 모달이 열린 상태에서 단축키로 Inbox를 열면 클라이언트가 잠기던 문제를 해결했다. - 배지 허브에서 Nitro나 Shop으로 이동할 때 기존 프로필 모달이 뒤에 남아 있던 문제를 수정했다. - 자신의 위시리스트에서 Nitro를 자신에게 선물할 수 있던 잘못된 흐름을 수정했다. - 이제 Nitro 구독 모달이 열린다. ## 모바일 앱 개선 - Android Nitro 탭에서 일부 기본 테마를 사용할 때 캐러셀 페이지 표시기가 보이지 않던 문제를 해결했다. - iOS 채널 목록을 스크롤할 때 화면이 흔들리거나 위치가 튀던 현상을 수정했다. - Android와 iOS에서 잘못된 `has:` 검색 필터 값이 유효한 필터로 처리되던 문제를 고쳤다. - iOS의 선물 수신자 선택 화면에 불필요한 색상 사각형이 표시되던 문제를 해결했다. - Android에서 닫을 수 없던 서버 애플리케이션 알림을 바깥 영역 터치나 뒤로 가기 버튼으로 닫을 수 있게 했다. - iOS에서 변경 중인 표시 이름 스타일이 전체 화면 프로필 미리보기에 반영되지 않던 문제를 수정했다. - iOS의 이벤트 카드와 Live 채널 알림에서 위치 텍스트가 카드 밖으로 넘치지 않도록 잘라서 표시한다. - 이미 가입한 서버의 초대 링크를 열 때 불필요한 Server Tag Adoption 절차로 이동하던 문제를 해결했다. - iPad 브라우저에서 서버 초대 링크를 열면 Discord는 실행되지만 초대 화면이 표시되지 않던 문제를 수정했다. - Android 프로필 사진 편집기에서 특정 테마를 사용할 때 “확대/축소”와 “회전” 텍스트 및 슬라이더가 보이지 않던 문제를 해결했다. - iOS 프로필 탭 전환 중 스크롤하면 콘텐츠가 잘리던 문제를 수정했다. - Android에서 친구 요청 수락 후 프로필의 통화·메시지 버튼 크기가 서로 다르게 표시되던 문제를 고쳤다. - iOS Shop 아이템 미리보기에서 프로필 미리보기 텍스트가 잠깐 나타났다가 사라지던 현상을 해결했다. - iOS에서 글자 크기를 키웠을 때 Nitro 혜택 설명이 잘리고 스크롤하기 어려웠던 문제를 수정했다. - iOS 알림 설정 화면이 푸시 알림을 이미 켠 뒤에도 계속 활성화를 요구하던 문제를 해결했다. ## 초대, 프로필, 이벤트 관련 수정 - iOS 채널 목록에 채널을 추가하라는 배너가 채팅 배경에 섞이지 않도록 구분선을 추가했다. - 프로필 카드와 상태 표시 요소의 모서리 및 정렬을 조정해 시각적 일관성을 높였다. - 예약 이벤트 카드와 Live 채널 안내 문구가 화면 가장자리를 넘지 않도록 처리했다. - 이미 가입한 서버 초대 링크가 잘못된 설정 흐름을 열지 않고 해당 서버로 바로 이동하도록 수정했다. ## 적용 방식 - 패치에 포함된 수정 사항은 모두 커밋되고 병합된 상태다. - 다만 플랫폼별 배포가 진행 중일 수 있어 모든 사용자에게 동시에 적용되지는 않을 수 있다. - 문제가 계속되면 Discord 커뮤니티의 격월 버그 메가스레드에 제보할 수 있다. 이번 업데이트는 대규모 신규 기능보다는 iOS 아키텍처 전환, 연결 속도 개선, 운영체제별 안정성 보강, 세부 UI 버그 수정에 초점이 맞춰져 있다. Discord를 사용하는 경우 앱을 최신 버전으로 업데이트하고, 특히 Linux·Windows·iOS에서 보고된 문제를 겪었다면 수정 여부를 확인하는 것이 좋다.

discord

Discord 업데이트: 2026년 6월 25일 변경 사항 (새 탭에서 열림)

Discord의 2026년 6월 25일 업데이트는 게임 탐색과 친구들과의 플레이를 돕는 기능, 모바일 사용성 개선, 채팅·음성 커뮤니케이션 편의 기능에 초점을 맞췄다. 매주 갱신되는 Trending Games 페이지와 강화된 게임 프로필을 통해 인기 게임 정보를 확인할 수 있으며, 모바일에서는 반응·프로필·업로드·위시리스트 기능이 개선됐다. 또한 DM과 채널 고정, 통화 확인, 게임 내 Discord 친구 초대 등 커뮤니케이션 기능도 보강됐다. ### 인기 게임 탐색 기능 - **Trending Games 페이지**가 매주 목요일 업데이트된다. - Discord 전체에서 인기를 얻고 있는 싱글플레이 및 멀티플레이 게임을 확인할 수 있다. - 게임 나이트나 스트리밍을 위한 새로운 게임을 찾는 데 활용할 수 있다. - 게임 프로필 페이지에서 다음 정보를 확인할 수 있도록 개선됐다. - 게임 스크린샷 - 지원 플랫폼 - Steam 및 OpenCritic 리뷰 - Discord 내 인기 정도 - 공식 게임 서버 링크 ### 모바일 반응 및 프로필 개선 - **Tappitytap-Tap to React** 기능으로 메시지를 두 번 탭해 지정된 이모지로 빠르게 반응할 수 있다. - 사용할 기본 반응 이모지는 `User Settings > Chat`에서 설정할 수 있다. - 모바일에 새롭게 **You Bar**가 추가되어 자신의 프로필과 정체성 정보에 쉽게 접근할 수 있다. - You Bar를 탭하면 프로필을 열 수 있어 모바일 내비게이션이 단순해진다. ### 모바일 통화와 미디어 기능 - DM이나 그룹 DM에서 통화 버튼을 누르면 실제로 전화를 걸지 확인하는 절차가 추가됐다. - 실수로 늦은 시간에 전체 그룹을 깨우는 상황을 방지한다. - iOS에서는 이미지 압축 및 지연 시간 최적화로 사진 업로드 성능이 개선됐다. - 파일 크기 약 **17% 감소** - 업로드 지연 시간 약 **12% 감소** - 모바일에서도 Shop 아이템을 프로필의 **Wishlist**에 추가할 수 있다. - 다른 사용자의 프로필을 통해 해당 사용자의 위시리스트도 확인할 수 있다. ### Discord와 게임 클라이언트 연동 - Discord 계정과 Riot 계정 연동 기능이 League of Legends와 VALORANT에 적용되기 시작했다. - 게임 클라이언트 안에서 Discord 친구 목록을 확인할 수 있다. - Discord 친구를 게임에서 직접 초대해 함께 플레이할 수 있다. ### DM, 채널 및 음성 기능 개선 - DM과 그룹 DM을 목록 상단에 고정할 수 있다. - 서버에서는 자주 사용하는 채널을 채널 목록 상단에 고정할 수 있다. - 음성 채널 초대 시 현재 누가 해당 채널에서 활동 중인지 표시된다. - 이를 통해 스트리밍 중인 채널에 의도치 않게 들어가거나 상대를 놀라게 하는 일을 줄일 수 있다. - 데스크톱에서는 새 친구를 추가한 뒤 DM 목록에서 간단한 인사 메시지를 보내도록 권장한다. - 추천 메시지를 사용하지 않고 원하는 내용으로 직접 메시지를 보낼 수도 있다. 이번 업데이트는 게임을 발견하고 친구를 초대하는 과정을 간소화하면서, 모바일에서의 반응·업로드·프로필 관리 경험도 개선한 것이 특징이다. 게임 나이트를 준비한다면 Trending Games와 게임 프로필을 활용하고, 자주 연락하는 사람이나 채널은 고정 기능으로 정리하는 것이 유용하다.

toss

디자이너가 시안 대신 앱을 만든 이유 (새 탭에서 열림)

AI를 활용하면 디자이너가 정적인 시안을 넘어 실제로 동작하는 프로토타입을 직접 만들 수 있고, 디자인과 개발 사이의 번역 과정도 줄어든다. 토스의 underlay 프로젝트는 화면 위에 겹치는 대신 화면 아래에 있던 정보가 드러나는 방식을 통해, 사용자의 흐름을 방해하지 않고 다음 경험으로 연결하려 했다. 이 과정에서 동작하는 코드 자체가 디자인 명세이자 개발 가능한 구조가 될 수 있음을 보여준다. ## 데드엔드를 다음 경험의 시작으로 바꾸기 - 송금 완료나 결제 완료처럼 사용자의 할 일이 끝나는 화면을 ‘데드엔드’로 정의했다. - 목표는 특정 화면을 개선하는 것이 아니라, 앱 어디서든 현재 경험을 자연스럽게 다음 경험으로 연결하는 공통 장치를 만드는 것이었다. - 이를 위해 여러 화면에서 재사용할 수 있는 컴포넌트 개발부터 시작했다. ## 기존 알림 UI의 한계와 underlay의 발상 - 바텀시트, 토스트, 푸시 등 기존 UI는 화면 위에 나타나 사용자의 시선을 끌지만, 보고 있던 화면이나 진행 중인 행동을 방해할 수 있다. - 전화처럼 등장하거나 화면 한쪽·채팅창처럼 나타나는 방식도 같은 문제를 가졌다. - 택배 송장을 떼자 아래에 있던 책의 문구가 드러난 경험에서 아이디어를 얻었다. - 새로운 정보를 화면 위에 올리는 대신, 화면 아래에 존재하던 정보가 드러나게 하는 컴포넌트를 **underlay**라고 정의했다. ## AI와 코드로 인터랙션을 디자인하기 - underlay는 외형보다 움직임과 반응 방식이 중요한 컴포넌트였다. 인터랙션 자체가 디자인의 핵심이었다. - 프로토파이나 프레이머 대신 SwiftUI와 Xcode로 iOS 앱 형태의 프로토타입을 직접 만들었다. - SwiftUI를 처음 사용했지만 AI에게 구현을 요청하며 디자인을 구체화했다. - 디자이너의 역할은 다음 세 가지로 정리됐다. - 만들고 싶은 경험을 설명하기 - AI가 제안한 여러 방향 중 적절한 것을 선택하기 - 실제 기기에서 결과를 보고 판단하기 - AI와의 디자인 과정은 설계, 선택, 검증을 반복하는 과정이었다. ## 실제 기기에서 반복하며 완성도 높이기 - 먼저 자유롭게 실험하고 지울 수 있는 플레이그라운드 환경을 만들고, 피그마 시안을 AI에게 참고 자료로 제공했다. - 버튼, 텍스트, 레이아웃을 정지 화면이 아니라 실제 기기에서 움직여 보며 수정했다. - 상상한 움직임과 실제 구현된 움직임의 차이가 컸기 때문에 수백 번 반복해서 조정했다. - 화면의 맥락을 읽고 적절한 정보를 찾는 느낌을 표현하기 위해 빛이 화면을 훑는 스캔 인터랙션을 도입했다. - 빛의 번짐, 틴트, 폭, 속도, 배경 어두워짐 등은 Metal 셰이더로 구현했다. - AI가 작성한 셰이더 코드를 출발점으로 삼되, 최종 질감은 직접 수치를 조정하며 완성했다. - 등장하거나 스캔이 지나갈 때의 미세한 출렁임 같은 디테일도 코드로 다듬었다. ## 디자인 가이드 대신 동작하는 레포 전달하기 - 기존 방식이라면 등장 타이밍, 이징 커브, 딜레이 등을 문서로 정리했을 것이다. - 이번에는 간단한 플로우만 설명하고, 직접 만든 코드 레포를 개발자에게 전달했다. - 동작하는 레퍼런스가 있었기 때문에 개발자는 시안의 구조와 인터랙션을 빠르게 이해할 수 있었다. - 개발 과정의 파인튜닝에서도 opacity나 모션 값을 말로 주고받기보다, 디자이너가 직접 실행 결과를 보며 수정했다. - AI에게 원하는 모션을 자연어로 설명하고 결과를 확인하는 과정을 개발자의 환경에서도 반복하면서 인터랙션 완성도를 높였다. - “느낌이 이상하다”는 추상적 표현 대신 실제 코드와 동작을 기준으로 소통할 수 있었다. ## 시각적 결과뿐 아니라 코드 구조까지 디자인하기 - 프로토타입 레포의 구조가 실제 iOS 개발 코드와 거의 동일하게 활용됐다. - 처음부터 개발을 위한 구조를 의도한 것은 아니었지만, UT와 빠른 버전 변경을 위해 만든 구조가 자연스럽게 개발 가능한 형태가 됐다. - 잘 만든 시안은 보기 좋은 화면에 그치지 않고, 재사용·수정·확장이 가능한 방식으로 만들어져야 한다. - 일회용 코드라면 개발자가 다시 구현해야 하지만, 개발 가능한 구조의 시안은 그대로 구현 명세가 될 수 있다. - AI가 “어떻게 만들지”를 지원하는 시대에는 디자이너가 “무엇을 만들지” 상상하고 결정하는 역량이 더 중요해진다. ## 적용 방법 - 도구의 제약에 맞춰 디자인하기보다, 가장 좋은 사용자 경험을 먼저 상상한다. - 정적인 그림으로 끝내지 말고 AI와 코드를 활용해 실제 기기에서 작동하는 프로토타입을 만든다. - 인터랙션을 문서로만 설명하기보다, 직접 만든 동작하는 레포를 개발자에게 전달한다. - 최종 결과뿐 아니라 코드 구조와 수정 가능성까지 디자인의 일부로 고려한다. 실용적으로는 작은 인터랙션부터 SwiftUI나 웹 기술로 직접 구현해 보고, 실제 기기에서 반복 검증하는 방식이 효과적이다. 완성된 코드는 단순한 시안이 아니라 개발자와 AI 모두가 이해할 수 있는 실행 가능한 디자인 스펙이 될 수 있다.

grammarly

말하고, 텍스트로 변환해 전송하세요 (새 탭에서 열림)

모바일에서 음성 입력은 빠르지만, 받아쓰기 결과에 군더더기와 문법 오류가 많아 수정 작업이 필요하다는 문제가 있습니다. Grammarly Keyboard의 음성-텍스트 기능은 사용자의 말을 자연스럽게 정리하고 문장부호와 문법까지 보완해, 어느 앱에서나 바로 보낼 수 있는 문장을 제공합니다. 음성은 처리 후 삭제되며 저장·계정 연결·모델 학습에 사용되지 않습니다. ## 모바일 음성 입력의 한계 - 스마트폰 기본 받아쓰기는 말한 내용을 거의 그대로 옮깁니다. - 필러 단어, 말더듬기, 중간에 문장을 고친 흔적, 누락된 문장부호가 남습니다. - 결과적으로 음성 입력 후 직접 편집해야 하므로 타이핑만큼이나 시간이 걸릴 수 있습니다. ## Grammarly Keyboard의 정리된 음성 입력 - Grammarly Keyboard의 마이크 아이콘을 누르면 현재 사용 중인 앱에서 바로 받아쓸 수 있습니다. - 음성을 단순히 전사하지 않고 다음 작업을 자동으로 수행합니다. - 불필요한 추임새와 필러 단어 제거 - 말하다가 스스로 수정한 부분 정리 - 문법과 문장부호 보완 - 원래 말투와 의도 유지 - 다양한 언어, 억양, 말하는 속도와 리듬을 지원합니다. - 같은 키보드에서 음성 입력과 타이핑을 자유롭게 전환할 수 있습니다. - 필요하면 내장된 Grammarly AI assistant로 작성한 문장을 추가로 다듬을 수 있습니다. ## 다양한 모바일 상황에 적합 - 회의 사이에 메시지나 초안을 작성하는 직장인에게 유용합니다. - 이동 중 아이디어를 기록하려는 학생이나 창작자도 활용할 수 있습니다. - 작은 키보드로 긴 글을 입력하기 어려운 사용자에게 적합합니다. - 마이크는 탭했을 때만 활성화되며, 작동 중에는 키보드 내 표시와 iOS의 주황색 녹음 표시등이 나타납니다. - 주변 소음을 줄이도록 설계되어 이동 중에도 음성 입력을 사용할 수 있습니다. ## 개인정보 보호와 사용 방식 - 음성이 텍스트로 처리된 뒤 오디오는 삭제됩니다. - 오디오는 계정에 저장되거나 계정과 연결되지 않습니다. - 모델 학습에도 사용되지 않습니다. - 최종적으로 남는 것은 정리된 텍스트이며, 사용자가 원하는 앱에서 바로 전송할 수 있습니다. ## iOS에서 시작하는 방법 - App Store에서 Grammarly Keyboard를 설치합니다. - `설정 → 일반 → 키보드 → 키보드 → 새로운 키보드 추가`로 이동해 Grammarly를 추가합니다. - 안내가 표시되면 전체 접근 권한을 활성화합니다. - 아무 앱에서 텍스트 입력란을 선택한 뒤 Grammarly Keyboard의 마이크 아이콘을 누릅니다. - 말하기를 마치면 커서 위치에 정리된 문장이 자동으로 입력됩니다. 모바일에서 긴 문장을 자주 작성한다면 Grammarly Keyboard의 음성 입력은 기본 받아쓰기보다 편리한 대안입니다. 특히 이동 중 빠르게 초안을 만들거나, 음성 입력 후 문장을 일일이 수정하는 시간을 줄이고 싶은 사용자에게 적합합니다.

discord

Discord 패치 노트: 2026년 6월 4일 (새 탭에서 열림)

Discord의 2026년 6월 4일 패치에는 모바일 통화 실수 방지, 데스크톱 시작 속도 개선, 사용자 설정 개편, 음성 초대 임베드 개선이 포함됐다. 특히 데스크톱 앱의 p50 시작 시간이 약 8%(약 650ms) 단축됐으며, 여러 플랫폼에서 접근성·레이아웃·검색·초대 흐름과 관련된 버그가 수정됐다. 모든 수정 사항은 코드에 반영됐지만 플랫폼별 배포는 진행 중일 수 있다. ## 통화 실수 방지와 음성 초대 개선 - 모바일 DM에서 통화 버튼을 누르면 바로 통화가 시작되지 않고 확인 단계가 표시된다. - 새 음성 초대 임베드는 다음 정보를 명확히 보여준다. - 초대 대상 서버와 채널 - 현재 채널의 사용자 수 - 사용자 이름에 마우스를 올렸을 때 움직이는 아바타 - 음성 채널 초대의 맥락과 참여자 정보를 더 쉽게 파악할 수 있도록 시각적 표현이 개선됐다. ## 데스크톱 성능과 설정 화면 개편 - 최근 몇 주 동안 데스크톱 앱의 p50 시작 시간이 약 8%, 약 650ms 개선됐다. - 추가적인 시작 속도 개선 작업도 계속 진행될 예정이다. - 사용자 설정의 Account 페이지가 새 디자인 체계에 맞게 개편됐다. - 다음 항목은 Account 카테고리 내부의 중첩 페이지로 정리됐다. - Devices - Family Center - Account Standing - Multi-Factor Authentication - 설정 페이지 간 시각적 일관성과 탐색 구조가 개선됐다. ## 초대·가입·이벤트 흐름 수정 - 게스트 초대로 서버에 들어갈 때 온보딩이나 “Apply to Join” 화면에 멈추던 데스크톱 문제가 해결됐다. - 초대 링크를 클릭했을 때 최대화된 창이 갑자기 복원되는 문제가 수정됐다. - Server Discovery에서 초대가 비활성화된 서버에 가입할 수 없을 때 아무 반응이 없던 문제가 해결됐다. - 이제 가입 실패 이유를 토스트 메시지로 안내한다. - iOS에서 이벤트 설명의 외부 Markdown 링크를 눌러도 이벤트 상세 시트가 남아 있던 문제가 수정됐다. - 이벤트 설명에서 사용자 멘션을 누르면 DM이 아니라 해당 사용자의 프로필이 열리도록 변경됐다. - 이벤트 공유 후 이벤트 시트가 시스템 공유 메뉴 위에 남아 있던 문제가 해결됐다. - 초대 권한이 없고 vanity URL만 있는 서버에서 iOS가 “Missing Permissions”를 표시하던 문제가 수정됐다. - 이제 데스크톱과 마찬가지로 vanity URL을 대체 경로로 사용한다. ## 검색·상태·메시지 표시 버그 수정 - Android에서 `has:forward` 검색 필터와 Media, Links, Files 같은 하위 탭을 함께 사용할 때 결과가 비거나 부정확해지는 문제가 해결됐다. - Android에서 긴 사용자 지정 상태가 삭제 버튼과 지나치게 붙던 레이아웃 문제가 수정됐다. - 모바일 Set Status 화면에서 뒤로 가기 버튼이 작동하지 않던 문제가 해결됐다. - 데스크톱의 여러 줄 `@time` 표시가 아래 텍스트와 겹치던 문제가 수정됐다. - iOS에서 글자의 하강부(descender)가 메시지 알림과 검색 결과에서 잘리던 문제가 해결됐다. - iOS에서 사용자 프로필의 서식 있는 텍스트가 일반 텍스트보다 작게 표시되던 문제가 수정됐다. - 데스크톱 커뮤니티 공지의 텍스트가 겹쳐 읽기 어려웠던 문제가 해결됐다. - 알림이 비활성화된 Unread inbox 구분선이 라벨 텍스트를 관통하던 문제가 수정됐다. ## iOS·Android UI 및 테마 개선 - iOS의 QR 코드 로그인 모달이 필요 이상으로 전체 화면을 차지하던 문제가 수정됐다. - 사용자 지정 테마에서 키보드를 열 때 배경이 잠시 기본 색상으로 깜빡이던 문제가 해결됐다. - 친구 목록의 고정 알파벳 헤더가 클라이언트 테마 색상으로 잘못 표시되던 문제가 수정됐다. - 알림 탭의 북마크 버튼이 시스템 글꼴 크기에 맞춰 확대되지 않던 문제가 해결됐다. - 설정 검색 결과의 마지막 행에서 둥근 모서리가 사라지던 문제가 수정됐다. - 서버 초대 메뉴의 모서리가 다른 UI와 달리 각지게 표시되던 문제가 해결됐다. - 서버 프로필 사진을 업로드할 때 이미지 선택기 위에 기존 아바타 업로드 요소가 남아 있던 문제가 수정됐다. - Wumpus가 사라졌던 iOS 친구 요청 빈 화면이 복구됐다. ## 접근성·입력·반응형 레이아웃 수정 - 데스크톱에서 “Paste as Plain Text”에 실제로 구현되지 않은 키보드 단축키 안내가 표시되던 문제가 제거됐다. - 비활성화된 게임 오버레이 설문에서 Tab 키로 사유 선택 항목에 접근할 수 없던 문제가 수정됐다. - 보이지 않는 서버 툴팁 내부 아이콘이 Tab 탐색 대상이 되던 문제가 해결됐다. - 초대받은 서버 모달에서 매우 긴 닉네임 때문에 UI 요소가 잘리던 문제가 수정됐다. - 높은 확대 비율에서 이벤트 상세 모달의 정보 영역이 지나치게 압축되던 문제가 해결됐다. - 작은 창과 높은 확대 설정에서 Shop 필터 패널이 화면보다 커져 “Clear Filters” 버튼을 누를 수 없던 문제가 수정됐다. - Join Game Server 안내 모달에 불필요한 스크롤바가 나타나던 문제가 제거됐다. - Student Hubs의 Add Servers 팝업에 불필요한 가로 스크롤바가 표시되던 문제가 해결됐다. ## 기타 상호작용 및 시각적 일관성 - Bluesky 연결 모달에서 핸들이 비어 있어도 Enter 키로 제출되던 문제가 수정됐다. - Nitro 결제 모달의 Nameplate 이미지에 실제 확대 기능이 없는데도 확대 커서가 표시되던 문제가 해결됐다. - 언급된 역할을 클릭할 때 역할 팝업과 채널 주제 상세 메뉴가 동시에 열리던 문제가 수정됐다. - Streamer Mode에서 Nitro 탭 헤더만 다른 탭보다 어둡게 보이던 문제가 해결됐다. - iOS Invite to Server 메뉴 요소의 모서리가 둥글게 표시되도록 통일됐다. - 데스크톱 창의 다양한 모달과 탭에서 잘못된 크기, 색상, 포커스, 스크롤 동작이 정리됐다. 이번 패치는 대형 기능 추가보다는 앱 시작 성능과 설정 구조를 개선하고, 모바일 실수 방지와 접근성·반응형 UI 문제를 폭넓게 다듬은 업데이트다. 사용자는 모바일 통화 버튼의 확인 단계와 개편된 Account 설정을 먼저 확인하면 되며, 특정 수정 사항이 보이지 않는다면 플랫폼별 순차 배포가 완료될 때까지 기다릴 필요가 있다.

meta

릴 프렌즈: 수십억 명까지 확장 가능한 소셜 디스커버리 구축 (새 탭에서 열림)

Friend Bubbles는 친구들이 시청하거나 반응한 릴스를 강조해 보여주는 기능이다. 겉보기에는 단순하지만, 실제 구현에는 머신러닝 모델의 발전과 iOS·Android 사용자 행동 차이 분석 등 복잡한 엔지니어링 작업이 필요했다. Meta Reels 팀은 개발 과정에서 기능의 작동 방식을 결정짓는 중요한 발견을 통해 최종적인 사용자 경험을 완성했다. ### 친구 활동을 활용한 릴스 추천 - 친구들이 시청하거나 반응한 릴스에 친구 정보를 표시해 콘텐츠의 사회적 맥락을 강화한다. - 사용자는 친구들의 활동을 바탕으로 새로운 릴스를 발견할 수 있다. - 단순히 친구의 반응을 수집하는 것이 아니라, 어떤 활동을 어떤 방식으로 노출할지 결정해야 한다. ### 머신러닝 모델의 발전 - Friend Bubbles의 핵심에는 친구 활동과 콘텐츠 노출을 연결하는 머신러닝 모델이 있다. - 모델은 어떤 친구의 어떤 반응이 사용자에게 의미 있을지 판단해야 한다. - 기능 개발 과정에서 모델이 초기 형태에서 발전했으며, 데이터와 실제 사용자 행동을 반영해 개선됐다. - “친구가 반응했다”는 사실만으로는 충분하지 않고, 콘텐츠와 사용자 사이의 관련성까지 고려해야 했다. ### iOS와 Android 사용자의 행동 차이 - iOS와 Android 사용자 사이에는 릴스 소비 방식과 친구 활동에 반응하는 방식에서 차이가 나타났다. - 동일한 기능을 두 플랫폼에 제공하더라도 사용자 행동이 다르기 때문에, 플랫폼별 데이터를 별도로 분석해야 했다. - 이러한 차이는 모델 학습과 기능 설계, 노출 방식 조정에 영향을 미쳤다. ### 예상 밖의 발견과 기능 완성 - 개발팀은 초기 가정만으로는 기능이 기대한 만큼 자연스럽게 작동하지 않는 문제를 겪었다. - 사용자 행동을 분석하는 과정에서 기능의 효과를 결정하는 “놀라운 발견”을 찾아냈다. - 이 발견을 바탕으로 친구 활동과 릴스 추천의 연결 방식을 조정했고, Friend Bubbles가 의도한 사용자 경험을 구현할 수 있었다. ### 단순한 기능에 필요한 깊은 엔지니어링 - Friend Bubbles 사례는 화면에 작은 정보를 추가하는 기능도 대규모 추천 시스템과 사용자 행동 분석을 요구할 수 있음을 보여준다. - 기능 구현에는 모델 설계뿐 아니라 플랫폼별 차이, 데이터 해석, 실험과 반복 개선이 함께 필요했다. - 글의 내용은 Meta Tech Podcast에서 Facebook Reels 팀 엔지니어들이 이러한 개발 과정을 설명한다는 소개에 해당하며, 세부 구현 방식은 팟캐스트 에피소드에서 다뤄진다. 작아 보이는 사용자 기능일수록 실제로는 추천 모델, 행동 데이터, 플랫폼별 최적화가 긴밀하게 결합되어야 한다. 비슷한 기능을 개발할 때는 초기 직관에만 의존하지 말고, 실제 사용자 행동과 플랫폼별 차이를 지속적으로 검증하는 것이 중요하다.

discord

Discord 패치 노트: 2026년 5월 4일 (새 탭에서 열림)

Discord의 2026년 5월 4일 패치 노트는 성능·안정성·사용성 개선과 다양한 버그 수정을 다룬다. 특히 서버 관리 및 권한 관련 문제를 집중적으로 해결했고, Android 동영상 시작 속도와 Soundboard 접근성을 개선했다. 데스크톱 설정 구조를 단순화하고 Linux 자동 업데이트도 지원해 전반적인 사용 편의성을 높였다. ## 서버 관리와 권한 문제 개선 - 서버 관리자용 기능에서 권한, 사용자 상태, 계정 안전 기능과 관련된 여러 오류를 수정했다. - Community 설정의 “Discord 관리자 서버 참여” 팝업을 닫아도 나중에 다시 참여할 수 있도록 버튼이 사라지지 않게 했다. - 서버 부스트 결제 화면에서 `ESC`를 눌렀을 때 결제 창이 아니라 뒤쪽의 부스트 페이지가 닫히던 문제를 해결했다. - 서버 프로필 편집 중 저장하지 않은 변경 사항이 있을 때, 모달 바깥을 클릭해도 경고 없이 닫히지 않도록 동작을 개선했다. - 서버별 프로필의 대명사를 지울 때 기본 프로필의 대명사가 자동 입력되던 문제를 수정하고, 기본 대명사는 placeholder로 표시한다. - 서버별 아바타의 링크를 복사할 때 기본 프로필 아바타 링크가 복사되던 문제를 해결했다. ## Android 동영상과 모바일 성능 - Android의 동영상 전송 네트워크 스택을 추가로 조정했다. - Android에서 동영상 피드가 시작되는 속도가 약 4.89% 빨라졌으며, 평균 시작 시간이 600ms 미만으로 줄었다. - 모바일에서 검색 결과를 불러오는 중 연결이 끊겼을 때 오류 메시지가 반복 표시되거나 요청을 무한 재시도하던 문제를 수정했다. - Media, Pins, Files, Links 탭에서 네트워크 오류가 발생해도 불필요한 재시도가 반복되지 않는다. - Android 검색 필터가 활성화되어도 파란색으로 표시되지 않던 시각적 문제를 해결했다. - iOS에서 프로필 또는 앱 소개의 링크를 눌렀을 때 발생하던 충돌을 수정했다. - iOS에서 기본 프로필의 사용자 이름을 복사한 뒤 서버별 프로필 화면으로 되돌아가던 문제도 해결했다. ## 데스크톱 설정 구조 개편 - 기존 Appearance, Accessibility, Chat, Streamer Mode, Advanced 설정을 다음 세 페이지로 통합했다. - Appearance - Accessibility - Developer - 일부 설정의 배치와 문구를 명확하게 변경했다. - “Sync Themes Across My Devices”를 다시 활성화했을 때 현재 테마가 이전에 동기화된 테마로 되돌아가던 문제를 수정했다. - 최근 아바타에 마우스를 올렸을 때 삭제 버튼이 보이지 않던 문제를 해결했다. - 프로필 편집 모달의 저장 변경사항 표시줄이 Legacy Username Badge 토글과 겹치던 문제를 수정했다. - “Connect Your Domain” 화면의 버튼 간격이 지나치게 좁거나 가장자리에 붙던 레이아웃 문제를 개선했다. - 프랑스어 환경에서 Poll 검색 필터인 `sondage`가 `Son`과 `dage`로 잘못 분리되던 문제를 해결했다. ## Soundboard와 음성 채널 로딩 - Soundboard 데이터를 처음 열 때가 아니라 음성 채널에 참가할 때 미리 가져오도록 변경했다. - 그 결과 음성 통화 중 Soundboard를 처음 사용할 때의 로딩 시간이 줄었다. - 작은 로딩 속도 개선만으로도 Soundboard 효과 사용량이 측정 가능하게 증가했다고 설명한다. ## Linux 업데이트와 패키지 지원 - Windows에서 사용하던 Rust 기반 자동 업데이트 시스템을 Linux에도 적용했다. - 이제 Linux 사용자는 새 버전을 직접 내려받아 설치하지 않고 앱 자체에서 업데이트할 수 있다. - 설치 패키지 형식으로 `.rpm`과 `.pkg.tar.zst`도 추가 지원한다. ## 기타 일반 버그 수정 - “Copy Username” 기능의 `GODLIKE!!`, `BEYOND GODLIKE!!` 메시지 배경이 투명하게 보이던 문제를 수정했다. 배경색은 기존 빨간색 대신 초록색으로 통일했다. - Quick Switcher에 초대 링크를 붙여 넣으면 해당 서버에 참가하고 바로 이동할 수 있게 됐다. - Active Now 창에서 사용자 이름에 마우스를 올릴 때 상태 표시기가 흰색으로 변하던 문제를 해결했다. - 모바일 검색 결과에서 긴 닉네임이 메시지 타임스탬프를 가리던 문제를 수정했다. - Server Boost 홍보 화면의 오디오가 결제 흐름으로 이동한 뒤에도 계속 재생되던 문제를 해결했다. - 알림을 빠르게 여러 개 삭제할 때 Inbox가 충돌하던 문제를 수정했다. - Nitro 탭에서 Nitro 가입 기간 보상 배지를 눌러도 사라지지 않던 문제를 해결했다. - 구독 설정에서 `GBP` 통화명이 비어 보이던 문제를 수정했다. - Inbox의 Unreads 미리보기에서 만료된 공개 이미지 링크가 표시되지 않던 문제를 해결했다. - 친구 요청 이메일에 오래된 `#0` discriminator가 표시되던 문제를 수정했다. - Nitro 체험 대상 친구를 선택하는 체크박스가 실제로 선택되지 않던 문제를 해결했다. - 사용자 프로필에서 Custom Status 편집 창을 열 때 전체 프로필을 대체하지 않고 위에 표시되도록 변경했다. - 프로필, 서버 부스트, 검색, 알림, 결제 등 여러 화면의 모달·버튼·레이아웃 관련 세부 오류를 정리했다. ## 적용 일정과 테스트 참여 - 모든 수정 사항은 코드에 반영되고 병합되었지만, 플랫폼별로 실제 배포되는 시점은 다를 수 있다. - 사용자는 커뮤니티의 격월 버그 메가스레드에 문제를 신고할 수 있다. - iOS 사용자는 TestFlight 버전에 참여해 정식 출시 전 기능과 수정 사항을 시험할 수 있다. 이번 업데이트는 대규모 신기능보다 서버 관리자 기능의 신뢰성, 모바일 성능, 설정 탐색성, 플랫폼별 업데이트 편의성을 높이는 데 초점을 맞췄다. Discord를 관리하거나 Android·Linux·데스크톱 앱을 주로 사용하는 사용자는 업데이트 후 관련 기능의 개선 여부를 확인해 보는 것이 좋다.

discord

디스코드 패치 노트: 2026년 4월 6일 (새 탭에서 열림)

Discord의 2026년 4월 6일 패치 노트는 음성 연결 안정성, 접근성, 미디어 업로드 성능을 중심으로 다양한 개선 사항을 소개한다. 데스크톱 음성 스레드 교착 상태를 약 30% 줄였고, iOS에서는 이미지 업로드 용량과 지연 시간을 각각 약 17%, 12% 개선했다. 이 밖에도 검색, 모바일 가로 모드, AFK 감지, 계정·친구·서버 기능과 여러 UI 버그를 수정했으며, 변경 사항은 플랫폼별로 순차 배포될 수 있다. ## 음성 연결과 미디어 공유 성능 개선 - 데스크톱에서 음성 채널 접속 중 “Connecting” 상태에 멈추는 음성 스레드 교착 문제를 약 30% 감소시켰다. - iOS에서는 이미지 업로드 파일 크기를 약 17% 줄이고 업로드 지연 시간을 약 12% 단축했다. - 결과적으로 음성 채널 연결 실패와 모바일 이미지 공유 시 대기 시간이 줄어들 것으로 기대된다. ## 접근성과 모바일 화면 개선 - Discord는 대규모 접근성 감사를 계속 진행하고 있으며, 이번 패치에서도 접근성 관련 수정이 대폭 포함될 예정이라고 밝혔다. - 모바일 가로 모드에서 전체 화면에 일괄 적용하던 패딩 대신 화면별로 패딩을 계산하도록 변경했다. - 이에 따라 가로 화면에서 불필요한 크기 조정이 줄고 화면 전환이 자연스러워졌다. - 데스크톱의 키보드 포커스 링, 설정 버튼 정렬, 긴 번역 문자열로 인해 프로필 버튼이 화면 밖으로 밀려나는 문제도 수정했다. ## 검색 및 기본 기능 수정 - `has:-image`와 같은 검색 부정 연산자가 무시되던 문제를 해결했다. - 이제 이미지가 포함된 메시지를 제외하는 검색 필터가 정상적으로 동작한다. - Wayland 환경의 Linux 클라이언트에서도 AFK 상태를 올바르게 감지하고 진입·해제할 수 있게 됐다. - 서버 목록을 수동으로 재정렬할 때 Android의 스크롤 속도도 개선했다. ## 데스크톱 UI와 입력 동작 개선 - 설정 화면의 편집·녹음 키 바인드 버튼 수직 정렬 문제를 수정했다. - 최소 높이 창에서 Shop 상품 모달을 바깥 영역 클릭으로 닫을 수 없던 문제를 해결했다. - 모달이 열린 상태에서 `CMD/CTRL+F`를 누르면 서버 검색이 실행되던 문제를 수정했다. - 테마나 앱 아이콘을 선택할 때 설정 모달이 페이지 하단으로 튀던 문제를 해결했다. - 브라우저에서 Discord 링크를 열어 데스크톱 앱으로 전환할 때 현재 채널이 덮어써지던 동작을 수정했다. - 업데이트 다운로드 중 클릭할 수 있는 것처럼 보이던 아이콘과, 프로필 편집에서 자기소개 변경 사항을 제대로 초기화하지 못하던 문제도 고쳤다. - 채널 이름 입력창에 지원되지 않는 커스텀 이모지 추가 버튼이 표시되던 문제를 제거했다. ## 친구, 계정, 프로필 기능 수정 - Android QR 코드로 친구를 추가한 뒤 요청이 전송되었다는 시각적 피드백이 없던 문제를 해결했다. - 이미 친구 추천 요청을 보낸 사용자가 추천 목록에 중복 표시되던 문제를 수정했다. - iOS에서 Invisible 상태에서 다른 상태로 전환하지 못하는 문제를 해결했다. - 계정 전환 후 브라우저 스타일의 뒤로 가기·앞으로 가기 탐색이 올바르게 작동하도록 수정했다. - 프로필의 외부 링크 연결 아이콘을 잘못 표시하던 문제와, 대기 중 친구 요청에 사용자 이름이 툴팁으로 중복 표시되던 문제를 고쳤다. ## 모바일 클라이언트 수정 - Android에서 테마를 변경해도 설정 화면 일부가 즉시 갱신되지 않던 문제를 해결했다. - Android QR 로그인 화면에서 활성화된 “로그인” 버튼이 사용할 수 없는 것처럼 보이던 문제를 수정했다. - Android의 인앱 브라우저 설정이 외부 브라우저를 여는 문제를 해결했다. - iOS에서 서버를 전환할 때 채널 목록이 순간적으로 흔들리거나, 검색 결과의 봇 메시지 컨테이너 안 이미지가 지나치게 작게 표시되던 문제를 수정했다. - iOS Server Guide의 신규 회원 진행률 표시, 환영 메시지 지연, 완료 후 진행률 바가 사라지지 않는 문제를 해결했다. - Nitro Classic 구독 취소 과정에서 발생할 수 있던 iOS 충돌도 수정했다. ## 서버, 상점 및 기타 시각적 버그 - Student Hub 가입 방식 필터가 제대로 작동하지 않던 문제를 해결했다. - 서버 템플릿 미리보기에서 역할이 오래된 디자인으로 표시되던 문제를 수정했다. - 상점의 구매 완료 오류 메시지 여백, Nitro 선물 이모지 선택기의 버튼 동작, Nitro Home 카드와 배지의 겹침 문제를 개선했다. - 프로필 배너 색상이 사용자 지정 상태의 반응·답장 도구 모음에 번지던 현상을 수정했다. - 게임 오버레이 사용 중 Inbox 멘션 탭의 패딩이 잘못 표시되던 문제와 서버 초대 모달의 키보드 포커스 위치 문제도 해결했다. 이번 업데이트는 새로운 대형 기능을 추가하기보다 음성 연결 안정성, 업로드 성능, 접근성, 플랫폼별 세부 오류를 폭넓게 다듬은 유지보수 중심의 패치다. Discord 사용자는 데스크톱 음성 연결이나 iOS 이미지 업로드를 자주 이용한다면 업데이트가 적용되었는지 확인하고, 문제가 계속될 경우 공식 버그 제보 채널이나 커뮤니티 버그 메가스레드에 신고하는 것이 좋다.

discord

디스코드 패치 노트: (새 탭에서 열림)

이번 패치 노트는 Discord의 성능, 안정성, 접근성, 사용성을 개선한 다양한 수정 사항을 소개합니다. 특히 `\@everyone`와 `\@here`가 실제 멘션을 발생시키던 문제를 서버 측에서 바로잡았고, 데스크톱 앱의 중앙 실행 시간(p50 TTI)을 11.8% 단축했습니다. 또한 iOS·Android·Desktop 전반에서 실행 지연, 탐색, UI 정렬, 권한 및 역할 관리와 관련된 버그를 폭넓게 수정했습니다. ## 멘션 처리와 알림 안정성 개선 - `\@everyone`, `\@here`처럼 이스케이프된 멘션이 클라이언트에서는 일반 텍스트처럼 보이지만, 실제 전송 시 역할 멘션을 발생시키던 문제를 수정했습니다. - 이제 백엔드에서도 이스케이프 문자를 올바르게 해석하므로 `\@everyone`은 실제 알림을 보내지 않습니다. - 대규모 서버에서 의도치 않게 많은 사용자에게 알림을 보내는 사고를 방지할 수 있게 됐습니다. ## 데스크톱 성능 향상 - API가 Desktop 클라이언트로 전달하는 payload 순서를 변경했습니다. - 그 결과 앱 실행에 걸리는 중앙값인 p50 TTI가 11.8% 감소했습니다. - 전주에 진행된 내비게이션 성능 개선과 함께 데스크톱 앱의 초기 응답성과 실행 속도를 지속적으로 개선하고 있습니다. ## 접근성 개선 - Quest, Events, Profiles, Activities, Nitro 관련 화면을 대상으로 접근성 문제를 집중적으로 수정했습니다. - 스크린 리더 사용자가 해당 화면을 더 쉽게 탐색할 수 있도록 구조와 상호작용을 개선했습니다. - 이번 패치에 나열되지 않은 접근성 수정도 별도로 계속 진행 중입니다. ## 모바일 실행 및 애니메이션 문제 수정 - iOS에서 기기 재시작 후 앱 실행에 최대 2분이 걸리던 문제를 수정했습니다. - 부팅 직후 백그라운드 큐에 몰리는 asset 요청이 앱 실행을 지연시키던 것이 원인이었습니다. - 모바일에서 채팅 전환 등 UI 애니메이션이 중간 상태에서 멈추던 문제를 해결했습니다. - iOS 26에서 전체 화면 뒤로 스와이프 제스처가 작동하지 않던 문제를 수정했습니다. - iOS 설정 화면의 과도한 자동 스크롤과 기기가 절전 모드로 진입하지 못하는 문제도 해결했습니다. - iOS 스위치의 비활성화 상태 스타일을 통일했습니다. ## 메시지, 검색 및 초대 기능 개선 - Nitro 사용자가 보낸 대용량 첨부파일을 일반 사용자가 전달하지 못하던 비의도적 제한을 제거했습니다. - League of Legends 게임 초대가 간헐적으로 작동하지 않던 문제를 수정했습니다. - 일부 게임의 Overlay용 “Join” 초대가 정상적으로 생성되지 않던 문제를 해결했습니다. - 검색 결과에서 선택 항목이 첫 번째 항목에 고정되던 문제를 수정했습니다. - 현재 보고 있는 텍스트 채널이 `Ctrl/Cmd+F` 검색어에 자동으로 입력되지 않던 문제를 해결했습니다. - 메시지 작성 중 글자 수 제한 UI가 겹쳐 이모지·표현식 선택 버튼을 가리던 문제를 수정했습니다. - 우클릭으로 링크를 복사한 뒤 키보드 단축키가 일시적으로 작동하지 않던 문제를 해결했습니다. - Quick Switcher에서 `Ctrl/Cmd+T`로 닫기가 정상 동작하도록 수정했습니다. ## 서버 관리와 역할 기능 수정 - 비공개 채널 생성 시 역할 추가 단계에서 Desktop의 “Skip” 옵션을 선택할 수 없던 문제를 해결했습니다. - 모바일에서 역할 정렬과 관리자 역할 선택 기능을 복구했습니다. - 역할이 매우 많은 서버에서도 관리자용 역할 선택기를 다시 스크롤할 수 있습니다. - Android에서 역할 색상 선택기가 정상적으로 작동하지 않던 문제를 수정했습니다. - 삭제할 수 없는 역할에 “Remove Role” 항목이 표시되던 문제를 해결했습니다. - 채널 삭제 사유가 Audit Logs에 올바르게 표시되도록 수정했습니다. - 권한 설정 삭제 시 Android 모달의 레이어 순서가 잘못 표시되던 문제를 해결했습니다. - Server Onboarding의 채널·역할 선택 메뉴가 화면 밖으로 렌더링되던 문제와 모달 내부 정렬 문제를 수정했습니다. - 서버 초대 화면에서 Android의 정보가 중복 표시되던 문제를 수정했습니다. ## UI 정렬 및 표시 문제 개선 - Android Forest 테마에서 누락된 그라디언트를 복구했습니다. - Desktop의 채널 설명 링크가 지나치게 크게 표시되던 문제를 해결했습니다. - Nitro 홈 탭 이미지, 프로필의 아바타·상태 버튼, 채널 권한의 멤버 목록과 역할 삭제 아이콘 정렬을 수정했습니다. - 민감한 콘텐츠 알림이 메시지 아래에서 오른쪽 정렬되던 문제를 바로잡았습니다. - 브라우저에 따라 서버 아이콘이 지나치게 크거나 잘못 정렬되던 문제를 해결했습니다. - 게임 프로필의 툴팁에서 링크가 잘리던 문제를 수정했습니다. - 하드웨어 가속 설정 툴팁의 여백과 정렬을 조정했습니다. - 메시지 삭제 모달의 임베드 렌더링 문제를 해결했습니다. - 행 상태 아이콘과 텍스트 사이의 정렬 문제를 수정했습니다. ## 상점, 부스트 및 기타 기능 수정 - 여러 색상 변형을 가진 모바일 상점 수집품이 일부 변형을 표시하지 않던 문제를 해결했습니다. - 이모지 한도에 도달한 서버에서 “Boost Server” 버튼이 잘못 표시되던 문제를 수정했습니다. - 키보드로 서버 부스트 레벨에 초점을 맞출 때 부스트 버튼이 제대로 렌더링되도록 개선했습니다. - 프로필의 게임 위젯에서 마우스 뒤로 가기 탐색이 정상적으로 작동하도록 수정했습니다. - 웹훅 URL을 복사할 때 시각적 확인 표시가 없던 문제를 해결했습니다. - 오래된 Media 채널 홍보 팝오버와 연결된 404 링크를 제거했습니다. - Android 서버 초대 화면의 중복 정보 표시 문제와 일부 UI 표시 오류를 수정했습니다. 이번 패치는 새로운 대형 기능을 추가하기보다, 실제 사용 중 혼란이나 오작동을 일으키던 세부 문제를 광범위하게 정리한 안정성 중심 업데이트입니다. 특히 서버 관리자라면 멘션 오작동, 역할 선택·정렬, 온보딩 메뉴 문제를 줄이기 위해 최신 버전으로 업데이트하는 것이 좋습니다.

daangn

웹뷰 엔지니어를 위한 iOS Webview Input 경험 개선기 (새 탭에서 열림)

당근 커뮤니티실의 웹뷰 엔지니어가 iOS 환경에서 키보드가 올라올 때 화면 전체가 위로 밀리는 고질적인 문제를 해결하기 위해 시도한 네 가지 단계의 여정을 담고 있습니다. iOS 웹뷰의 레이아웃(Layout) 및 시각적(Visual) 뷰포트 특성을 분석하고, 최종적으로 `opacity` 속성을 이용해 OS의 자동 스크롤 동작을 선제적으로 차단하는 최적의 사용자 경험(UX) 솔루션을 도출했습니다. 이는 기술적 완결성보다 유저의 입력 흐름을 깨지 않는 실전적인 해결책에 집중한 사례입니다. ### iOS 웹뷰의 뷰포트 구조와 문제의 원인 iOS 웹뷰에서 입력창(Input)에 포커스가 되면 키보드 공간을 확보하기 위해 페이지가 위로 밀려 올라가는 현상이 발생합니다. * **두 가지 뷰포트의 차이**: 키보드가 올라와도 크기가 변하지 않는 'Layout Viewport'와 사용자 눈에 보이는 영역인 'Visual Viewport' 간의 불일치가 원인입니다. * **OS의 강제 동작**: iOS는 포커스된 입력창을 시각적 영역 안에 두기 위해 페이지 전체를 밀어 올리며, 이 과정에서 상단 콘텐츠가 화면 밖으로 사라지는 등 웹 개발자가 제어하기 어려운 동작이 수반됩니다. ### 초기 시도: 리사이징과 오프셋 보정의 한계 문제를 인지한 후 화면을 원래 위치로 되돌리거나 밀린 만큼 따라가는 방식을 시도했으나 기술적 한계가 있었습니다. * **Resize 방식**: `visualViewport`의 변화를 감지해 래퍼 요소를 축소하고 `scrollTo(0, 0)`를 호출했으나, OS가 화면을 먼저 밀어버린 후 복구되기 때문에 화면 떨림과 깜빡임이 발생했습니다. * **OffsetTop 방식**: `visualViewport.offsetTop` 값을 계산해 화면이 밀린 만큼 레이아웃의 `top` 위치를 조정했습니다. 첫 번째 시도보다 나았지만, 키보드가 올라오는 과정에서 실시간 보정 딜레이로 인한 미세한 진동 피드백이 남았습니다. ### 전환점: Fake Input을 활용한 입력창 스왑 iOS가 화면을 밀어 올리는 원인 자체를 제거하기 위해 입력창을 두 개로 분리하는 전략을 세웠습니다. * **동작 원리**: 평소에는 화면에 보이는 'Fake Input(ReadOnly)'을 노출하고, 터치 시 화면 밖에 숨겨둔 'Real Input'에 포커스를 줍니다. * **효과**: iOS는 화면 밖에 있는 요소를 위해 스크롤을 발생시키지 않으므로 화면 밀림이 완벽히 해결되었습니다. * **문제점**: 두 입력창 사이의 값(Value), 선택 영역, 자동 높이 조절 등을 동기화해야 하는 로직이 매우 복잡해져 유지보수 부담이 컸습니다. ### 최종 해결책: Opacity를 이용한 OS 속이기 입력창을 하나만 유지하면서도 OS의 자동 스크롤을 막기 위해 브라우저의 특성을 활용한 'Opacity Trick'을 적용했습니다. * **핵심 아이디어**: iOS는 `opacity: 0`인 요소에 대해서는 'scroll-into-view'(포커스된 요소를 화면 안으로 가져오는 동작)를 수행하지 않는다는 점을 발견했습니다. * **구현 로직**: `onTouchStart` 시점에 입력창의 `opacity`를 0으로 만들어 자동 스크롤을 차단한 뒤, `focus`가 완료되고 키보드가 올라온 시점에 다시 `opacity`를 1로 복원합니다. * **결과**: 입력창 상태 관리의 복잡성 없이 단일 요소를 사용하면서도 화면 밀림 현상을 선제적으로 차단하여 가장 매끄러운 UX를 구현했습니다. 정석적인 API가 없는 환경에서 유저 경험을 위해 선택한 이 방식은 다소 'Hacky'할 수 있으나, 프로덕트의 핵심인 '글쓰기 경험'을 보호하기 위한 엔지니어링적 결단이었습니다. 기술적인 완벽함보다는 유저가 느끼는 불편함을 제거하는 것이 우선이며, OS 업데이트 등 변화하는 환경에 맞춰 지속적으로 해결책을 고도화해 나가는 자세가 중요합니다.

discord

디스코드 패치 노트: 20 (새 탭에서 열림)

Discord의 2026년 2월 4일 패치는 데스크톱 렌더링 성능, 스트리밍 사용성, 모바일 안정성, 권한 관리 등을 폭넓게 개선했다. 특히 느린 CSS 선택자를 최적화해 화면 이동과 상호작용 지연을 크게 줄였고, 화면 공유 확대·이동과 `@time` 명령어 같은 기능을 추가했다. 또한 오디오·비디오 백엔드의 Rust 이전이 80% 이상 진행됐으며, 다양한 플랫폼별 버그도 수정했다. ## 데스크톱 성능과 스트리밍 개선 - 데스크톱 렌더링 성능을 크게 향상해 메뉴 탐색과 앱 조작 시 지연을 줄였다. - 성능 저하의 주요 원인은 느린 엔드포인트나 컴포넌트가 아니라 비효율적인 CSS 선택자로 확인됐다. - 화면 공유 및 게임 스트림에서 마우스 휠이나 트랙패드로 확대·축소와 화면 이동이 가능해졌다. - 스트리밍 시작 과정의 미리보기 로딩 시간을 단축했다. - 프로필 편집 중 `Esc`를 눌러도 전체 프로필 편집 모달이 닫히지 않도록 수정했다. - 선택 항목이 없을 때 복사 단축키를 누르면 클립보드가 비워지던 문제를 해결했다. ## 모바일 기능 및 플랫폼별 수정 - Android 그룹 DM 알림에 발신자 이름 대신 그룹 이름이 표시되도록 변경해 iOS와 동작을 통일했다. - Android에서 여러 오디오 트랙이 포함된 동영상이 정상적으로 재생되도록 수정했다. - iOS의 클라이언트 테마 목록을 스와이프할 때 지나치게 빠르게 스크롤되던 문제를 해결했다. - Android에서 불필요한 하단 바가 표시되어 상호작용을 막던 문제를 수정했다. - iOS 및 Android 연결 설정의 버튼 정렬 문제를 해결했다. - 일부 Android 기기에서 Shop이 한 열로만 표시되던 문제를 수정했다. - iOS에서 GIF 선택기로 새 아바타를 설정할 때 정지 이미지로 저장되던 문제를 해결했다. - 모바일의 채널 탐색 기능은 베타 상태를 종료하고 정식 기능으로 전환됐다. ## 서버 권한과 커뮤니티 관리 - 신뢰할 수 있는 사용자에게 부여할 수 있는 `Bypass Slowmode` 권한을 추가했다. - 이 권한을 기존 역할과 연결하는 설정이 2월 23일까지 서버 관리자에게 제공될 예정이다. - 역할 멘션을 클릭해 해당 역할을 가진 사용자 목록을 확인하는 기능이 모든 안정화 버전에 적용됐다. - 서버 초대 모달이 사용자명뿐 아니라 표시 이름도 지원하도록 개선됐다. - 서버 태그가 데스크톱 프로필 미리보기에 올바르게 반영되도록 수정했다. - 역할 선택 필드가 투명하게 표시되던 문제와 서버 설정의 이모지 영역 정렬 문제를 해결했다. ## 오디오·비디오 백엔드의 Rust 전환 - Discord는 지난 1년간 오디오·비디오 백엔드를 Rust로 이전해 왔다. - 현재 전체 트래픽의 80% 이상이 새로운 Rust 기반 백엔드에서 처리된다. - 이번 패치에서는 이 마이그레이션이 상당히 진행되었음을 강조하며, 성능과 안정성 개선의 기반으로 제시했다. ## 시간 표시와 기타 사용성 개선 - 데스크톱에서 새로운 `@time` 명령어를 제공한다. - 사용자가 특정 시각을 입력하면 Discord가 Linux 타임스탬프를 생성하고, 보는 사람의 시간대에 맞춰 자동으로 표시한다. - `Ctrl+Alt+Shift+W` 또는 macOS의 `Cmd+Option+Shift+W`로 Vibing Wumpus 2.0을 실행할 수 있다. - 로그아웃할 때 재생 중인 음성 메시지가 정상적으로 중지되도록 수정했다. - 친구 요청을 무시한 뒤 DM 화면의 버튼이 “친구 요청 수락”에서 “친구 추가”로 올바르게 변경된다. - 이벤트 미리보기에서 Markdown이 정상적으로 렌더링된다. - 이벤트 진행 중에는 오류를 유발할 수 있는 “관심 있음” 버튼이 표시되지 않도록 수정했다. ## 프로필, 채널, 메시지 관련 버그 수정 - 프로필의 “About Me”를 편집할 때 커서가 부적절하게 텍스트 끝으로 이동하던 문제를 해결했다. - 서버별 프로필 편집 중 아바타 장식이 제대로 렌더링되지 않던 문제를 수정했다. - 프로필 테마 그라디언트가 모달 전체를 채우지 못하던 문제를 해결했다. - 매우 긴 포럼 채널 설명 때문에 채널 탐색 화면이 흔들리던 문제를 수정했다. - 서버 멤버 메뉴의 열 정렬 문제를 해결했다. - 포럼 채널이 포함된 온보딩 작업에서 UI 요소가 겹치던 문제를 수정했다. - 이모지 편집 시 “완료” 버튼을 빠르게 두 번 누르면 이모지가 중복되던 문제를 해결했다. - 서버에 텍스트 채널이 없는 상태에서 스티커의 관련 이모지를 클릭하면 클라이언트가 충돌하던 문제를 수정했다. - 받은 선물 모달이 두 번 나타나는 문제를 해결했다. - 데스크톱 받은편지함의 필터가 작동하지 않던 문제를 수정했다. ## 안정성 및 인터페이스 개선 - 특정 메뉴를 탐색할 때 클라이언트가 잠기는 문제를 해결했다. - Checkpoint 모달이 중복 표시되어 작업이 두 번 로드될 수 있던 문제를 수정했다. - F10 이후 기능 키가 UI에 `0`으로 표시되고 저장되지 않던 문제를 해결했다. - 위험할 수 있는 다운로드 모달의 버튼 간 여백을 조정했다. - 모바일의 커뮤니티 활성화 화면이 제대로 표시되지 않던 문제를 수정했다. - iOS에서 채널 카테고리가 읽지 않은 채널처럼 보이던 스타일 문제를 해결했다. - 데스크톱의 서버 설정 이모지 영역, 역할 선택 영역 등 여러 UI 정렬과 여백을 개선했다. - 모든 수정 사항은 코드에 반영됐지만 플랫폼별 배포는 단계적으로 진행될 수 있다. 이번 업데이트는 새로운 대형 기능보다는 성능과 안정성, 플랫폼 간 동작 통일에 초점을 맞췄다. 특히 데스크톱 사용자는 렌더링 지연 감소를, 스트리밍 사용자는 화면 확대·이동과 빠른 미리보기를, 서버 관리자는 `Bypass Slowmode` 권한을 우선 확인할 만하다.