리액트 프론트앤드

리액트는 Facebook에서 개발한 오픈 소스 자바스크립트 라이브러리로, 사용자 인터페이스(UI)를 구축하는 데 사용됩니다. 이 강좌에서는 리액트를 활용하여 프론트엔드 애플리케이션을 개발하는 방법에 대해 심도 있게 다루겠습니다. 또한, 리액트의 최신 기능과 모범 사례를 제공하고 실제 예제 코드를 통해 학습할 수 있도록 하겠습니다.

리액트의 기본 개념

리액트는 컴포넌트 기반 라이브러리입니다. 컴포넌트는 UI의 독립적인 부분으로, 재사용 가능하며 상태(state)와 속성(props)을 가질 수 있습니다. 각 컴포넌트는 자신의 상태를 관리하며, 부모 컴포넌트로부터 속성을 받을 수 있습니다.

컴포넌트의 종류

  • 함수형 컴포넌트: 상태와 생명주기 메서드가 필요한 경우 React Hooks를 사용합니다.
  • 클래스형 컴포넌트: 상태와 생명주기 메서드가 내장되어 있으며, ES6 클래스를 통해 정의됩니다.

안녕하세요, 리액트!

첫 번째 컴포넌트를 만들어보겠습니다. 아래의 코드는 “안녕하세요, 리액트!”라는 메시지를 화면에 보여주는 함수형 컴포넌트입니다.


import React from 'react';

function HelloWorld() {
    return 

안녕하세요, 리액트!

; } export default HelloWorld;

리액트의 JSX

JSX는 JavaScript XML의 약자로, JavaScript 코드 안에 HTML처럼 생긴 구문을 사용하여 요소를 생성할 수 있게 해줍니다. JSX를 사용하면 더 직관적으로 UI를 구성할 수 있습니다.

JSX 예제

다음 예제는 기본적인 JSX 사용을 보여줍니다. 이 경우, 우리는 여러 개의 컴포넌트를 결합하여 하나의 UI를 구성합니다.


import React from 'react';

function App() {
    return (
        

안녕하세요, 리액트!

리액트는 컴포넌트 기반 라이브러리입니다.

); } export default App;

리액트 상태 관리

리액트의 중요한 개념 중 하나는 상태(state)입니다. 상태는 컴포넌트의 데이터이며, 시간이 지남에 따라 변경됩니다. 컴포넌트에서 상태가 변경되면, 리액트는 자동으로 UI를 업데이트합니다.

useState Hook

함수형 컴포넌트에서 상태를 관리하기 위해 useState Hook을 사용할 수 있습니다. 다음은 카운터를 구현하는 예제입니다.


import React, { useState } from 'react';

function Counter() {
    const [count, setCount] = useState(0);

    return (
        

현재 카운트: {count}

); } export default Counter;

리액트의 생명주기

리액트 컴포넌트의 생명주기는 마운트, 업데이트, 언마운트로 나누어집니다. 각 생명주기에서 특정 메서드를 사용하여 컴포넌트의 동작을 제어할 수 있습니다.

useEffect Hook

useEffect Hook은 컴포넌트가 마운트될 때와 업데이트될 때 특정 작업을 실행하는 데 사용됩니다. 다음은 데이터를 가져오는 예제입니다.


import React, { useEffect, useState } from 'react';

function DataFetcher() {
    const [data, setData] = useState([]);

    useEffect(() => {
        fetch('https://api.example.com/data')
            .then(response => response.json())
            .then(data => setData(data));
    }, []);

    return (
        
    {data.map(item => (
  • {item.name}
  • ))}
); } export default DataFetcher;

리액트 라우터

리액트 애플리케이션에서 여러 페이지를 구현하기 위해 React Router를 사용할 수 있습니다. React Router는 SPA(Single Page Application)의 라우팅을 지원합니다.

기본적인 라우터 설정

다음은 여러 페이지로 구성된 간단한 리액트 애플리케이션의 예입니다.


import React from 'react';
import { BrowserRouter as Router, Route, Switch, Link } from 'react-router-dom';

function Home() {
    return 

홈 페이지

; } function About() { return

소개 페이지

; } function App() { return ( ); } export default App;

상태 관리 라이브러리 – Redux

리액트 애플리케이션이 커지면 상태 관리가 복잡해질 수 있습니다. 이때 Redux와 같은 상태 관리 라이브러리를 활용하면 효율적으로 상태를 관리할 수 있습니다.

