LogoSEO Jing
  • All Posts
  • SEO Jing
  • okayJing
  • KD Team
  • CLAB Coreteam
  • Study

Contact Me

© 2026 SEOJing. All rights reserved.

프론트엔드 스터디 2주차: 사용자와 소통하는 폼 & CSS의 시작

2026년 6월 28일·18분 읽기
Subtitle fallback
Subtitle component omitted

<strong>학습 구간:</strong> [01:36:21 ~ 02:59:19] 사용자 입력(Form)부터 CSS

선택자 규칙까지

<strong>강의 바로가기:</strong>

Anchor fallback
Anchor component omitted
Paragraph fallback
Paragraph component omitted

---

Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Quiz1 / 10
Q.사용자의 입력 데이터를 서버로 전송하기 위해 입력 요소들을 감싸는 컨테이너 태그는 무엇일까요?

---

Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
html
<form action="/login" method="POST">
  <label for="user-email">이메일</label>
  <input id="user-email" name="email" type="email" />

  <label for="user-pw">비밀번호</label>
  <input id="user-pw" name="password" type="password" />

  <button type="submit">로그인</button>
</form>
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
html
<!-- 검색: GET이 적합 -->
<form action="/search" method="GET">
  <input name="q" type="text" placeholder="검색어 입력" />
  <button type="submit">검색</button>
</form>

<!-- 로그인: POST가 적합 -->
<form action="/login" method="POST">
  <input name="email" type="email" />
  <input name="password" type="password" />
  <button type="submit">로그인</button>
</form>
Paragraph fallback
Paragraph component omitted

<strong>URL 공유가 가능합니다.</strong> GET으로 검색하면 ?q=맛집처럼 검색

조건이 URL에 담기기 때문에, 그 URL을 친구에게 보내면 똑같은 검색 결과를 볼 수 있습니다. POST는 URL에 정보가 없어서 링크 공유가 불가능합니다.

<strong>브라우저 뒤로가기·새로고침이 자연스럽습니다.</strong> GET 요청은 뒤로

가기를 누르면 이전 결과가 바로 나타납니다. 반면 POST는 "양식을 다시 제출하시겠습니까?" 라는 확인 팝업이 뜹니다.

<strong>북마크(즐겨찾기)가 가능합니다.</strong> 검색 결과나 필터링 결과를

즐겨찾기에 저장해두고 나중에 다시 열 수 있습니다. POST로는 이것이 불가능합니다.

<strong>캐싱이 됩니다.</strong> 브라우저는 GET 요청의 결과를 캐시에

저장해두어, 같은 요청을 반복할 때 더 빠르게 응답할 수 있습니다.

Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
html
<form action="/register" method="POST">
  <fieldset>
    <legend>기본 정보</legend>
    <label for="reg-name">이름</label>
    <input id="reg-name" name="username" type="text" />

    <label for="reg-email">이메일</label>
    <input id="reg-email" name="email" type="email" />
  </fieldset>

  <fieldset>
    <legend>보안 설정</legend>
    <label for="reg-pw">비밀번호</label>
    <input id="reg-pw" name="password" type="password" />

    <label for="reg-pw-confirm">비밀번호 확인</label>
    <input id="reg-pw-confirm" name="password_confirm" type="password" />
  </fieldset>

  <button type="submit">가입하기</button>
</form>
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
html
<!-- 1. 인라인 스타일: 태그에 직접 작성 -->
<p style="color: red; font-size: 16px;">빨간 글씨</p>

<!-- 2. 내부 스타일 시트: <head> 안에 <style> 태그 사용 -->
<head>
  <style>
    p {
      color: blue;
    }
  </style>
</head>

<!-- 3. 외부 스타일 시트: 별도 .css 파일을 <link>로 연결 (가장 권장) -->
<head>
  <link rel="stylesheet" href="style.css" />
</head>
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
css
/* 1. 태그 선택자: 해당 태그 전부 */
p {
  color: gray;
}

/* 2. 클래스 선택자: 마침표(.)로 시작 */
.highlight {
  background-color: yellow;
}

