React-admin: 관리자 페이지 구축하기

React-admin: 기업용 B2B 관리자 페이지 구축의 종결자
웹 서비스를 운영하다 보면 사용자 관리, 게시글 모니터링, 통계 확인 등을 위한 백오피스(Back-office) 혹은 어드민 페이지 구축이 필수적입니다. 하지만 매번 비슷한 UI와 CRUD 로직을 반복해서 짜는 것은 개발자에게 매우 지루한 작업이죠. 이 고민을 해결해 주는 것이 바로 React-admin입니다.
공식 사이트
https://marmelab.com/react-admin/
React Admin
A frontend Framework for building B2B applications running in the browser on top of REST/GraphQL APIs, using ES6, React and Material Design
marmelab.com
1. React-admin이란 무엇인가?
React-admin은 REST/GraphQL API를 기반으로 데이터 중심(Data-driven) 애플리케이션을 구축하기 위한 오픈소스 프레임워크입니다. 단순히 UI 컴포넌트 모음집이 아니라, 데이터 취득(Fetching), 인증(Auth), 라우팅(Routing), 권한 관리가 하나로 묶인 풀스택 프런트엔드 솔루션에 가깝습니다.
React, React Query, React Hook Form, Material UI(MUI) 등 검증된 기술 스택을 기반으로 제작되어 안정성이 매우 뛰어납니다.
2. React-admin을 선택해야 하는 주요 장점
① 생산성 극대화
기본적인 리스트 조회, 상세 보기, 수정, 생성(CRUD) 화면을 구성하는 데 필요한 코드량이 일반적인 React 개발 방식의 10% 수준입니다. Resource 하나만 선언하면 나머지 로직은 프레임워크가 처리합니다.
② 데이터 공급자(DataProvider) 아키텍처
React-admin은 특정 백엔드에 종속되지 않습니다. DataProvider라는 어댑터를 통해 REST API, GraphQL, Supabase, Firebase 등 어떤 형태의 데이터 소스와도 연결할 수 있습니다. 이미 시장에 나와 있는 수십 개의 오픈소스 어댑터를 활용하면 설정은 단 몇 분 만에 끝납니다.
③ 엔터프라이즈급 기능 기본 탑재
- 인증 및 권한: 로그인/로그아웃 처리는 물론, 역할(Role)에 따른 메뉴 노출 제어가 가능합니다.
- 낙관적 업데이트 (Optimistic UI): 데이터 수정 시 서버 응답을 기다리지 않고 화면을 먼저 갱신하여 사용자 경험을 높입니다.
- 필터 및 검색: 복잡한 다중 필터링과 전체 검색 기능을 선언적으로 구현할 수 있습니다.
④ 유연한 커스터마이징
Material UI 기반이므로 기본 디자인이 깔끔할 뿐만 아니라, 필요하다면 하위 컴포넌트를 직접 제작하여 끼워 넣을 수 있는 높은 자유도를 제공합니다.
3. 핵심 아키텍처 및 예제
3.1 기본 설정 (App.tsx)
가장 기초적인 설정만으로 작동하는 관리자 페이지의 모습입니다.
import { Admin, Resource, ListGuesser, EditGuesser } from "react-admin";
import jsonServerProvider from "ra-data-json-server";
// JSONPlaceholder API를 예시 데이터 소스로 사용
const dataProvider = jsonServerProvider("https://jsonplaceholder.typicode.com");
const App = () => (
<Admin dataProvider={dataProvider}>
{/* Resource name은 API 엔드포인트와 매칭됩니다. */}
<Resource name="users" list={ListGuesser} edit={EditGuesser} />
<Resource name="posts" list={ListGuesser} />
</Admin>
);
export default App;
3.2 리스트 화면 커스터마이징 (UserList.tsx)
데이터를 어떻게 보여줄지 세밀하게 제어할 수 있습니다.
import { List, Datagrid, TextField, EmailField, UrlField, EditButton } from "react-admin";
export const UserList = () => (
<List>
<Datagrid rowClick="edit">
<TextField source="id" label="번호" />
<TextField source="name" label="이름" />
<EmailField source="email" label="이메일" />
<UrlField source="website" label="웹사이트" />
<EditButton />
</Datagrid>
</List>
);
4. 실무 도입 시 고려사항
React-admin은 다음과 같은 상황에서 최고의 효율을 발휘합니다.
- 사내 도구: 디자인보다 기능과 데이터 정합성이 중요한 경우.
- 빠른 MVP: 서비스 초기 단계에서 관리 기능을 빠르게 붙여야 할 때.
- 표준화: 여러 명이 관리자 페이지를 개발할 때 일관된 코딩 스타일을 유지하고 싶을 때.
5. 공식 문서 및 참고 자료
React-admin은 10년 가까이 유지보수되어 온 만큼 문서화가 환상적입니다. 특히 'Demos' 섹션에서 실제 구동 모습을 꼭 확인해 보세요.
6. 마치며
비즈니스의 핵심은 서비스 그 자체이지, 관리자 페이지를 예쁘게 코딩하는 것이 아닙니다. React-admin을 통해 단순 반복 작업 시간을 아끼고, 서비스의 본질적인 로직 개발에 더 많은 시간을 투자해 보세요. 생산성의 차이를 즉각적으로 경험하게 될 것입니다.
참고 글
https://ace0507.tistory.com/153
React admin체험 일기
이미 진행중이던 프로젝트에 투입이 되어 코드를 훑어 보았는데, 조금 당황스러웠다. export const PostList = () => ( ); 게시물 리스트를 나타내는건데, 코드가 이런식이었다. map을 돌려주고있는 것도
ace0507.tistory.com
https://velog.io/@himynameisminji/react-admin-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
react-admin 알아보기
현재 투입된 프로젝트에서 react-admin 을 처음봤다. 익히 알고 있던 react와는 뭔가 좀 다른 것 같아 처음에 사용할 때 당황했지만, 사용하다보니 편리한 부분이 많은 것 같고 추후 사용할 일이 많을
velog.io