Redux의 기본 개념

  • Store: 애플리케이션의 전체 상태를 보관합니다.
  • Action: 상태에서 변화가 필요할 때 발생하는 이벤트입니다.
  • Reducer: 상태 트리를 수정하는 순수 함수입니다.

간단한 Redux 예제


import { createStore } from 'redux';

// 액션 (Action)
const INCREMENT = 'INCREMENT';
const DECREMENT = 'DECREMENT';

function increment() {
    return { type: INCREMENT };
}

function decrement() {
    return { type: DECREMENT };
}

// 리듀서 (Reducer)
const initialState = { count: 0 };

function counterReducer(state = initialState, action) {
    switch (action.type) {
        case INCREMENT:
            return { count: state.count + 1 };
        case DECREMENT:
            return { count: state.count - 1 };
        default:
            return state;
    }
}

// 스토어 (Store)
const store = createStore(counterReducer);

// 컴포넌트
import React from 'react';
import { Provider, useSelector, useDispatch } from 'react-redux';

function Counter() {
    const count = useSelector(state => state.count);
    const dispatch = useDispatch();

    return (
        

현재 카운트: {count}

); } function App() { return ( ); } export default App;

리액트와 API 통신

리액트 애플리케이션은 서버와 통신하여 데이터를 주고받는 경우가 많습니다. API를 통해 데이터를 가져오는 방법에 대해 알아보겠습니다.

axios를 이용한 API 호출

axios는 Promise 기반의 HTTP 클라이언트로, API를 호출하는 데 유용합니다. 다음은 axios를 사용하여 API에서 데이터를 가져오는 예제입니다.


import React, { useState, useEffect } from 'react';
import axios from 'axios';

function UserList() {
    const [users, setUsers] = useState([]);

    useEffect(() => {
        axios.get('https://jsonplaceholder.typicode.com/users')
            .then(response => setUsers(response.data))
            .catch(error => console.error(error));
    }, []);

    return (
        
    {users.map(user => (
  • {user.name}
  • ))}
); } export default UserList;

리액트의 스타일링 방법

리액트에서 CSS를 적용하는 방법은 여러 가지가 있습니다. CSS 파일을 직접 사용하는 방식, CSS Modules, Styled Components 등을 활용한 방식이 있습니다.

CSS 파일 사용하기

가장 간단한 방법은 CSS 파일을 import하여 사용하는 것입니다. 아래는 CSS 파일을 통해 스타일을 적용하는 예제입니다.


import React from 'react';
import './App.css'; // CSS 파일을 import 합니다.

function App() {
    return (
        

리액트 스타일링

); } export default App;

Styled Components 사용하기

Styled Components는 CSS를 JavaScript 파일 안에서 작성할 수 있게 해주는 라이브러리입니다. 아래는 Styled Components를 사용하는 예제입니다.


import React from 'react';
import styled from 'styled-components';

const Title = styled.h1`
    color: blue;
`;

function App() {
    return 리액트, 스타일링하기!;
}

export default App;

리액트에서 폼 다루기

사용자의 입력을 처리하기 위한 폼을 만드는 방법에 대해 알아보겠습니다. 리액트에서 폼은 controlled component 방식으로 관리하는 것이 일반적입니다.

폼 예제


import React, { useState } from 'react';

function Form() {
    const [name, setName] = useState('');

    const handleSubmit = (event) => {
        event.preventDefault();
        alert(`안녕하세요, ${name}님!`);
    };

    return (
        
setName(e.target.value)} placeholder="이름을 입력하세요" />
); } export default Form;

리액트 애플리케이션 배포하기

개발이 완료된 리액트 애플리케이션을 배포하는 방법에 대해 설명하겠습니다. 리액트 애플리케이션은 다양한 플랫폼에 배포할 수 있습니다.

배포 준비하기

리액트 애플리케이션을 배포하기 위해 먼저 빌드합니다. 다음 명령어를 통해 빌드를 실행할 수 있습니다.


npm run build

GitHub Pages에 배포하기

GitHub Pages에 리액트 애플리케이션을 배포하는 방법은 다음과 같습니다.


npm install gh-pages --save-dev

그 후, package.json 파일에 다음과 같은 설정을 추가합니다.


"homepage": "https://{username}.github.io/{repo-name}/",

마지막으로, 다음 명령어로 배포합니다.


npm run deploy

마무리

이번 강좌에서는 리액트를 이용한 프론트엔드 개발의 기본 개념과 활용 사례에 대해 살펴보았습니다. 리액트의 강력한 기능과 생태계를 활용하여 더욱 복잡하고 강력한 애플리케이션을 만들어보세요.

추가 학습 자료