/* 3. 아이디 선택자: 샵(#)으로 시작, 페이지당 하나만 */
#main-title {
  font-size: 32px;
}

/* 4. 자손 결합자: 공백으로 내부 요소 선택 */
nav a {
  text-decoration: none;
}

/* 5. 자식 결합자: >로 직계 자식만 선택 */
ul > li {
  list-style: square;
}

/* 6. 그룹 선택자: 쉼표로 여러 선택자에 같은 스타일 */
h1,
h2,
h3 {
  font-family: "Pretendard", sans-serif;
}
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
css
/* 과거에는 이렇게 브라우저별로 따로 작성해야 했습니다 */
.box {
  -webkit-transition: all 0.3s; /* Chrome, Safari */
  -moz-transition: all 0.3s; /* Firefox */
  -ms-transition: all 0.3s; /* IE, Edge */
  -o-transition: all 0.3s; /* Opera */
  transition: all 0.3s; /* 표준 */
}
Paragraph fallback
Paragraph component omitted

<strong>-webkit-</strong>: Chrome, Safari, Edge(Chromium 기반) 등

WebKit/Blink 엔진 브라우저

<strong>-moz-</strong>: Firefox (Gecko 엔진) <strong>-ms-</strong>: Internet Explorer, 구 Edge <strong>-o-</strong>: Opera (현재는 Chromium 기반이라 -webkit- 사용)

Paragraph fallback
Paragraph component omitted
css
/* 개발자가 작성하는 코드 */
.box {
  user-select: none;
}

/* Autoprefixer가 빌드 시 자동으로 변환 */
.box {
  -webkit-user-select: none; /* Safari */
  user-select: none;
}
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
css
/* :root에 변수 정의 (전역) */
:root {
  --color-primary: #3b82f6;
  --color-gray: #6b7280;
  --spacing-md: 16px;
  --radius-lg: 12px;
}

/* 변수 사용 */
.button {
  background-color: var(--color-primary);
  padding: var(--spacing-md);
  border-radius: var(--radius-lg);
  color: white;
}

.link {
  color: var(--color-primary); /* 같은 변수를 재사용 */
}
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
css
/* 라이트 모드 (기본) */
:root {
  --bg-color: #ffffff;
  --text-color: #1a1a1a;
}

/* 다크 모드 */
:root[data-theme="dark"] {
  --bg-color: #1a1a1a;
  --text-color: #f0f0f0;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
}
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
css
/* 마우스를 올렸을 때 */
.button:hover {
  background-color: #2563eb;
}

/* 클릭하는 순간 */
.button:active {
  transform: scale(0.98);
}

/* 키보드 포커스가 갔을 때 (Tab 키로 이동) */
.input:focus {
  outline: 2px solid #3b82f6;
  border-color: #3b82f6;
}

/* 첫 번째 자식 요소 */
li:first-child {
  font-weight: bold;
}

/* 마지막 자식 요소 */
li:last-child {
  border-bottom: none;
}

/* 짝수 번째 요소 (표 줄무늬 배경) */
tr:nth-child(even) {
  background-color: #f9fafb;
}
Paragraph fallback
Paragraph component omitted
의사 클래스용도예시
<strong>:hover</strong>마우스를 올렸을 때버튼 배경색 변경
<strong>:focus</strong>포커스가 갔을 때input 테두리 강조
<strong>:active</strong>클릭하는 순간버튼 눌림 효과
<strong>:first-child</strong>첫 번째 자식목록 첫 항목 스타일
<strong>:last-child</strong>마지막 자식목록 마지막 구분선 제거
<strong>:nth-child(n)</strong>n번째 자식표 줄무늬 배경
<strong>:disabled</strong>비활성화된 요소비활성 버튼 회색 처리
<strong>:not()</strong>특정 조건 제외.item:not(:last-child)
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
html
<form action="/register" method="POST">
  <!-- 필수 입력 -->
  <input name="username" type="text" required placeholder="이름 (필수)" />

  <!-- 이메일 형식 자동 검증 -->
  <input name="email" type="email" required placeholder="이메일" />

  <!-- 최소/최대 글자 수 제한 -->
  <input
    name="password"
    type="password"
    required
    minlength="8"
    maxlength="20"
    placeholder="비밀번호 (8~20자)"
  />

  <!-- 정규 표현식으로 형식 지정 -->
  <input
    name="phone"
    type="tel"
    pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}"
    placeholder="010-1234-5678"
    title="010-1234-5678 형식으로 입력하세요"
  />

  <!-- 숫자 범위 제한 -->
  <input name="age" type="number" min="1" max="150" placeholder="나이" />

  <button type="submit">가입하기</button>
