[HTML] 12. HTML 한 페이지 완성 (종합 예제 )

  •  

[HTML] 12. HTML 한 페이지 완성 (종합 예제 )

이번 글에서는 지금까지 배운 내용을 합쳐서
HTML 한 페이지를 통째로 완성해봅니다.

포인트는 “예쁘게 꾸미기”가 아니라
구조가 명확한 문서를 만드는 것입니다.


1. 종합 예제 목표

  • 시맨틱 구조(header/nav/main/section/article/aside/footer)
  • 목록(ul/li)로 메뉴 만들기
  • 링크(a), 이미지(img) 넣기
  • 표(table)로 데이터 표현
  • 폼(form)으로 입력 받기

2. 전체 코드 (복붙 실행용)

아래 코드를 그대로 새 파일로 저장해서 실행해보세요.
예: index.html로 저장 → 더블클릭하면 브라우저에서 열립니다.


<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>HTML 종합 예제</title>
</head>

<body style="margin:0; font-family: Arial, sans-serif;">

  <!-- 1) header -->
  <header style="border-bottom:1px solid #ddd; padding:16px;">
    <h1 style="margin:0;">My Study Page</h1>
    <p style="margin:8px 0 0;">HTML 구조를 연습하는 종합 예제 페이지</p>
  </header>

  <!-- 2) nav (메뉴) -->
  <nav style="border-bottom:1px solid #ddd; padding:12px 16px;">
    <ul style="margin:0; padding:0; list-style:none; display:flex; gap:12px;">
      <li><a href="#notice">공지</a></li>
      <li><a href="#posts">게시글</a></li>
      <li><a href="#stats">통계</a></li>
      <li><a href="#contact">문의</a></li>
    </ul>
  </nav>

  <!-- 3) main -->
  <main style="display:flex; gap:16px; padding:16px;">

    <!-- 본문 영역 -->
    <div style="flex:3;">

      <!-- section: 공지 -->
      <section id="notice" style="border:1px solid #eee; padding:16px; margin-bottom:16px;">
        <h2 style="margin-top:0;">공지사항</h2>

        <article style="border:1px solid #ddd; padding:12px; margin-bottom:10px;">
          <h3 style="margin:0 0 8px;">학습 안내</h3>
          <p style="margin:0;">
            이 페이지는 <strong>HTML 구조</strong>를 연습하기 위한 예제입니다.<br>
            디자인은 나중에 CSS에서 예쁘게 만들 수 있습니다.
          </p>
        </article>

        <article style="border:1px solid #ddd; padding:12px;">
          <h3 style="margin:0 0 8px;">참고 링크</h3>
          <p style="margin:0;">
            <a href="https://developer.mozilla.org/ko/" target="_blank" rel="noopener noreferrer">MDN Web Docs</a>
            를 참고하면 HTML 표준을 확인할 수 있습니다.
          </p>
        </article>
      </section>

      <!-- section: 게시글 목록 -->
      <section id="posts" style="border:1px solid #eee; padding:16px; margin-bottom:16px;">
        <h2 style="margin-top:0;">최근 게시글</h2>

        <ul>
          <li>[HTML] 태그 구조 이해</li>
          <li>[HTML] 블록/인라인 차이</li>
          <li>[HTML] 폼(form) 기본</li>
        </ul>

        <p>
          <span style="background:yellow;">팁</span>
          목록은 메뉴/게시판 등 실무에서 정말 많이 씁니다.
        </p>
      </section>

      <!-- section: 표(table) -->
      <section id="stats" style="border:1px solid #eee; padding:16px; margin-bottom:16px;">
        <h2 style="margin-top:0;">학습 통계(표 예시)</h2>

        <table border="1" cellspacing="0" cellpadding="8" style="border-collapse:collapse; width:100%;">
          <thead>
            <tr>
              <th>항목</th>
              <th>진행률</th>
              <th>메모</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>HTML</td>
              <td>60%</td>
              <td>기본 구조/태그 문법 완료</td>
            </tr>
            <tr>
              <td>CSS</td>
              <td>0%</td>
              <td>다음 시리즈에서 시작</td>
            </tr>
            <tr>
              <td>JavaScript</td>
              <td>0%</td>
              <td>HTML/CSS 후 진행</td>
            </tr>
          </tbody>
        </table>

        <p style="margin-bottom:0;">
          표는 데이터가 “행/열” 구조일 때만 사용합니다. 레이아웃 용도로 쓰면 나중에 고치기 힘듭니다.
        </p>
      </section>

      <!-- section: 폼(form) -->
      <section id="contact" style="border:1px solid #eee; padding:16px;">
        <h2 style="margin-top:0;">문의하기(Form 예시)</h2>

        <form action="#" method="post">
          <p>
            <label for="name">이름</label><br>
            <input id="name" type="text" name="name" placeholder="이름 입력" required>
          </p>

          <p>
            <label for="email">이메일</label><br>
            <input id="email" type="email" name="email" placeholder="example@email.com" required>
          </p>

          <p>
            <label for="msg">메시지</label><br>
            <textarea id="msg" name="message" rows="4" placeholder="내용을 입력하세요"></textarea>
          </p>

          <p style="margin:0;">
            <input type="submit" value="보내기">
            <input type="reset" value="초기화">
          </p>
        </form>
      </section>

    </div>

    <!-- aside (사이드 정보) -->
    <aside style="flex:1; border:1px solid #eee; padding:16px; height:fit-content;">
      <h2 style="margin-top:0;">프로필</h2>

      <!-- 실제 이미지 파일이 없으면 깨지므로 예시로 alt를 강조 -->
      <img src="profile.png" alt="프로필 이미지(예시)" style="max-width:100%; border:1px solid #ddd;">

      <p>
        <strong>설명</strong><br>
        이 영역은 aside로, 본문과 직접 관계가 없는 부가 정보를 담습니다.
      </p>

      <ul>
        <li>오늘 할 일: HTML 복습</li>
        <li>다음: CSS 시작</li>
      </ul>
    </aside>

  </main>

  <!-- 4) footer -->
  <footer style="border-top:1px solid #ddd; padding:16px; text-align:center;">
    © 2026 My Study Page
  </footer>

</body>
</html>

3. Output (실행하면 이렇게 보입니다)

브라우저에서 실행하면 대략 이런 구성으로 보입니다. (디자인은 최소한으로만 들어가 있고, 구조를 확인하는 목적입니다.)

  • 상단: My Study Page 제목 + 설명
  • 메뉴: 공지 / 게시글 / 통계 / 문의
  • 본문: 공지(카드 형태) + 게시글 목록 + 표 + 문의 폼
  • 오른쪽: 프로필(이미지/설명/할 일)
  • 하단: footer

메뉴를 누르면 해당 섹션(#notice, #posts, #stats, #contact)으로 이동하는 것도 확인할 수 있습니다.


4. 이 예제가 중요한 이유

  • 시맨틱 구조로 “문서 역할”이 명확하다
  • ul/li로 메뉴와 리스트를 구성할 수 있다
  • table은 데이터 표현에만 사용했다
  • form은 입력 요소와 label을 연결했다

이제 HTML은 “태그 암기” 단계가 아니라
페이지 구조를 설계할 수 있는 단계에 도달한 것입니다.