JSX란?

react
Apr 25, 2025
6 min

[본 게시물은 파트너스 활동의 일환으로 소정의 수수료를 받을 수 있습니다.]

[코드캠프] 부트캠프에서 만든 '완벽한' 프론트엔드 코스

수백명의 개발자를 배출한 ‘진짜’ 부트캠프의 완벽한 프론트엔드 커리큘럼 입니다. 이 강의 하나로 여러분은 현업 주니어 개발자 수준까지 성장 가능하며, 프론트엔드 기술스택의 활용 능력과 지식을 얻게 될거에요. 누구나 사회적, 경제적, 교육적 배경에 상관없이 커리어를 쌓을 수 있도록, [코드캠프]가 준비했습니다 :)

✅ JSX(JavaScript XML)란?

JSX는 JavaScript 내부에서 HTML을 작성할 수 있게 해주는 확장 문법입니다.

React에서 UI를 직관적이고 선언적으로 작성할 수 있도록 도와줍니다.


🔷 1. JSX의 기본 개념

JSX는 다음과 같은 코드 형태를 가집니다.

1const element = <h1>Hello, world!</h1>;
  • JSX는 실제로는 JavaScript의 표현식(Expression)입니다.
  • 브라우저에서 바로 실행될 수 없고, 바벨(Babel) 과 같은 도구를 사용해 JavaScript로 변환되어야 합니다.

위 JSX 코드는 Babel과 같은 도구에 의해 다음 JavaScript 코드로 변환됩니다:

1const element = React.createElement('h1', null, 'Hello, world!');

🔷 2. JSX의 동작 원리

JSX를 사용할 때 실제로는 다음 단계가 수행됩니다:

① JSX 코드 작성

1<div className="container">
2  <h1>Hello</h1>
3  <button onClick={handleClick}>Click</button>
4</div>

▼ 변환(Babel 등을 통해 변환)

1React.createElement('div', null, React.createElement('h1', null, 'Hello, world!'));
  • JSX 코드는 가상 DOM 객체를 생성하는 React.createElement() 함수 호출로 변환됩니다.
  • 이를 통해 React는 UI를 실제 DOM에 렌더링할 수 있게 됩니다.

🔷 3. JSX의 구현 방법 (내부적으로 일어나는 일)

JSX는 기본적으로 다음 함수 호출로 변환됩니다.

1React.createElement(
2  type, // 태그 이름이나 컴포넌트
3  [props], // 속성(props) 객체
4  [...children], // 자식 요소
5);

📌 예시

다음 JSX 코드를 살펴봅시다.

1<MyComponent color="red">Hello, world!</MyComponent>

이 코드는 다음과 같은 JavaScript로 변환됩니다.

1React.createElement(MyComponent, { color: 'red' }, 'Hello, world!');

🔷 3-1. JSX의 속성(props)

JSX에서 속성을 지정하면 React는 객체로 변환하여 컴포넌트에 전달합니다.

1// JSX
2<MyComponent isActive={true} name="React" />
1// 변환된 형태
2React.createElement(MyComponent, { isActive: true, name: 'React' });

🔷 3. JSX 구현 방법 (바벨로 변환)

JSX를 사용하기 위해선 빌드 도구가 필요합니다. 주로 Babel이 사용됩니다.

✅ 설치

npm install @babel/core @babel/preset-react

✅ JSX 컴파일 예시

  • 원본 JSX
1<div className="container">
2  <h1>Hello, React!</h1>
3</div>
  • 컴파일된 JavaScript 코드
1React.createElement('div', { className: 'container' }, React.createElement('h1', null, 'Hello, React!'));

🔷 3. JSX를 통해 단방향 데이터 흐름 구현하기

React는 컴포넌트 간의 데이터를 단방향으로 전달하기 위해 props를 사용합니다.

  • 상위 컴포넌트
1function Parent() {
2  const [message, setMessage] = useState('Hello from Parent!');
3
4  return <Child message={message} />;
5}
  • 하위 컴포넌트
1function Child({ message }) {
2  return <div>{message}</div>;
3}

데이터는 위에서 아래로만 흐르며, 하위 컴포넌트에서는 전달받은 데이터를 변경할 수 없습니다.


🔷 3. JSX의 주요 장점

  • 직관적 코드 작성: HTML과 비슷한 문법으로 UI 구조를 쉽게 작성할 수 있습니다.
  • 가독성 향상: 코드만 보고도 UI의 구조를 쉽게 이해할 수 있습니다.
  • 생산성 향상: 선언적 프로그래밍 방식을 통해 UI 개발의 생산성을 높일 수 있습니다.

🔷 4. JSX 주의사항

  • JSX는 예약어를 일부 변경하여 사용합니다. 예를 들어, class 대신 className, for 대신 htmlFor를 사용해야 합니다.
  • 모든 JSX 표현식은 하나의 부모 요소로 감싸져야 합니다. (단일 요소 규칙)

🔷 3. JSX를 사용하는데 필요한 설정

JSX를 사용하는 React 프로젝트는 보통 아래 도구로 설정됩니다.

  • Babel

JSX를 JavaScript로 변환하는 역할

  • Webpack 또는 Vite

여러 JavaScript 파일 및 리소스를 번들링하고 최적화하여 제공합니다.

  • Create React App 또는 Next.js

위 설정을 간편하게 포함하여 즉시 사용 가능한 환경 제공


📌 정리

  • JSX는 가독성 좋은 선언적 UI를 간편하게 작성하도록 도와줍니다.
  • JSX → React.createElement() → Virtual DOM → Real DOM의 흐름을 기억하면,
  • React가 UI를 어떻게 렌더링하는지 이해하는 데 도움이 됩니다.