</form>
Paragraph fallback
Paragraph component omitted
속성용도예시
<strong>required</strong>필수 입력빈칸이면 제출 불가
<strong>minlength / maxlength</strong>글자 수 제한비밀번호 최소 8자
<strong>min / max</strong>숫자/날짜 범위나이 1~150
<strong>pattern</strong>정규 표현식 매칭전화번호 형식
<strong>type</strong>입력 형식 자동 검증email, url, number
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
html
<label for="lang">사용 가능한 프로그래밍 언어</label>
<input
  list="languages"
  id="lang"
  name="language"
  placeholder="언어 선택 또는 입력"
/>

<datalist id="languages">
  <option value="JavaScript"></option>
  <option value="TypeScript"></option>
  <option value="Python"></option>
  <option value="Java"></option>
  <option value="C++"></option>
</datalist>
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
html
<!-- 구식: 폼 제출 → 페이지 전체 새로고침 -->
<form action="/login" method="POST">
  <input name="email" type="email" />
  <button type="submit">로그인</button>
</form>
js
// 요즘 방식: JS에서 직접 요청 → 화면은 그대로, 데이터만 교환
async function handleLogin(email, password) {
  const res = await fetch("/api/login", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ email, password }),
  });
  const data = await res.json();
  // 로그인 성공 시 화면 업데이트
}
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
js
// fetch: 내장 API, 에러 처리를 직접 해야 함
const res = await fetch("/api/users");
if (!res.ok) throw new Error("요청 실패"); // 이걸 안 하면 400/500도 그냥 통과
const data = await res.json();

// axios: 설치 필요, 에러는 자동 throw, JSON 변환도 자동
const { data } = await axios.get("/api/users");
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
js
// ky: fetch 인터페이스 그대로, 편의 기능 추가 (프론트/Edge)
import ky from "ky";
const data = await ky.get("/api/users").json(); // 에러 자동 throw, JSON 자동 파싱

// got: Node.js 서버 환경에 최적화
import got from "got";
const data = await got("/api/users").json();
Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted
Paragraph fallback
Paragraph component omitted

---

Subtitle fallback
Subtitle component omitted
Paragraph fallback
Paragraph component omitted
Q1. 네이버나 구글에서 검색을 해보고, 주소창 URL을 확인해보세요. 어떤 방식(GET/POST)을 사용하고 있나요? 그리고 왜 로그인 폼은 같은 방식을 쓰지 않는다고 생각하나요?
Q2. 아래 CSS 코드에서 `.btn` 텍스트는 최종적으로 무슨 색이 될까요? 그리고 왜 그 색이 적용되는지, 어떤 규칙 때문인지 설명해보세요.

>

```css
p {
color: green;
}
.btn {
color: red;
}
#submit {
color: blue;
}
```

>

```html
<p class="btn" id="submit">제출</p>
```

Post Q&A

오케이징에게 물어보기

프론트엔드 스터디 2주차: 사용자와 소통하는 폼 & CSS의 시작 전체를 기준으로 질문과 피드백을 받아요.답을 본 뒤에는 이 내용을 댓글로 달아서 서징에게도 물어볼 수 있어요. 작성자가 직접 볼 수 있어요!

0/500

포스트 목록

