Skip to content

배움의 길

평생 배워야하는 것은 우리들의 운명이다.

Menu
Menu

HTML/CSS 기초부터 독학으로 반응형 웹사이트 만들어 본 솔직 후기

Posted on 2026년 10월 23일2026년 10월 15일 by steve

 

HTML/CSS 반응형 웹사이트 제작 후기: 코딩을 전혀 모르던 비전공자가 겪은 레이아웃 깨짐, 모바일 가로 스크롤 버그 해결법, Flexbox와 Grid 실전 팁, 미디어 쿼리 활용법까지 반응형 웹을 처음 만드는 분들을 위해 핵심 노하우를 알기 쉽게 총정리해 드립니다!

 

처음 웹 개발을 독학하겠다고 결심하고 코드 에디터를 설치했을 때가 아직도 생생하게 떠오르네요. 화면에 텍스트 한 줄 띄우고 배경 색상을 바꾸는 것만으로도 마치 대단한 프로그래머가 된 것처럼 마냥 신기하고 뿌듯했거든요. 😊 하지만 그 기쁨도 잠시, 제가 직접 만든 첫 포트폴리오 웹사이트를 스마트폰 브라우저로 열어본 순간 완전 멘붕에 빠지고 말았습니다. 데스크톱에서는 그렇게 반듯하고 예쁘던 디자인이 모바일에서는 글씨가 개미만 하게 축소되고, 이미지는 화면 밖으로 삐져나가 끝도 없이 가로 스크롤이 생겨버렸으니까요.

솔직히 말해서 그때는 화면 크기가 달라지면 웹사이트가 알아서 크기를 맞춰주는 줄 알았던 순진한 초보자였어요. 그제야 반응형 웹 디자인(Responsive Web Design)이라는 개념을 맞닥뜨리게 되었고, 요즘 시대에 반응형을 고려하지 않은 웹페이지는 사실상 반쪽짜리에 불과하다는 뼈아픈 현실을 깨달았죠.

그래서 기본기부터 다시 차근차근 다졌습니다. HTML 시맨틱 태그 구조화부터 CSS Flexbox와 Grid, 그리고 기기별 화면 크기에 맞춰 레이아웃을 유연하게 재배치하는 미디어 쿼리(Media Query)까지 직접 코드를 두드리며 체득했어요. 오늘은 코딩 초보자였던 제가 바닥부터 반응형 웹사이트를 완성하기까지 겪었던 수많은 시행착오와 꼭 알아두어야 할 실전 꿀팁들을 가감 없이 풀어보고자 해요. 저처럼 첫 웹사이트 제작을 준비 중인 분들께 든든한 길잡이가 되었으면 좋겠습니다!

 

반응형 웹의 든든한 주춧돌, 시맨틱 태그와 뷰포트 설정 🤔

반응형 웹을 시작할 때 많은 입문자분들이 화려한 CSS 애니메이션이나 미디어 쿼리 문법부터 파고드는 실수를 자주 범해요. 저 역시 처음에는 CSS만 화려하게 작성하면 모든 화면에서 완벽하게 보일 거라고 착각했거든요. 그런데 실제로 프로젝트를 진행해 보니 가장 중요한 것은 다름 아닌 탄탄하고 의미 있는 HTML 뼈대(시맨틱 태그)와 올바른 뷰포트(Viewport) 선언이었습니다.

무의미한 `<div>` 태그를 무한정 중첩해서 레이아웃을 짜다 보면, 화면 너비가 줄어들었을 때 어떤 블록이 어디로 줄바꿈되어야 하는지 CSS 선택자가 복잡하게 엉켜버리기 십상이에요. 반면 `<header>`, `<nav>`, `<main>`, `<section>`, `<article>`, `<footer>`처럼 각 영역의 고유한 역할을 명시하는 시맨틱 태그를 활용하면 코드 가독성이 획기적으로 올라갑니다. 화면이 작아질 때 특정 섹션의 순서를 바꾸거나 사이드바를 숨길 때도 구조가 명확해서 스타일 관리가 정말 수월해지더라고요.

💡 알아두세요!
모바일 반응형 웹 구현 시 HTML 파일의 `<head>` 안에 <meta name=”viewport” content=”width=device-width, initial-scale=1.0″> 태그가 반드시 들어가야 합니다. 이 설정이 누락되면 스마트폰 브라우저는 모바일 화면이 아닌 데스크톱 기준(보통 980px)으로 페이지를 강제 축소 렌더링하므로, 아무리 정교한 CSS를 짜도 모바일 화면이 엉망으로 보이게 됩니다.

 

반응형 레이아웃의 양대 산맥: Flexbox vs CSS Grid 📊

