티스토리 뷰
React를 공부하기 시작하면 가장 먼저 부딪히는 문법이 바로 JSX입니다.
처음 보면 HTML처럼 보이는데 JavaScript 안에 들어가 있고, 중괄호로 값을 넣기도 하고, if문은 그대로 안 들어가고, 배열을 map()으로 돌려 화면에 뿌리는 방식도 낯설게 느껴집니다.
특히 입문 단계에서는 아래 포인트에서 많이 막힙니다.
- JSX는 정확히 무엇인가?
- HTML과 뭐가 다르고 왜 중괄호를 쓰는가?
- 조건부 렌더링은 어떻게 해야 하는가?
- 리스트 출력할 때 왜
map()과key가 필요한가?
이번 글에서는 React 입문자가 꼭 알아야 하는 JSX 기본 문법, 조건부 렌더링, 리스트 출력을 한 번에 정리하겠습니다. 단순 문법만 나열하지 않고, 왜 그렇게 쓰는지, 어디서 자주 헷갈리는지까지 같이 보겠습니다.
map()으로 반복 출력하는 패턴입니다.JSX는 JavaScript XML의 약자입니다. 쉽게 말하면 React에서 화면 구조를 더 직관적으로 작성할 수 있게 해주는 문법이라고 보면 됩니다.
예를 들어 아래 코드를 보겠습니다.
function App() {
return <h1>안녕하세요, React</h1>;
}
이 코드는 HTML처럼 보이지만, 브라우저가 그대로 이해하는 HTML은 아닙니다. 내부적으로는 JavaScript로 변환되어 동작합니다.
즉, JSX는 단순 장식 문법이 아니라 React 컴포넌트에서 화면을 선언적으로 작성하기 위한 표현 방식입니다.
JSX는 “DOM을 어떻게 직접 조작할지”를 쓰는 문법이 아니라, 지금 어떤 UI가 보여야 하는지를 표현하는 문법에 가깝습니다.
가장 기본적인 예제는 아래처럼 볼 수 있습니다.
function Profile() {
const name = 'Ace';
const age = 28;
return (
<div>
<h2>{name}</h2>
<p>나이: {age}</p>
</div>
);
}
여기서 중요한 포인트는 다음과 같습니다.
{name}처럼 JavaScript 값을 JSX 안에 넣을 수 있고- 태그 구조는 HTML처럼 읽히지만
- 실제로는 컴포넌트가 반환하는 UI 구조라는 점입니다.
if문 자체를 JSX 중간에 바로 넣기보다, 삼항 연산자나 논리 연산자를 더 자주 씁니다.function Message() {
const user = 'React 입문자';
return <h3>{user}님 반갑습니다.</h3>;
}
function Avatar() {
const imageUrl = 'https://example.com/avatar.png';
return <img src={imageUrl} alt="프로필 이미지" className="avatar" />;
}
function Intro() {
return (
<>
<h2>React JSX</h2>
<p>HTML처럼 보이는 UI 문법입니다.</p>
</>
);
}
function Button() {
const handleClick = () => {
console.log('클릭됨');
};
return <button onClick={handleClick}>클릭</button>;
}
조건부 렌더링은 말 그대로 조건에 따라 화면에 보이는 내용을 다르게 처리하는 방식입니다.
예를 들어 로그인 여부에 따라 메시지를 다르게 보여줄 수 있습니다.
function Greeting({ isLogin }) {
return <h2>{isLogin ? '환영합니다' : '로그인이 필요합니다'}</h2>;
}
이 코드는 isLogin 값이 true면 환영 메시지를, false면 로그인 안내를 보여줍니다.
React에서 조건부 렌더링은 보통 아래 3가지 방식이 많이 쓰입니다.
function LoginStatus({ isLogin }) {
return (
<div>
{isLogin ? <button>로그아웃</button> : <button>로그인</button>}
</div>
);
}
function Notice({ isAdmin }) {
return <div>{isAdmin && <p>관리자 전용 메뉴입니다.</p>}</div>;
}
function UserMessage({ isLoading }) {
if (isLoading) {
return <p>로딩 중입니다...</p>;
}
return <p>데이터를 불러왔습니다.</p>;
}
&&가 편하지만, 조건이 여러 개로 늘어나면 JSX를 억지로 짧게 만들기보다 바깥으로 빼서 읽기 쉽게 정리하는 편이 더 좋습니다.리스트 렌더링은 게시글 목록, 댓글 목록, 메뉴 목록처럼 배열 데이터를 반복해서 화면에 출력하는 방식입니다.
가장 많이 쓰는 패턴은 map()입니다.
function MenuList() {
const menus = ['홈', '소개', '문의하기'];
return (
<ul>
{menus.map((menu) => (
<li key={menu}>{menu}</li>
))}
</ul>
);
}
이 코드는 배열의 각 값을 하나씩 꺼내 <li> 요소로 바꿔 출력합니다.
즉, React에서는 배열을 그대로 보여주는 것이 아니라 배열 데이터를 JSX 요소로 변환해서 렌더링한다고 이해하면 됩니다.
React는 리스트가 변경될 때 어떤 항목이 추가·삭제·변경되었는지 더 잘 파악하기 위해 key를 사용합니다.
const users = [
{ id: 1, name: 'Kim' },
{ id: 2, name: 'Lee' },
{ id: 3, name: 'Park' }
];
function UserList() {
return (
<ul>
{users.map((user) => (
<li key={user.id}>{user.name}</li>
))}
</ul>
);
}
여기서는 user.id가 고유값이기 때문에 좋은 key가 됩니다.
key에 넣는 것은 좋지 않습니다. 가능하면 데이터 자체의 고유 id를 쓰는 편이 안전합니다.예를 들어 할 일 목록에서 데이터가 없으면 안내 문구를 보여주고, 데이터가 있으면 리스트를 출력할 수 있습니다.
function TodoList({ todos }) {
return (
<div>
{todos.length === 0 ? (
<p>등록된 할 일이 없습니다.</p>
) : (
<ul>
{todos.map((todo) => (
<li key={todo.id}>{todo.text}</li>
))}
</ul>
)}
</div>
);
}
이 패턴은 React에서 정말 자주 나옵니다.
- 데이터가 없으면 빈 상태 메시지 보여주기
- 데이터가 있으면 목록 출력하기
- 로딩 중이면 스피너 보여주기
- 권한이 있으면 버튼 보여주기
즉, JSX를 익힌다는 것은 단순 태그 작성이 아니라 상태와 데이터를 UI로 바꾸는 사고 방식에 익숙해지는 과정이기도 합니다.
실무에서 JSX를 쓸 때 핵심은 “짧게 쓰는 것”보다 “읽기 쉽게 쓰는 것”입니다.
특히 아래 기준을 기억하면 도움이 됩니다.
- 조건이 복잡하면 JSX 밖으로 빼기
- 리스트 key는 고유값 사용하기
- 컴포넌트가 너무 길어지면 분리하기
- 상태, 조건, 리스트가 한 화면에 섞일수록 구조를 더 단순하게 유지하기
좋은 JSX는 “멋진 문법”보다 한눈에 읽히는 UI 구조에 가깝습니다.
- JSX 안에서 JavaScript 값은
{ }로 넣는지 확인 - 조건부 렌더링은 삼항 연산자,
&&, 바깥 분기를 구분해서 쓰는지 확인 - 리스트 출력은
map()으로 처리하는지 확인 key에는 가능한 한 고유값을 쓰는지 확인- 문법보다 읽기 쉬운 구조로 작성했는지 확인
&&, if 분기map() + 올바른 key- React란 무엇인가? 특징과 사용하는 이유
- React 프로젝트 구조 정리: src, public, components 폴더 역할
- React 개발환경 설정 방법: Node.js, Vite, npm 기본 흐름
React JSX를 이해하면 이후 컴포넌트, state, 이벤트 처리, hooks까지 훨씬 자연스럽게 연결됩니다.
onents 폴더 역할 쉽게 이해하기
React JSX를 이해하면 이후 컴포넌트, state, 이벤트 처리, hooks까지 훨씬 자연스럽게 연결됩니다.
'Front > React' 카테고리의 다른 글
| React 리눅스 서버 배포 방법 | build 파일 업로드부터 실제 서비스 적용까지 (0) | 2026.04.03 |
|---|---|
| React Router 사용법 | 페이지 이동, Link, 기본 라우팅 적용 방법 (2) | 2026.04.02 |
| React 프로젝트 구조 정리 | src, public, components 폴더 역할 쉽게 이해하기 (0) | 2026.04.01 |
| React 설치 및 개발환경 세팅 방법 | Node.js 설치부터 프로젝트 생성까지 (1) | 2026.04.01 |
| React란 무엇인가? 특징, 장점, 사용하는 이유까지 쉽게 정리 (0) | 2026.04.01 |