/study/clab-26-1
파일 13개, 폴더 2개
프론트엔드 스터디 1주차: 마크업 그 이상, 실무를 위한 중급 HTML 가이드프론트엔드 스터디 2주차: 사용자와 소통하는 폼 & CSS의 시작프론트엔드 스터디 3주차: 프론트엔드의 첫 번째 벽, 박스 모델과 스타일링프론트엔드 스터디 4주차: 자유자재 레이아웃 (포지션과 플렉스박스)프론트엔드 스터디 5주차: JavaScript 시작 — 타입, 변수, 그리고 JS가 이상한 이유프론트엔드 스터디 6주차: 객체, 함수, 그리고 스코프프론트엔드 스터디 7주차: 불변성, 프로토타입, 타입 체크프론트엔드 스터디 8주차: 클로저, Promise, async/await프론트엔드 스터디 9주차: React 입문 전 필수 JS 문법 — map, 구조 분해, 스프레드프론트엔드 스터디 10주차: React 기초 1 — 컴포넌트, JSX, props, useState프론트엔드 스터디 11주차: React 기초 2 — useEffect, 이벤트 처리, 폼프론트엔드 스터디 심화: this, 실행 컨텍스트, 이터러블프론트엔드 스터디 심화: 에러 처리와 정규 표현식

같은 섹션의 대표 이미지

27 posts · latest first
Study26. 06. 08.

프론트엔드 스터디 11주차: React 기초 2 —.

useEffect로 사이드 이펙트를 다루고, 이벤트 처리와 폼 상태 관리까지 — React로 실제 동작하는 앱을 만들기 위한 핵심 기술을 배웁니다.

26. 06. 08.SEOJing
Study26. 06. 08.

프론트엔드 스터디 심화: 에러 처리와 정규 표현식.

지금 당장 읽지 않아도 됩니다. React를 배우면서 에러 처리가 필요해지거나 면접 대비가 필요할 때 참고하세요.

26. 06. 08.SEOJing
Study26. 06. 01.

프론트엔드 스터디 10주차: React 기초 1 — 컴포넌트,.

React를 처음 시작합니다. 컴포넌트, JSX, props, useState까지 — React 앱을 만들기 위한 핵심 네 가지를 한 번에 배웁니다.

26. 06. 01.SEOJing
Study26. 06. 01.

프론트엔드 스터디 심화: this, 실행 컨텍스트, 이터러블.

React를 배우면서 this가 헷갈리거나, 면접 대비가 필요할 때 참고하는 JS 심화 자료입니다. 이 내용을 지금 당장 완벽히 이해하지 않아도 React를 배우는 데 지장이 없습니다.

26. 06. 01.SEOJing
Study26. 05. 25.

프론트엔드 스터디 대면 9주차: Next.js 렌더링 진화와 웹.

Next.js가 무엇이고 왜 필요한지 React와 비교해 이해한 뒤, CSR부터 SSR, SSG, ISR, PPR까지 렌더링 전략과 Web Vitals를 정리하며 스터디를 마무리합니다.

26. 05. 25.SEOJing
Study26. 05. 25.

프론트엔드 스터디 9주차: React 입문 전 필수 JS.

다음 주부터 React를 시작합니다. React 코드에서 매 줄 등장하는 map/filter, 구조 분해, 스프레드, 옵셔널 체이닝, 모듈까지 — React 코드를 막힘없이 읽기 위한 JS 문법을 한 번에 정리합니다.

26. 05. 25.SEOJing
Study26. 05. 18.

프론트엔드 스터디 대면 8주차: API와 통신 — 프론트엔드와.

비동기와 async/await를 배운 뒤, 대면에서는 API를 단순 호출 방법이 아니라 프론트엔드와 백엔드 사이의 계약으로 바라봅니다. HTTP, REST, CORS, 프록시, API 클라이언트 구조, TanStack Query와 파일 배치까지 연결합니다.

26. 05. 18.SEOJing
Study26. 05. 18.

프론트엔드 스터디 8주차: 클로저, Promise,.

