Skip to content

기본 튜토리얼 - React와 JSX 간단히 이해하기 ​

이전 문서: 기본 튜토리얼 - React와 JSX 간단히 이해하기 게시일: 2023-7-9 마지막 수정: 2025-4-25 원래 분류: ⌨ 개발 튜토리얼 태그: ReactJS

서문 ​

프론트엔드 개발자라면 Vue, AngularJS, React를 자주 들어봤을 것입니다. 특정 프레임워크 비교는 여기서 자세히 다루지 않습니다. 관심이 있다면 여러 기술 프레임워크의 차이를 따로 찾아보면 됩니다.

이 글은 React 개발이 전통적인 HTML 개발과 어떻게 다른지에 초점을 맞춥니다. 기본 차이를 이해하면 개발 과정에서 많은 실수를 줄일 수 있습니다.

React의 JSX와 일반 HTML 웹페이지 개발에는 다섯 가지 차이가 있습니다. 문법, 동적 렌더링, 컴포넌트화, 데이터 바인딩, 생태계입니다.

1. 문법 차이 ​

JSX는 JavaScript의 문법 확장입니다. JavaScript 코드 안에서 HTML과 비슷한 마크업을 직접 사용해 UI 컴포넌트를 설명할 수 있습니다. 반면 일반 HTML은 독립적인 마크업 언어입니다.

JSX 코드 예시:

JavaScript
const element = <div style={{backgroundColor:"black"}} className="my-class">Hello, world!</div>;

HTML 코드 예시:

JavaScript
<div style="background-color:black;" class="my-class">Hello, world!</div>

2. 동적 렌더링 ​

React에서는 JSX를 통해 UI 컴포넌트를 동적으로 생성할 수 있습니다. 일반 HTML에서는 페이지 구조가 정적이며 동적 렌더링을 직접 지원하지 않습니다.

JSX 코드 예시:

JavaScript
function App(props) {
  return <h1>Hello, {props.name}!</h1>;
}

ReactDOM.render(
  <App name="Alice" />,
  document.getElementById('root')
);

HTML 코드 예시:

HTML
<!-- Static HTML code -->
<h1>Hello, Alice!</h1>

3. 컴포넌트화 ​

React에서는 UI 컴포넌트를 작고 재사용 가능한 컴포넌트로 나누고, 이를 조합해 복잡한 UI를 구성할 수 있습니다. 일반 HTML에는 컴포넌트와 비슷한 개념이 없으며, 페이지 구조는 보통 정적 HTML 파일 형태로 존재합니다.

JSX 코드 예시:

JavaScript
/**
 * Button component
 **/
function Button(props) {
  return <button onClick={props.onClick}>{props.label}</button>;
}
/**
 * Root node layout
 **/
function App() {
  return (
    <div>
      <Button label="Click me" onClick={() => alert('Clicked!')} />
    </div>
  );
}

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

이 Button 컴포넌트는 다른 레이아웃이나 컴포넌트 안에서 원하는 만큼 반복해 사용할 수 있습니다.

HTML 코드 예시:

HTML
<!-- HTML code without components -->
<div>
  <button onclick="alert('Clicked!')">Click me</button>
</div>

4. 데이터 바인딩 ​

React에서는 데이터 바인딩을 통해 컴포넌트 상태와 UI 표시를 연결하고 UI를 자동으로 갱신할 수 있습니다. 일반 HTML에서는 DOM 노드를 수동으로 업데이트해야 UI가 변경됩니다.

JSX 코드 예시:

JavaScript
/**
 * Counter component
 */
function Counter() {
  const [count, setCount] = useState(0);
  /**
   * Handle click
   */
  function handleClick() {
    setCount(count + 1);
  }

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={handleClick}>Increment</button>
    </div>
  );
}

ReactDOM.render(
  <Counter />,
  document.getElementById('root')
);

HTML 코드 예시:

HTML
<!-- HTML code without data binding -->
<div>
  <p id="count">Count: 0</p>
  <button onclick="increment()">Increment</button>
</div>

<script>
function increment() {
  const countElement = document.getElementById('count');
  const count = parseInt(countElement.innerText.split(':')[1].trim());
  countElement.innerText = 'Count: ' + (count + 1);
}
</script>

5. 생태계 ​

React는 방대한 생태계를 가지고 있습니다. 많은 서드파티 라이브러리와 도구를 통해 컴포넌트 개발, 상태 관리, 라우팅 제어 등을 편리하게 처리할 수 있습니다. 일반 HTML 개발에서는 이런 기능을 구현하려면 많은 JavaScript 코드를 직접 작성해야 할 수 있습니다.

정리하면 React의 JSX는 일반 HTML 웹페이지 개발보다 더 유연하고 효율적이며 유지보수가 쉽습니다. 크고 복잡한 웹 애플리케이션을 구축하는 데 적합합니다.

원문 링크 ​

https://docs.tangly1024.com/article/react-jsx