예전 웹 개발 튜토리얼을 보면 요소를 좌우로 배치하기 위해 `float` 속성을 걸고 매번 가상 요소로 `clear`를 처리하느라 머리를 쥐어짜는 경우가 많았어요. 하지만 현대 웹 표준에서는 Flexbox와 CSS Grid라는 두 가지 강력한 시스템 덕분에 복잡한 반응형 레이아웃도 아주 깔끔하게 구현할 수 있습니다.

제가 직접 부딪히며 터득한 가장 직관적인 구분 기준은 ‘1차원 배치인가, 2차원 배치인가’예요. 상단 네비게이션 메뉴나 버튼 정렬처럼 가로 혹은 세로 한 방향으로 요소를 나열하고 유연하게 여백을 배분할 때는 Flexbox가 압도적으로 편리했습니다. 반면, 포트폴리오 갤러리나 블로그 카드 리스트처럼 가로(행)와 세로(열)를 동시에 바둑판처럼 정교하게 통제해야 할 때는 CSS Grid가 진가를 발휘했죠.

레이아웃 방식별 핵심 특징 및 반응형 활용 비교

구분 차원 및 특성 추천 활용 사례 반응형 전환 팁
Flexbox 1차원 (선형 정렬, 행 또는 열) 네비게이션 바, 아이콘 목록, 입력폼 모바일에서 flex-direction: column 적용
CSS Grid 2차원 (행과 열 동시 제어) 이미지 갤러리, 카드 뷰, 전체 대시보드 repeat(auto-fit, minmax(…))로 자동 줄바꿈
과거 방식 (Float) 요소 띄우기 (문서 흐름 탈피) 글 중간에 삽입되는 인라인 이미지 배치 부모 높이 무너짐으로 반응형 구현에 비추천
복합 구성 Grid 안에 Flexbox 중첩 전자상거래 상품 리스트 및 상세 카드 그리드로 큰 틀 잡고 내부 디테일은 플렉스로 조정
⚠️ 주의하세요!
레이아웃 박스를 설계할 때 고정 픽셀인 `width: 1200px`를 직접 부여하는 것은 치명적인 실수입니다! 화면이 1200px보다 작은 기기에서는 화면 밖으로 내용이 튀어나와 버려요. 부모 컨테이너에는 반드시 `width: 100%`와 함께 `max-width: 1200px`를 선언하여, 넓은 화면에서는 중앙 정렬되고 좁은 모바일에서는 자동으로 폭이 줄어들도록 여지를 주어야 합니다.

 

화면 크기에 반응하는 마법, 미디어 쿼리와 rem 단위 🧮

반응형 웹의 꽃이자 핵심 엔진은 바로 CSS의 미디어 쿼리(@media)입니다. 기기의 뷰포트 너비가 특정 수치에 도달했을 때 스타일 규칙을 유연하게 교체해 주는 마법 같은 문법이죠. 저는 이번 포트폴리오를 제작하면서 데스크톱(1024px 이상), 태블릿(768px ~ 1023px), 모바일(767px 이하)의 3단계 중단점(Breakpoints)을 설정해 작업했어요.

여기서 초보자분들이 꼭 기억해야 할 팁은 폰트 크기나 마진, 패딩 값을 고정 단위인 `px` 대신 상대 단위인 `rem`으로 통일하는 습관입니다. rem은 최상위 `<html>` 태그의 기본 글꼴 크기(브라우저 기본값 16px)를 기준으로 상대 계산되기 때문에, 사용자의 기기 배율이나 접근성 환경에 맞춰 전체적인 시각적 비례가 매끄럽게 보존됩니다.

📝 반응형 픽셀(px) to rem 계산 공식

목표 rem 값 = 원하는 픽셀(px) 크기 ÷ 기준 루트 폰트 크기 (기본 16px)

실제 웹사이트에 적용했던 폰트 크기 변환 단계는 다음과 같아요:

1) 데스크톱 메인 제목(32px): 32 ÷ 16 = 2.0rem

2) 모바일 화면 축소 제목(24px): 24 ÷ 16 = 1.5rem

3) 본문 텍스트 기본 여백(20px): 20 ÷ 16 = 1.25rem

🔢 초간단 반응형 rem 변환 계산기

기준 루트 크기:

변환할 픽셀(px):

계산된 rem 값:

설명:

 

좌충우돌 실전 제작기: 모바일 가로 스크롤 버그 잡기 👩💼👨💻

이론상 모든 문법을 완벽히 마스터했다고 생각하고 첫 배포를 마쳤을 때, 스마트폰 화면에서 오른쪽으로 미세하게 화면이 덜컹거리며 가로 스크롤이 터지는 지옥의 버그를 겪었어요. 손가락으로 화면을 넘길 때마다 레이아웃이 삐걱거리니 완성도가 너무 떨어져 보였죠.