JS 비동기 처리의 흐름을 배웁니다. 클로저가 왜 중요한지, 콜백 지옥을 해결한 Promise, 그리고 현대 JS의 표준인 async/await까지 이어지는 흐름을 이해합니다.

26. 05. 18.SEOJing
Study26. 05. 11.

프론트엔드 스터디 대면 7주차: React 입문과 프로젝트 구조.

바닐라 JS의 한계에서 React가 등장한 이유까지, 컴포넌트와 렌더링 방식을 이해하고 프로젝트 구조 감각을 만들어가는 대면입니다.

26. 05. 11.SEOJing
Study26. 05. 11.

프론트엔드 스터디 7주차: 불변성, 프로토타입, 타입 체크.

JS에서 가장 낯선 개념 중 하나인 프로토타입 기반 상속을 다룹니다. const가 왜 불변을 보장하지 않는지, 타입을 런타임에 정확히 확인하는 방법까지 함께 배웁니다.

26. 05. 11.SEOJing
Study26. 05. 05.

프론트엔드 스터디 6주차: 객체, 함수, 그리고 스코프.

JavaScript에서 거의 모든 것은 객체입니다. 함수가 일급 객체라는 의미, var와 let의 스코프 차이, 그리고 렉시컬 스코프까지 다룹니다.

26. 05. 05.SEOJing
Study26. 05. 04.

프론트엔드 스터디 대면 6주차(1): HTML/CSS/JS.

4~6주차 공백 이후 진행하는 첫 번째 대면입니다. HTML/CSS/JS 핵심을 가볍게 다시 연결하고, 브라우저가 코드를 실제 화면으로 바꾸는 과정을 통해 렌더링 파이프라인과 성능 감각을 잡습니다.

26. 05. 04.SEOJing
Study26. 05. 04.

프론트엔드 스터디 대면 6주차(2): AI 시대의 개발 방식과.

길어진 6주차 대면의 두 번째 차시입니다. AI 시대에 개발자가 실제로 어떻게 일하는지, 그리고 프론트엔드 개발자가 디자이너·백엔드·PM 사이에서 어떤 연결과 리딩 역할을 하는지 다룹니다.

26. 05. 04.SEOJing
Study26. 04. 28.

프론트엔드 스터디 5주차: JavaScript.

JavaScript를 처음 제대로 배우는 주차입니다. var/let/const의 차이, JS만의 독특한 타입 시스템, 그리고 호이스팅·TDZ까지 다룹니다.

26. 04. 28.SEOJing
Study26. 04. 13.

