앱 개발을 진행하다 보면, 정작 제 개발 기기 한 대에서는 기가 막히게 잘 보이는데 사용자들이 쓰는 기기에서는 화면이 밀리거나 깨진다는 리포트를 받을 때가 있습니다.
작은 폰, 큰 폰, 태블릿, 그리고 생각지도 못한 가로 모드(Landscape)까지 대응하다 보면 어떤 기기에서 무엇을 확인했는지 금방 헷갈리기 일쑤입니다. 버튼이 화면 밖으로 밀리거나, 리스트 높이가 부족해서 스크롤이 안 되거나, 지도와 상세 영역이 겹치는 등 운영하다 보면 참 다양한 UI 이슈를 마주하게 됩니다.
저도 자꾸 까먹고 놓치는 부분이 생겨서, 나중에 다시 검증할 때 기준이 흔들리지 않도록 실무에서 화면 최적화할 때 사용하는 문서화 방법과 체크리스트 기준을 정리해 둡니다.
왜 화면 체크리스트가 필요한가 (내가 겪은 상황)
반응형 UI 문제는 눈에 바로 보이니까 대충 감으로 고치고 넘어가기 쉽습니다. 하지만 페이지가 많아지고 프로젝트 규모가 커지면 기억에만 의존하는 확인은 무조건 한계가 옵니다.
저의 경우도 홈 화면은 일반 모바일에서 멀쩡하니까 넘어갔다가, 나중에 태블릿 가로 모드에서 확인해 보니 양옆 여백이 지나치게 광활해져서 부랴부랴 수정한 적이 있습니다. 지도 화면 같은 경우도 세로로 볼 때는 괜찮다가 가로로 돌렸을 때 하단 목록 영역이 위로 치고 올라와 지도를 다 가려버리는 일이 터지기도 합니다.
이런 문제는 확인 조건과 환경을 기록해 두지 않으면 나중에 다시 재현하기도 어렵고, UI를 수정했을 때 다른 곳에서 문제가 터지는 회귀(Regression) 현상을 잡아내기 어렵습니다. 따라서 단순히 '확인했음' 표시를 하는 게 아니라, 어떤 조건에서 검증했는지 추적하기 위한 기준표가 반드시 필요합니다.
화면 최적화 주요 원인과 체크 기준
자주 발생하는 UI 깨짐 현상과 그 원인을 묶어서 기준을 잡아야 합니다. 주로 아래의 내용들을 먼저 점검합니다.
| 버튼 잘림 | 고정 높이/너비 설정 오류 | 작은 화면 기기에서 캡처 확인 |
| 태블릿 여백 과다 | 모바일 기준 레이아웃만 적용됨 | breakpoint 분기점 확인 |
| 가로 모드 깨짐 | Orientation(방향) 미고려 | Landscape 상태에서 스모크 테스트 |
| 텍스트 겹침 | 긴 문자열/다국어 테스트 부족 | 긴 제목이나 샘플 데이터 적용 |
| 지도/콘텐츠 오류 | 높이 계산 고정값 사용 | 목록+지도 조합 시 스크롤 가능 여부 |
체크리스트에 반드시 넣어야 할 항목
체크리스트를 만들 때는 "반응형 확인 완료"처럼 추상적으로 적으면 아무 도움이 안 됩니다. 아래처럼 어떤 화면을 어떤 환경에서 테스트했는지 명확하게 쪼개서 기록해야 합니다.
| 기기 크기 | Small Phone, Normal Phone, Tablet |
| 화면 방향 | Portrait (세로), Landscape (가로) |
| 주요 화면 | 홈, 목록, 상세, 지도, 설정 등 핵심 뷰 |
| 데이터 상태 | 로딩 중, 성공(정상 데이터), 빈 데이터(Empty), 에러 화면 |
| 텍스트 길이 | 짧은 텍스트, 아주 긴 제목, 줄바꿈 처리 여부 |
| 입력 요소 | 가상 키보드가 올라올 때 입력 필드가 가려지는지 여부 |
| 캡처 근거 | 실제 기기 캡처 파일 또는 확인 메모 링크 |
💡 실무 팁: > 막상 테스트를 해보면 정상 데이터가 이쁘게 들어있을 때보다, 데이터가 아예 없는 빈 화면(Empty State)이거나 에러가 났을 때, 혹은 제목이 비정상적으로 길 때 화면이 훨씬 더 잘 깨집니다. 이 예외 상태들을 무조건 체크리스트에 포함해야 QA 단계에서 고생을 안 합니다.
Breakpoint 분기점 기준 문서화
React Native나 Android 국한된 것은 아니지만, 레이아웃을 바꾸는 정확한 Breakpoint 값은 프로젝트마다 다를 수 있습니다. 중요한 건 감으로 숫자를 지정하는 게 아니라 왜 이 기준에서 레이아웃을 나누는지 이유를 적어두는 것입니다.
type ScreenClass = 'compact' | 'medium' | 'expanded';
export function getScreenClass(width: number): ScreenClass {
if (width < 600) return 'compact'; // 일반 모바일 세로
if (width < 900) return 'medium'; // 큰 모바일 가로 또는 소형 태블릿
return 'expanded'; // 대형 태블릿 및 데스크톱급
}
예를 들어 compact에서는 단일 컬럼으로 꽉 차게 보여주고, medium에서는 카드 간격을 조절하며, expanded에서는 목록과 상세를 한 화면에 나란히(Master-Detail) 배치하는 식으로 규칙을 만듭니다. 이렇게 분기점과 레이아웃 변경 사유를 코드와 문서에 같이 남겨두어야 나중에 화면이 늘어나도 스펙을 설명하기 좋습니다.
가로 모드(Orientation) 확인 시 놓치기 쉬운 점
가로 모드는 단순히 화면 좌우가 넓어지는 상태가 아닙니다. 세로 높이가 극단적으로 줄어드는 상황으로 이해해야 합니다. 세로 공간이 부족해지기 때문에 평소엔 잘 보이던 하단 고정 버튼, 모달창, 키보드가 올라온 화면에서 폼 요소들이 다 잘려 나갑니다.
가로 모드 대응 시에는 아래 항목을 우선적으로 체크합니다.
- 상단 헤더 영역이 세로 화면 대비 지나치게 높아서 본문을 다 가리지 않는지 확인
- 하단 고정 버튼이 콘텐츠나 입력창을 가려버리지 않는지 확인
- 모달 팝업의 높이가 전체 화면 높이보다 커져서 확인 버튼이 안 누르는지 확인
- 키보드가 활성화되었을 때 입력 필드를 제대로 스크롤해서 보여주는지 확인
- 지도와 리스트 뷰가 겹치지 않고 레이아웃이 유연하게 찢어지는지 확인
태블릿은 넓은 화면을 어떻게 쪼개서 '활용'할지가 포인트라면, 모바일 가로 모드는 줄어든 세로 공간을 어떻게 '보장'할지가 더 중요합니다. 둘을 다르게 접근해야 합니다.
스모크 캡처(Smoke Capture) 상태 관리
말로만 "UI 확인했습니다"라고 넘어가면 나중에 사이드 이펙트가 발생했을 때 변경 전후를 비교하기 어렵습니다. 대표 화면들은 가급적 실제 기기에서 스모크 캡처를 따서 히스토리를 남겨두는 편이 안전합니다.
체크리스트 문서에서는 단순히 진척도를 체크하는 걸 넘어 아래처럼 상태를 세분화해서 관리합니다.
- 예정: 아직 확인 전 상태
- 확인 필요: 특정 기기나 테스트 데이터 조건이 부족해서 대기 중인 상태
- 캡처 완료: 실제 화면 스크린샷 근거가 확보된 상태
- 수정 필요: UI 깨짐이나 레이아웃 오류가 확인되어 수정 대기 중인 상태
실제 물리적인 캡처를 남겨두면 나중에 스타일 코드를 건드렸을 때 "어? 전에는 어땠지?" 하고 헤맬 일이 확실히 줄어듭니다.
앱 유형별(Profile) 대표 화면 정하기
운영 중인 서비스의 모든 화면을 매번 모든 기기(OS, 크기별)에서 전수 조사하는 것은 현실적으로 불가능합니다. 효율을 위해서 앱의 핵심 성격(Profile)에 따라 꼭 검증해야 할 '대표 화면'을 몇 개 지정해서 봅니다.
| 지도 중심 앱 | 홈, 지도 뷰, 장소 상세 페이지 | 지도 높이 계산 고정값 오류 및 상세 영역 겹침 확인 |
| 목록/커머스 앱 | 상품 목록, 상세, 검색 결과 | 아주 긴 상품명 처리, 데이터가 없을 때 빈 화면 확인 |
| 설정/안내 중심 앱 | 홈, 이용약관, 설정 메뉴 | 글자 크기 확대 시 텍스트 깨짐 및 스크롤 동작 확인 |
| 입력/폼 중심 앱 | 회원가입 폼, 키보드 활성화, 제출 완료 | 키보드가 폼 필드를 가리는지, 스크롤 뷰 적용 여부 확인 |
이렇게 기준을 잡아두면 전체 화면을 다 돌려보지 못하더라도 최소한 릴리즈 전 핵심 기능에서 UI가 터지는 불상사는 막을 수 있습니다.
마지막 배포 전 테스트 기준 (자주 하는 실수)
체크리스트 문서와 실제 검증 상태가 어긋나지 않도록 마지막으로 셀프 체크하는 기준입니다.
- [ ] 실제 사용자 데이터나 개인정보가 테스트 캡처 화면에 노출되지 않았는가
- [ ] 내부 관리자 전용 기능이나 테스트용 계정 정보가 스크린샷에 포함되지는 않았는가
- [ ] 캡처를 실제로 따서 확인하기 전에 성급하게 '완료'로 표시하지 않았는가
- [ ] 서비스 프로필 유형별 대표 화면을 최소 1개 이상 검증했는가
- [ ] 정상 데이터 외에 빈 데이터(Empty)와 에러 화면도 확인 대상에 넣었는가
- [ ] 태블릿 대응 가이드와 Landscape(가로) 대응 기준이 명확히 명시되어 있는가
- [ ] 긴 제목, 강제 줄바꿈, 다국어 상태에서 텍스트가 뚫고 나가지 않는지 확인했는가
결론
화면 최적화 체크리스트는 이쁘게 보이기 위한 디자인 문서가 아니라, 수정 시 발생할 수 있는 회귀 오류를 막기 위한 개발 실무 문서에 가깝습니다.
내가 쓰는 개발 기기 한 대에서 잘 나온다고 끝내지 말고, Small Phone, Tablet, Landscape, Empty State 처럼 실제 사용자들이 마주할 수 있는 구체적인 가혹 조건을 적어두면 리뷰와 QA 프로세스가 훨씬 매끄러워집니다. 확인되지 않은 항목은 절대로 완료 처리하지 않는 것이 가장 안전합니다.
한 번에 완벽한 화면을 만들기는 어렵지만, 변경 전후의 기록을 남기면서 조금씩 레이아웃을 안정화해 나가는 과정이 중요한 것 같습니다. 작업하시면서 본인 프로젝트에 맞는 기준들을 하나씩 추가해 보시기 바랍니다.
'개발 노트 > 기타' 카테고리의 다른 글
| 안드로이드 앱 검색 결과 없음(Empty State) 화면 예외 처리 및 UI 상태 설계 (0) | 2026.05.22 |
|---|---|
| [Android] 대형폐기물 정보 앱 화면 분리 및 데이터 구조 설계 기준 정리 (0) | 2026.05.22 |
| GitHub Actions Android UI 테스트 실패 로그 빠르게 분석하는 방법 (0) | 2026.05.21 |
| [Android] 멀티 앱 배포 실수 줄이기: Release Matrix 관리 방법 (0) | 2026.05.21 |
| [Android] 외부 앱 실행(Intent) 안전하게 구현하기 - 스킴 검증, resolveActivity, Fallback 처리 (0) | 2026.05.21 |