⚛️ 1. React(리액트)란 무엇일까요?
리액트를 한마디로 정의하면 "웹사이트를 레고 블록 조립하듯 뚝딱뚝딱 만드는 도구"입니다.
예전에는 웹사이트(집)를 만들 때 벽돌을 처음부터 끝까지 하나하나 쌓아 올렸다면, 리액트는 미리 만들어둔 '블록(컴포넌트)'들을 가져다 끼우기만 하면 됩니다.
게다가 블록 안의 글자(데이터)만 쓱 바꾸면, 리액트가 알아서 화면을 고쳐줍니다.
[개별 레고 블록들] [완성된 웹사이트 화면]
┌───────────┐ ┌────────────────────┐
│ 🔍 검색창 │ │ 🔍 검색창 │
└───────────┘ ├─────────┬──────────┤
┌───────────┐ 조립(React) │ │ │
│ 👤 프로필 │ ────────────▶ │ 👤프로필│ 🖼️사진 1 │
└───────────┘ │ │ │
┌───────────┐ ├─────────┼──────────┤
│ 🖼️ 사진 1 │ │ ⚙️ 설정 │ 🖼️사진 2 │
└───────────┘ └─────────┴──────────┘
📝 2. JSX : 자바스크립트 안에 HTML 쓰기
리액트에서는 JSX라는 아주 특별한 문법을 씁니다.
쉽게 말해 "자바스크립트(JS) 파일 안에서 HTML 뼈대를 마음껏 쓸 수 있게 해주는 규칙"입니다.
HTML과 거의 똑같이 생겼지만, 딱 3가지 작은 규칙만 주의하시면 됩니다.
🚨 HTML과 JSX의 결정적 차이점 3가지
| 구분 | 기존 HTML 방식 | 리액트 JSX 방식 (✨) | 왜 다를까요? |
| ① 이름표 (클래스) |
<div class="box"> | <div className="box"> | 자바스크립트에 이미 class라는 단어가 있어서 겹치지 않게 피한 거예요! |
| ② 데이터 넣기 | <p>수강생님 환영합니다</p> | <p>{name}님 환영합니다</p> | { } 중괄호를 열면 그 안에 'JS 값이나 계산식'을 넣을 수 있어요. |
| ③ 태그 닫기 | <img src="a.png"> | <img src="a.png" /> | 리액트는 아주 엄격해서 짝이 없는 빈 태그는 끝에 꼭 /로 닫아줘야 해요. |
{ } 중괄호는 "자, 지금부터 자바스크립트 값이 들어간다!" 라고 알려주는 마법의 주머니라고 생각하시면 됩니다.
변수, 숫자 계산, 함수 등 뭐든 들어갈 수 있어요.
💻 3. 실전 예제와 예상 화면
리액트(JSX) 코드
const App = () => {
const name = "수강생"
const age = 20
return (
<div className="box">
<h1>안녕, {name}!</h1>
<p>{1 + 1}</p>
<img src="a.png" alt="이미지" />
<p>{name}님은 {age}살, 내년엔 {age + 1}살</p>
</div>
)
}
[예상 그림] 실제 인터넷 창에 뜨는 결과
┌──────────────────────────────────────────────────┐
│ 🌐 내 첫 리액트 웹사이트 │
├──────────────────────────────────────────────────┤
│ │
│ 안녕, 수강생! │
│ │
│ 2 │
│ │
│ [ 🖼️ a.png 이미지 사진이 뜨는 자리 ] │
│ │
│ 수강생님은 20살, 내년엔 21살 │
│ │
└──────────────────────────────────────────────────┘
구간별 이해하기
🥦 [1. ] 변수 선언 구역 (재료 준비)
const App = () => { // 1. App이라는 요리사(컴포넌트)를 만들게요!
const name = "수강생" // 2. 'name'이라는 상자에 "수강생" 글자를 담아둡니다 (재료 1)
const age = 20 // 3. 'age'이라는 상자에 20이라는 숫자를 담아둡니다 (재료 2)
🍽️ [2. ] return ( ) 구역 (실제 화면에 보여지는 접시)
return (
<div className="box">
<h1>안녕, {name}!</h1>
<p>{1 + 1}</p>
<img src="a.png" alt="이미지" />
<p>{name}님은 {age}살, 내년엔 {age + 1}살</p>
</div>
)
}
- 역할: 여기서부터가 진짜 인터넷 화면에 그려지는 코드입니다! * 요리사가 준비한 재료들을 예쁜 그릇(<div>, <h1>, <p>)에 담아서 손님(사용자)에게 내놓는(return) 과정입니다.
- 컴퓨터는 이 return ( ) 안에 적힌 코드를 읽어서 우리 눈에 보이는 웹사이트 화면을 만들어 줍니다.
CSS 적용할 때 <div>를 쓴다.
HTML이나 리액트에서 <div>는 아무 기능이 없는 '투명한 빈 상자(Box)'입니다.
글자나 이미지를 이 상자 안에 예쁘게 묶어두고, 상자에 이름표(className)를 붙여서 CSS로 스타일을 꾸밉니다.
- 코드 분석: <div className="box">
- 의미: "지금부터 이 상자 안에 들어가는 모든 요소들을 'box'라는 이름의 구역으로 묶을게! 그리고 CSS 파일에 가서 .box한테 예쁜 배경색이랑 테두리를 달아줘!"라고 명령하는 것입니다. 구역을 나누고 디자인을 입힐 때 <div>는 가장 많이 쓰이는 필수 태그입니다.
<></> (프래그먼트) 배우기
🚨 리액트의 대원칙: return ( ) 안의 모든 코드들은 반드시 커다란 하나의 상자(태그) 안에 다 감싸져 있어야 한다!
만약 아래처럼 대장 상자(<div>) 없이 알맹이들만 덜렁 내놓으면 리액트는 "누가 대장 상자야?!" 하면서 에러를 냅니다.
// ❌ 에러 발생! 감싸주는 대장 상자가 없어요.
return (
<h1>안녕!</h1>
<p>반가워</p>
)
이때 굳이 CSS 디자인을 줄 것도 아니고,
화면 구조상 무의미한 <div> 상자를 또 만들고 싶지 않을 때 쓰는 마법의 투명 상자가 바로 <> </> (React Fragment) 입니다.
🛠️ <></>를 사용한 코드 예시
const App = () => {
return (
<> {/* 무의미한 div 대신 투명 상자로 시작! */}
<h1>안녕!</h1>
<p>반가워</p>
</> {/* 투명 상자 끝! */}
)
}
📊 [도표] <div> vs <></> 차이점 정리
| 방식 | 코드 모양 | 실제 브라우저(HTML) 결과 | 언제 쓰나요? |
| ① <div> 상자 | <div> ... </div> | <div> 상자가 화면 구조에 실제로 남음 | 테두리, 배경색 등 CSS 디자인을 직접 입혀야 할 때 |
| ② <></> 투명 상자 | <> ... </> | 감싸는 태그 없이 알맹이만 깔끔하게 남음 | 디자인은 필요 없고, 리액트의 "하나로 감싸라"는 규칙만 통과하고 싶을 때 |
'성남 프론트엔드' 카테고리의 다른 글
| 12일차_Node·Express /POST 보내기/ (0) | 2026.07.14 |
|---|---|
| 10일차_React (components) (0) | 2026.07.10 |
| 7일차_ _JavaScript 문법 / 7가지 데이터 타입 (0) | 2026.07.09 |
| 6일차 _JavaScript 기초 (0) | 2026.07.06 |
| 5일차 _CSS : Position, 가상요소, CSS 리셋 (0) | 2026.07.05 |