개발자 도구를 켜서 요소를 하나씩 뜯어보며 알아낸 첫 번째 원인은 기본 CSS 박스 모델의 원리 때문이었습니다. 기본적으로 `width: 100%`를 준 요소에 내부 패딩(`padding: 20px`)이나 보더를 주면, 브라우저는 콘텐츠 너비에 패딩을 덧붙여 실제 가로 크기를 `100% + 40px`로 계산합니다. 결국 부모 너비를 뚫고 나가 가로 스크롤이 발생했던 것이었죠.

두 번째 원인은 고정된 크기의 대용량 이미지(`<img>`)였습니다. 원본 이미지 너비가 1200px인데 모바일 화면은 375px이니 이미지가 화면 밖으로 삐져나오는 것은 당연한 결과였어요.

📌 알아두세요!
모든 CSS 코드 최상단 리셋(Reset) 규칙에 *, *::before, *::after { box-sizing: border-box; }를 선언하면 패딩과 테두리가 지정한 너비 안에 포함되어 너비 계산 오류를 한 방에 해결할 수 있습니다. 또한 이미지에는 img { max-width: 100%; height: auto; display: block; }를 기본으로 지정해야만 화면 크기에 맞춰 이미지가 비율을 유지한 채 축소됩니다!

 

실전 예시: 구체적인 포트폴리오 랜딩페이지 적용 사례 📚

실제로 제가 순수 HTML5와 CSS3만으로 구현했던 1페이지 포트폴리오 웹사이트의 전후 변화 과정을 구체적으로 정리해 보았습니다. 코딩 입문자분들이 프로젝트를 시작하실 때 훌륭한 벤치마킹 모델이 될 수 있을 거예요.

사례 제작자의 프로젝트 환경

  • 기획 목표: 모바일, 태블릿, 데스크톱에서 완벽하게 구동되는 자기소개 및 프로젝트 쇼케이스 웹사이트
  • 주요 구성: 헤더 네비게이션, 프로필 인트로, 프로젝트 카드 3열 그리드, 문의하기 폼
  • 사용 기술: 순수 시맨틱 HTML5, CSS3 Flexbox/Grid, 미디어 쿼리 (외부 라이브러리 미사용)

디바이스별 레이아웃 재배치 과정

1) 헤더 네비게이션: 데스크톱 가로 나열 메뉴(`display: flex`) → 768px 미만 모바일에서는 햄버거 토글 버튼 클릭 시 세로 드롭다운으로 전환

2) 소개 섹션: 좌측 프로필 사진 + 우측 자기소개 2단 가로 배치 → 모바일에서는 상하 수직 배치(`flex-direction: column`) 및 중앙 정렬

3) 프로젝트 카드: 데스크톱 3열 바둑판 배치(`grid-template-columns: repeat(3, 1fr)`) → 태블릿 2열 → 모바일 1열 100% 폭으로 순차적 자동 정렬

최종 결과 및 개선 성과

– 가로 스크롤 이슈: 전 기기에서 가로 오버플로우 0px 완전 달성

– 반응 속도 및 호환성: 외부 CSS 프레임워크를 걷어내어 페이지 로딩 속도 0.4초 단축 및 모바일 가독성 대폭 향상

이처럼 모바일 화면부터 기본 레이아웃을 다지고 화면이 넓어질수록 점진적으로 열을 늘려가는 ‘모바일 퍼스트’ 접근법을 취하니, 코드의 복잡도도 절반 이하로 줄어들고 유지보수 스트레스가 사라지는 놀라운 경험을 할 수 있었습니다.

 

마무리: 핵심 내용 요약 📝

화면에 글자를 띄우는 기초 문법부터 시작해 기기별 해상도에 유연하게 반응하는 웹사이트를 완성하기까지의 여정은 분명 쉽지 않은 도전이었어요. 수많은 레이아웃 깨짐과 가로 스크롤 에러를 겪으며 좌절하기도 했지만, 브라우저 창 크기를 줄였다 늘렸다 할 때마다 요소들이 찰떡같이 자리를 찾아가는 모습을 보았을 때의 그 짜릿함은 아직도 잊히지 않습니다.

처음부터 거대하고 무거운 자바스크립트 프레임워크나 템플릿에 의존하기보다, 순수 HTML5의 시맨틱한 뼈대와 CSS3의 레이아웃 원리를 바닥부터 경험해 본 것은 앞으로의 웹 개발 공부에 있어 흔들리지 않는 가장 소중한 밑거름이 될 것이라 확신합니다.

💡

반응형 웹 핵심 요약 카드

✨ 기초 뷰포트 설정: width=device-width 메타태그 필수 선언으로 모바일 화면 축소 방지!
📊 유연한 레이아웃: 1차원 배치는 Flexbox, 2차원 바둑판 정렬은 CSS Grid로 분담.
🧮 반응형 크기 계산:

rem 단위 = 원하는 px 크기 ÷ 16px (기준 루트 글꼴)

🛡️ 가로 스크롤 방지: box-sizing: border-box와 이미지 max-width: 100% 필수 적용.

모바일 퍼스트(Mobile-first) 방식으로 작은 화면부터 점진적으로 확장하세요!

자주 묻는 질문 ❓

Q: 비전공자도 부트스트랩이나 테일윈드 없이 순수 HTML/CSS만으로 반응형 웹을 완성할 수 있나요?
A: 네, 충분히 가능합니다! 시맨틱 태그 구조와 Flexbox, 미디어 쿼리 원리만 제대로 이해하면 외부 라이브러리 없이도 훨씬 가볍고 빠른 나만의 반응형 웹사이트를 제작할 수 있습니다. 오히려 기초를 먼저 체득해야 나중에 프레임워크를 다룰 때도 훨씬 깊이 있게 응용할 수 있어요.

Q: 반응형 중단점(Breakpoints)은 몇 픽셀로 잡는 것이 가장 표준적인가요?
A: 정답이 정해져 있지는 않지만, 실무에서는 일반적으로 모바일(768px 미만), 태블릿(768px ~ 1023px), 데스크톱(1024px 이상)의 3단계를 가장 보편적으로 사용합니다. 세부적인 디바이스 대응이 필요하다면 대화면 모니터용 1280px이나 소형 모바일용 480px을 추가로 분기하기도 합니다.

Q: px 단위 대신 rem을 써야 하는 결정적인 이유는 무엇인가요?
A: 고정 픽셀(px)은 사용자가 브라우저나 스마트폰 설정에서 글자 크기를 키워도 반응하지 않아 접근성이 떨어집니다. 반면 rem은 최상위 루트 폰트 크기(기본 16px)를 기준으로 비례 계산되므로, 기기 환경에 맞춰 페이지 전체 텍스트 비율이 자연스럽고 일관되게 확장·축소되기 때문입니다.

Q: 모바일 화면에서 원치 않는 가로 스크롤이 자꾸 생기는데 어떻게 찾나요?
A: 대부분 요소에 패딩이 추가되어 너비가 100%를 초과했거나 고정 width가 지정된 경우, 혹은 이미지가 부모 컨테이너보다 큰 경우입니다. CSS에 `* { box-sizing: border-box; }`와 `img { max-width: 100%; height: auto; }`를 우선 적용해 보시고, 그래도 남는다면 크롬 개발자 도구 요소 검사로 가로 폭을 넘치는 엘리먼트를 확인해 보세요.

Q: 제작한 반응형 웹을 스마트폰 실기기에서 손쉽게 테스트하는 방법이 있나요?
A: PC 크롬 브라우저의 ‘개발자 도구(F12)’에서 디바이스 툴바(Ctrl+Shift+M 또는 Cmd+Shift+M)를 켜면 아이폰, 갤럭시 등 다양한 화면 해상도로 즉시 시뮬레이션할 수 있습니다. 또한 VS Code의 ‘Live Server’ 확장을 이용해 같은 와이파이망에 연결된 스마트폰으로 로컬 IP 주소에 접속하면 실제 폰 화면에서도 실시간 테스트가 가능합니다.

코딩을 처음 접할 때는 모든 개념이 낯설고 외계어처럼 느껴지지만, 내 손으로 직접 짠 코드가 스마트폰과 PC에서 군더더기 없이 아름답게 변신하는 모습을 경험해 보면 코딩의 진짜 재미에 푹 빠지게 되실 거예요! 포기하지 마시고 오늘 당장 작은 카드 섹션 하나부터 반응형으로 직접 만들어 보세요. 여러분의 첫 코딩 여정을 진심으로 응원합니다. 혹시 코드를 작성하다가 막히는 부분이나 궁금한 점이 있다면 언제든 편하게 댓글로 물어봐주세요~ 😊

최신 글

  • API란 무엇일까요? 비전공자도 10분 만에 이해하는 완벽 개념 정리
  • 도커(Docker) 컨테이너 개념부터 필수 명령어까지 초보자 5분 완전 정복 가이드
  • 리눅스 필수 명령어 모음 & 8진수 파일 권한(chmod) 설정법 완벽 가이드
  • SQL 기초 문법 정리: 초보자도 10분 만에 끝내는 SELECT, WHERE, JOIN 마스터 가이드
  • 자바스크립트 DOM 조작과 이벤트 처리 기초 예제 완벽 정리

보관함

  • 2026년 10월

카테고리

  • 교육

소개 및 문의 · 개인정보처리방침 · 면책조항

©2026 배움의 길 | Design: Newspaperly WordPress Theme