프론트엔드 스터디 4주차: 자유자재 레이아웃 (포지션과.

배경 이미지를 제어하고, Position으로 요소를 원하는 위치에 배치하며, Flexbox로 유연한 가로·세로 레이아웃을 구성합니다. 요소를 화면 정중앙에 띄우거나, 내비게이션 바처럼 가로로 예쁘게 정렬하는 것이 이번 주 목표입니다.

26. 04. 13.SEOJing
Study26. 04. 10.

프론트엔드 스터디 대면 3주차: 박스 모델 실전,.

3주차 박스 모델과 스타일링 복습, 과제 풀이, 4주차 Position과 Flexbox 레이아웃까지 다룬 대면 스터디 정리입니다. 면접에서 자주 나오는 마진 겹침, box-sizing, Flexbox 관련 질문도 함께 준비합니다.

26. 04. 10.SEOJing
Study26. 04. 06.

프론트엔드 스터디 3주차: 프론트엔드의 첫 번째 벽, 박스.

폰트와 색상을 다루고, 인라인과 블록 요소의 차이를 이해하며, 마진·패딩으로 구성되는 박스 모델을 완벽하게 익힙니다. 요소들 사이의 여백을 자유자재로 제어하고 화면이 찌그러지지 않게 박스 크기를 다루는 것이 이번 주 목표입니다.

26. 04. 06.SEOJing
Study26. 04. 03.

프론트엔드 스터디 대면 2주차: 폼(Form), CSS.

2주차 폼과 CSS 선택자 복습, 과제 풀이, 3주차 박스 모델과 스타일링까지 다룬 대면 스터디 정리입니다. 면접에서 자주 나오는 GET vs POST, CSS 우선순위, 박스 모델 관련 질문도 함께 준비합니다.

26. 04. 03.SEOJing
Study26. 03. 30.

프론트엔드 스터디 2주차: 사용자와 소통하는 폼 &.

사용자 입력을 받는 폼(Form)을 만들고, CSS를 HTML에 연결하는 방법과 원하는 요소를 정확히 선택하는 CSS 선택자 규칙을 배웁니다. 로그인·회원가입 폼을 직접 만들고, CSS로 원하는 요소를 콕 집어내는 것이 이번 주 목표입니다.

26. 03. 30.SEOJing
Study26. 03. 27.

프론트엔드 스터디 대면 1주차: HTML 마크업과 폼, 그리고.

1주차 HTML 핵심 복습과 과제 풀이, 2주차 폼(Form)과 CSS 선택자까지 다룬 대면 스터디 정리입니다. 면접에서 자주 나오는 시맨틱 HTML, img alt 속성 관련 질문도 함께 준비합니다.

26. 03. 27.SEOJing
Study26. 03. 23.

프론트엔드 스터디 1주차: 마크업 그 이상, 실무를 위한.

기초 태그 강의에서 한 걸음 더 나아갑니다. 카카오톡 공유 썸네일, 모바일 데이터 절약, 스크린 리더기를 위한 숨은 정보 등 실무에서 마주하게 될 중급 HTML 개념들을 가볍게 훑어봅니다.

26. 03. 23.SEOJing
Study26. 03. 20.

프론트엔드 스터디 대면 0주차: 프론트엔드 개발자란? 그리고.

프론트엔드 개발자가 실무에서 하는 일, 2025-2026 기술 스택, 현실적인 연봉과 채용 트렌드를 정리했습니다. 스터디 자료 구조와 앞으로의 방향도 함께 안내합니다.

26. 03. 20.SEOJing
Study26. 03. 19.

사전 진단 퀴즈 3단계 (변수와 DOM).

스터디 커리큘럼 방향을 정하기 위한 세 번째 사전 진단 퀴즈입니다. 자바스크립트의 스코프, 참조 타입의 메모리 할당, DOM 제어와 이벤트 흐름 등 React 실무의 근간이 되는 CS 지식을 점검합니다.

26. 03. 19.SEOJing
Study26. 03. 19.

사전 진단 퀴즈 4단계 (배열, 함수, 비동기).

스터디 커리큘럼 방향을 정하기 위한 마지막 사전 진단 퀴즈입니다. React 컴포넌트를 다루기 위해 필수적인 배열 고차 함수(map, filter)와 비동기 통신(async/await) 능력을 점검합니다.

26. 03. 19.SEOJing
Study26. 03. 19.

사전 진단 퀴즈 5단계 (선언적 UI와 상태).

스터디 커리큘럼 방향을 정하기 위한 마지막 사전 진단 퀴즈입니다. 선언적 UI, 상태(State), 단방향 데이터 흐름, 부수 효과(Side Effect) 등 React 생태계 진입을 위한 필수 개념을 점검합니다.

26. 03. 19.SEOJing
Study26. 03. 18.

사전 진단 퀴즈 1단계 (HTML/CSS).

스터디 커리큘럼 방향을 정하기 위한 첫 번째 사전 진단 퀴즈입니다. HTML 태그 구조부터 CSS 박스 모델까지, 실무와 React 환경에서 이 기초들이 왜 중요한지 점검합니다.

26. 03. 18.SEOJing
Study26. 03. 18.

사전 진단 퀴즈 2단계 (HTML/CSS 활용).

스터디 커리큘럼 방향을 정하기 위한 두 번째 사전 진단 퀴즈입니다. 시맨틱 마크업, 폼 이벤트 제어, CSS 우선순위, Flexbox 레이아웃 등 실전 활용 능력을 점검합니다.

26. 03. 18.SEOJing