CSV/Excel/JSON을 임포트·내보내고 명확한 오류로 데이터를 검증하며 역할, 감사 로그, 신뢰할 수 있는 처리 방식을 지원하는 웹 앱을 설계하는 방법을 배우세요.

화면을 설계하거나 파일 파서를 고르기 전에 누가 제품으로 데이터를 들여오고 내보내는지, 그리고 왜 하는지를 구체적으로 정의하세요. 내부 운영자를 위한 데이터 임포트 웹 앱은 고객이 셀프서비스로 쓰는 엑셀 임포트 도구와 아주 다르게 보여야 합니다.
임포트/익스포트에 관여할 역할을 먼저 나열하세요:
각 역할에 대해 예상되는 숙련도와 복잡성 허용치를 정의하세요. 고객은 대개 옵션이 적고 제품 내 설명이 더 잘 되어 있어야 합니다.
우선순위를 정한 주요 시나리오를 적어두세요. 흔한 사례:
그런 다음 측정 가능한 성공 지표를 정의하세요. 예: 실패한 임포트 감소, 오류 해결 시간 단축, "파일이 업로드되지 않아요"라는 고객 문의 감소. 이런 지표는 나중에 오류 보고 개선 vs 더 많은 파일 형식 지원 같은 트레이드오프를 결정할 때 도움됩니다.
첫날에 지원할 내용을 명확히 하세요:
마지막으로 규정 준수 요구사항을 초기에 파악하세요: 파일에 PII가 포함되는지, 보관 기간(업로드를 얼마나 오래 보관할지), 감사 요구사항(누가 언제 무엇을 가져왔는지)이 있는지 등. 이러한 결정은 저장, 로깅, 권한에 영향을 미칩니다.
화려한 열 매핑 UI나 CSV 검증 규칙을 생각하기 전에 팀이 자신 있게 배포하고 운영할 수 있는 아키텍처를 고르세요. 임포트/익스포트는 ‘지루한’ 인프라입니다—반복 개발 속도와 디버깅 용이성이 참신함보다 우선합니다.
어떤 주류 웹 스택도 데이터 임포트 웹 앱을 구동할 수 있습니다. 기존 스킬과 채용 현실에 따라 선택하세요:
핵심은 일관성입니다: 스택은 새로운 임포트 타입, 검증 규칙, 내보내기 형식을 재작성 없이 쉽게 추가할 수 있게 해야 합니다.
프로토타입에만 그치지 않고 빠르게 스캐폴딩을 가속하려면 Koder.ai 같은 vibe-coding 플랫폼이 도움이 될 수 있습니다. 채팅으로 임포트 흐름(upload → preview → mapping → validation → background processing → history)을 설명하면 React UI와 Go + PostgreSQL 백엔드를 생성해 플래닝 모드와 스냅샷/롤백으로 빠르게 반복할 수 있습니다.
구조화된 레코드, 업서트, 데이터 변경 감사 로그는 관계형 데이터베이스(Postgres/MySQL)를 사용하세요.
원본 업로드(CSV/Excel)는 오브젝트 스토리지(S3/GCS/Azure Blob)에 보관하세요. 원본 파일을 보관하면 다음에 유용합니다:
작은 파일은 동기식(업로드 → 검증 → 적용)으로 실행해 반응성을 줄 수 있습니다. 큰 파일은 백그라운드 작업으로 옮기세요:
이렇게 하면 재시도와 쓰로틀링을 적용하기도 쉽습니다.
SaaS라면 테넌트 데이터 분리를(row-level 스코핑, 별도 스키마, 별도 DB) 어떻게 할지 일찍 결정하세요. 이 선택은 데이터 내보내기 API, 권한, 성능에 영향을 줍니다.
가동시간 목표, 최대 파일 크기, 임포트당 예상 행 수, 완료 시간 목표, 비용 한도 등을 적어두세요. 이런 숫자는 작업 큐 선택, 배치 전략, 인덱싱 등 UI를 다듬기 전부터 아키텍처 결정을 이끌어냅니다.
인테이크 흐름은 모든 임포트의 톤을 결정합니다. 예측 가능하고 관대하게 느껴지면, 무언가 잘못됐을 때 사용자는 다시 시도하고 지원 문의는 줄어듭니다.
웹 UI에는 드래그 앤 드롭 영역과 전통적인 파일 선택기를 모두 제공하세요. 드래그 앤 드롭은 파워 유저에게 빠르고, 파일 선택기는 접근성과 친숙함을 제공합니다.
다른 시스템에서 자동으로 가져오는 고객을 위해 API 엔드포인트도 추가하세요. 멀티파트 업로드(파일 + 메타데이터)를 받거나 대용량 파일을 위한 사전 서명된 URL 흐름을 지원할 수 있습니다.
업로드 시 가벼운 파싱을 실행해 아직 데이터 커밋 전의 “프리뷰”를 만드세요:
이 프리뷰는 이후 열 매핑과 검증 단계의 기반이 됩니다.
항상 원본 파일을 안전하게 보관하세요(오브젝트 스토리지 권장). 불변으로 보관하면:
각 업로드를 일급 레코드로 다루세요. 업로더, 타임스탬프, 출처 시스템, 파일명, 체크섬(중복 탐지와 무결성 확인)을 저장하세요. 이는 감사와 디버깅에 필수적입니다.
빠른 사전 검사를 즉시 실행하고 필요 시 조기에 실패시키세요:
사전 검사가 실패하면 명확한 메시지와 해결 방안을 제공하세요. 목표는 근본적으로 나쁜 파일은 빠르게 차단하되, 매핑·정리로 해결 가능한 유효한 데이터는 막지 않는 것입니다.
대부분의 임포트 실패는 파일 헤더가 앱의 필드와 일치하지 않을 때 발생합니다. 명확한 열 매핑 단계는 “엉킨 CSV”를 예측 가능한 입력으로 바꿔 사용자의 시행착오를 줄입니다.
간단한 테이블을 보여주세요: 원본 열 → 대상 필드. 자동 감지(대소문자 무시, “E-mail” → email 같은 동의어)를 제공하되 사용자가 항상 덮어쓸 수 있게 하세요.
다음과 같은 품질 향상 기능을 포함하세요:
고객이 매주 같은 형식을 가져온다면, 원클릭으로 적용할 수 있게 하세요. 템플릿을 스코프할 수 있게 하세요:
새 파일 업로드 시 열 겹침을 기반으로 템플릿을 제안하세요. 또한 버전 관리를 지원해 사용자가 템플릿을 업데이트해도 이전 실행이 깨지지 않게 하세요.
매핑된 필드별로 사용자가 적용할 수 있는 경량 변환을 추가하세요:
UI에 변환을 명시적으로 표시하세요(“Applied: Trim → Parse Date”)—출력이 설명 가능해야 합니다.
전체 파일을 처리하기 전에(예: 20행) 매핑된 결과의 프리뷰를 보여주세요. 원본 값, 변환된 값, 그리고 “날짜를 파싱할 수 없음” 같은 경고를 함께 표시해 사용자가 문제를 조기에 발견하게 합니다.
사용자에게 키 필드(이메일, external_id, SKU)를 선택하게 하고 중복 시 어떻게 처리할지 설명하세요. 업서트를 나중에 처리하더라도 이 단계는 기대치를 설정합니다: 파일 내 중복 키를 경고하고 어떤 레코드가 “승리”할지(첫 행, 마지막 행, 오류)를 제안하세요.
검증은 단순한 파일 업로더와 신뢰할 수 있는 임포트 기능을 구분합니다. 목표는 무조건 엄격해지는 것이 아니라, 나쁜 데이터가 퍼지는 것을 막되 사용자에게 명확하고 실행 가능한 피드백을 주는 것입니다.
검증을 목적별로 세 가지 검사로 나누세요:
email이 문자열인가? amount가 숫자인가? customer_id가 있는가? 빠르게 파싱 직후 실행할 수 있습니다.amount는 양수여야 한다, 상태는 Active/Paused 중 하나여야 한다, 시작일은 과거일 수 없다 등 제품 동작을 반영합니다.country=US면 state가 필수다, end_date는 start_date 이후여야 한다, 플랜 이름이 워크스페이스에 존재해야 한다 등. 종종 DB 조회나 다른 컬럼이 필요합니다.레이어를 분리하면 확장과 UI 설명이 쉬워집니다.
임포트가:
둘 다 지원할 수 있습니다: 기본은 엄격, 관리자를 위한 “부분 허용” 옵션 제공 등으로 유연하게 하세요.
모든 오류는 무엇이, 어디서, 어떻게 고칠지 답해야 합니다.
예: “행 42, 열 ‘Start Date’: YYYY-MM-DD 형식의 유효한 날짜여야 합니다.”
구분하세요:
사용자는 한 번에 모든 문제를 고치지 못합니다. 검증 결과를 임포트 시도와 연계해 두고 사용자가 수정된 파일을 다시 업로드하기 쉽게 하세요. 또한 나중에 다량으로 수정할 수 있게 다운로드 가능한 오류 리포트를 제공하세요.
실용적인 접근은 하이브리드입니다:
이렇게 하면 유연성을 유지하면서 디버깅이 어려운 설정 지옥으로 빠지는 것을 막을 수 있습니다.
임포트는 느린 DB, 피크 타임의 파일 폭주, 또는 단일 “문제 있는 행” 때문에 실패하는 일이 많습니다. 신뢰성은 무거운 작업을 요청/응답 경로에서 분리하고 모든 단계를 안전하게 재실행 가능하게 만드는 데 있습니다.
파싱, 검증, 쓰기를 백그라운드 작업(큐/워커)에서 실행하세요. 업로드가 웹 타임아웃에 걸리지 않고, 워커를 독립적으로 확장할 수 있게 합니다.
실용적 패턴: 작업을 청크로 나누기(예: 1,000행/작업). 하나의 “부모” 임포트 작업이 청크 작업을 스케줄하고 결과를 집계해 진행 상태를 업데이트합니다.
임포트를 상태 머신으로 모델링해 UI와 운영팀이 현재 상태를 알 수 있게 하세요:
상태 전이별 타임스탬프와 시도 횟수를 저장해 “언제 시작했나?”, “재시도가 몇 번 발생했나?” 같은 질문에 로그를 뒤지지 않고 답할 수 있게 합니다.
처리된 행 수, 남은 행 수, 지금까지 발견된 오류 수 같은 측정 가능한 진행 정보를 보여주세요. 처리량을 추정할 수 있다면 대략적인 ETA(예: “약 3분”)를 표시하되, 정확한 카운트다운보다는 대략적 표기를 선호하세요.
재시도가 중복 생성이나 중복 적용을 일으키지 않게 하세요. 일반 기법:
import_id + row_number 또는 행 해시 같은 안정적인 멱등성 키 사용워크스페이스별 동시 임포트 제한과 쓰기 집중 단계(예: 초당 N행 최대) 쓰로틀링으로 DB 과부하를 방지해 다른 사용자 경험을 보호하세요.
무슨 일이 잘못됐는지 이해하지 못하면 사용자는 같은 파일을 반복 업로드하다 포기합니다. 모든 임포트를 일급 "실행(run)"으로 다루고 명확한 기록과 실행 가능한 오류를 제공하세요.
파일 제출 시 즉시 임포트 실행 엔티티를 만드세요. 이 레코드는 다음을 캡처해야 합니다:
이것이 임포트 이력 화면이 됩니다: 상태, 카운트, 상세 보기 링크를 가진 실행 목록입니다.
애플리케이션 로그는 엔지니어에게 유용하지만 사용자는 쿼리 가능한 오류가 필요합니다. 오류를 구조화해 임포트 실행에 연결해 저장하세요:
이 구조로 "이번 주 상위 3개 오류 유형" 같은 집계를 빠르게 수행할 수 있습니다.
실행 상세 페이지에 열/유형/심각도별 필터와 검색 상자(e.g., “email”)를 제공하세요. 그리고 원본 행과 error_columns, error_message 같은 추가 컬럼을 포함한 다운로드 가능한 CSV 오류 리포트를 제공하고, “날짜 형식을 YYYY-MM-DD로 수정하세요” 같은 명확한 안내를 포함하세요.
**드라이 런(dry run)**은 같은 매핑과 규칙으로 모든 것을 검증하지만 데이터는 쓰지 않습니다. 첫 임포트에 이상적이며 사용자가 커밋 전에 안전하게 반복할 수 있게 합니다.
행이 DB에 들어가면 임포트는 "완료"로 보이지만 장기적인 비용은 종종 엉킨 업데이트, 중복, 불분명한 변경 이력입니다. 임포트가 예측 가능하고 되돌릴 수 있으며 설명 가능하도록 데이터 모델을 설계하세요.
임포트된 행이 도메인 모델에 어떻게 매핑되는지 정의하세요. 각 엔티티에 대해 임포트가:
이 결정은 임포트 설정 UI에 명시하고 임포트 작업에 저장해 반복 가능하게 하세요.
"생성 또는 업데이트"를 지원하면 안정적인 업서트 키가 필요합니다. 일반적인 선택:
external_id(다른 시스템에서 올 때 가장 좋음)account_id + sku)충돌 처리 규칙 정의: 두 행이 같은 키를 공유하면 어떻게 할지, 키가 여러 레코드와 일치하면 어떻게 할지? 좋은 기본값은 “행 실패(명확한 오류)” 또는 “마지막 행 우선”입니다. 의도적으로 선택하세요.
일관성을 보호하는 부분에는 트랜잭션을 사용하세요(예: 부모와 자식 생성). 그러나 200k 행 파일을 하나의 거대한 트랜잭션으로 처리하면 테이블을 잠그고 재시도를 어렵게 만듭니다. 청크 단위 쓰기(예: 500–2,000행)와 멱등 업서트를 선호하세요.
임포트는 관계를 존중해야 합니다: 행이 부모 레코드를 참조하면(예: Company) 그 부모가 존재해야 하거나 통제된 생성 단계에서 만들어야 합니다. "부모 누락" 오류로 조기에 실패시키면 반쯤 연결된 데이터를 방지합니다.
임포트 유발 변경에 대해 감사 로그를 남기세요: 누가 임포트를 시작했는지, 언제 했는지, 원본 파일, 레코드별 변경 요약(이전 vs 신규). 이는 지원을 쉽게 하고 되돌리기를 단순화합니다.
내보내기는 간단해 보이지만 고객이 마감 직전에 "모두"를 내려받으려 하면 문제됩니다. 확장 가능한 내보내기 시스템은 큰 데이터셋을 처리하면서 앱을 느리게 하지 않고 일관된 파일을 생성해야 합니다.
세 가지 옵션으로 시작하세요:
증분 내보내기는 통합에 특히 유용하며 반복적인 전체 덤프보다 부하를 줄입니다.
어떤 형식을 선택하든 일관된 헤더와 안정적인 열 순서를 유지해 다운스트림이 깨지지 않게 하세요.
큰 내보내기는 모든 행을 메모리에 올리지 마세요. 스트리밍/페이지네이션으로 가져오는 즉시 행을 쓰면 타임아웃을 피하고 웹 앱 반응성을 유지할 수 있습니다.
대용량 데이터는 백그라운드 작업으로 파일을 생성하고 사용자가 준비되면 알림을 주는 패턴이 좋습니다:
이 패턴은 임포트의 백그라운드 작업 패턴 및 오류 리포트/다운로드 아티팩트 패턴과 잘 맞습니다.
내보내기는 감사 대상이 되는 경우가 많습니다. 항상 포함하세요:
이 디테일은 혼란을 줄이고 신뢰성 있는 대조 작업을 돕습니다.
임포트/익스포트는 많은 데이터를 이동시키는 강력한 기능이므로 보안 버그가 생기기 쉬운 곳입니다: 하나의 과도한 권한, 유효기간이 긴 파일 URL, 또는 개인 데이터가 포함된 로그 한 줄로 문제가 발생할 수 있습니다.
앱 전반에서 사용하는 인증 방식을 재사용하세요—임포트 전용으로 별도 인증 경로를 만들지 마세요.
브라우저 기반 사용자에는 세션 기반 인증(선택적으로 SSO/SAML)을, 자동화된 가져오기에는 API 키나 OAuth 토큰(명확한 스코프와 회전)을 고려하세요.
실용 규칙: 임포트 UI와 임포트 API는 서로 다른 대상이라도 동일한 권한 검사를 적용해야 합니다.
임포트/내보내기 기능을 명시적 권한으로 다루세요. 일반 권한:
"파일 다운로드" 권한을 별도로 두세요. 많은 민감한 유출은 누군가 실행 기록을 볼 수 있으면 자동으로 원본을 다운로드할 수 있다고 가정하며 발생합니다.
또한 행 수준 또는 테넌트 수준 경계를 고려하세요: 사용자는 자신이 속한 계정/워크스페이스의 데이터만 임포트/내보내기 가능해야 합니다.
저장된 파일(업로드, 생성된 오류 CSV, 내보내기 아카이브)은 비공개 오브젝트 스토리지와 단기간 유효한 다운로드 링크를 사용하세요. 규정 요구가 있으면 저장 시 암호화도 적용하세요. 원본 업로드, 처리 중인 임시 파일, 생성된 리포트 모두 동일한 규칙을 따르도록 하세요.
로그에 주의하세요. 이메일, 전화번호, 식별자, 주소 같은 민감 필드는 마스킹하고 원시 행을 기본으로 로그에 남기지 마세요. 디버깅이 필요하면 관리자 전용 설정 뒤에 “상세 행 로깅”을 두고 만료되도록 하세요.
모든 업로드를 신뢰할 수 없는 입력으로 처리하세요:
또한 구조를 초기에 검증해 백그라운드 작업으로 보내기 전에 명백히 비정상인 파일은 거부하고 사용자에게 명확한 이유를 알려주세요.
조사가 필요할 때 확인하고 싶은 이벤트(누가 파일 업로드했는지, 누가 임포트를 시작했는지, 누가 내보내기를 다운로드했는지, 권한 변경, 실패한 접근 시도)를 기록하세요.
감사 항목에는 행 수준 민감 데이터를 저장하지 않고도 조사에 필요한 정보(행위자, 타임스탬프, 워크스페이스/테넌트, 대상 객체 ID)를 포함해야 합니다. 이는 임포트 이력 UI와 연계되어 “누가 언제 무엇을 바꿨나?”에 빠르게 답하는 데 도움됩니다.
임포트/익스포트가 고객 데이터를 건드리면 언젠가 엣지 케이스가 나옵니다: 이상한 인코딩, 병합된 셀, 절반만 채워진 행, 중복, "어제는 됐는데 오늘은 안 돼요" 같은 미스터리. 운영성은 이런 이슈들이 지원 악몽으로 이어지지 않게 합니다.
파싱, 매핑, 검증에서 실패하기 쉬운 부분 위주로 테스트를 구성하세요:
그다음 전체 흐름(upload → background processing → report generation)에 대한 적어도 하나의 엔드투엔드 테스트를 추가하여 UI, API, 워커 간의 계약 불일치를 잡으세요.
사용자 영향 신호를 추적하세요:
예외마다 알림을 보내지 말고 증상(실패 증가, 큐 증가)에 기반한 알림을 구성하세요.
내부 팀에 작업 재실행, 멈춘 임포트 취소, 실패 상세(입력 파일 메타데이터, 사용된 매핑, 오류 요약, 로그/트레이스 링크)를 확인할 수 있는 작은 관리자 화면을 제공하세요.
사용자에게는 인라인 팁, 다운로드 가능한 샘플 템플릿, 오류 화면의 명확한 다음 단계 링크로 예방 가능한 오류를 줄이세요. 중앙 도움말 페이지를 유지하고 임포트 UI에서(/docs) 연결하세요.
임포트/익스포트 시스템을 배포하는 것은 단순히 코드를 푸시하는 일이 아닙니다. 안전한 기본값과 복구 경로, 진화할 여지를 둔 제품 기능으로 다루세요.
개발/스테이징/프로덕션 환경을 분리하고 업로드 파일과 생성 내보내기를 위한 별도 오브젝트 스토리지 버킷(또는 프리픽스)을 사용하세요. 환경별로 서로 다른 암호화 키와 자격증명을 사용하고 워커가 올바른 큐를 가리키는지 확인하세요.
스테이징은 프로덕션을 미러링해야 합니다: 동일한 작업 동시성, 타임아웃, 파일 크기 제한. 여기서 성능과 권한을 실제 데이터 위험 없이 검증하세요.
임포트는 고객이 오래된 스프레드시트를 유지하기 때문에 "영원히" 살아있는 경향이 있습니다. 데이터베이스 마이그레이션을 일반적으로 사용하되, 임포트 템플릿(매핑 프리셋)을 버전 관리하세요. 스키마 변경이 지난 분기 CSV를 깨지 않도록 호환성 코드를 유지하고, 구 버전은 일정 기간 이후에 폐기하세요.
실용적 방법: 각 임포트 실행에 template_version을 저장하고 호환성 코드를 유지하다가 안전하게 디프리케이트하세요.
기능 플래그로 안전하게 변경을 배포하세요:
플래그를 통해 내부 사용자나 소규모 고객 코호트로 먼저 테스트한 후 전체 활성화하세요.
지원팀이 임포트 실패를 조사하는 방법을 문서화하세요: 템플릿 버전 확인, 첫 실패 행 검토, 스토리지 접근 확인, 워커 로그 검사 같은 체크리스트를 내부 런북에 두고 관리자 UI(/admin/imports)에서 링크하세요.
핵심 워크플로가 안정되면 업로드 이상의 기능으로 확장하세요:
이러한 확장은 수동 작업을 줄이고 고객의 기존 프로세스에 더 자연스럽게 녹아들게 합니다.
제품 기능으로서 첫 사용 가능한 버전의 시간을 단축하고 싶다면 Koder.ai를 사용해 임포트 위자드, 작업 상태 페이지, 이력 화면을 프로토타이핑한 뒤 소스 코드를 추출해 기존 엔지니어링 워크플로로 이어가는 방법을 고려하세요. 이 접근은 초기에 맞춤형 UI 완성도보다는 신뢰성과 반복 속도를 우선할 때 특히 실용적입니다.
먼저 누가 데이터를 가져오고 내보내는지(관리자, 운영자, 고객)와 주요 사용 사례(온보딩 대량 적재, 주기적 동기화, 일회성 내보내기)를 명확히 하세요.
초기(첫날) 제약 조건을 문서화하세요:
이 결정들은 아키텍처, UI 복잡도, 지원 부담을 좌우합니다.
동기식 처리는 파일이 작고 검증과 쓰기가 웹 요청 타임아웃 내에 안정적으로 끝나는 경우 유용합니다.
다음과 같은 경우 백그라운드 작업을 사용하세요:
일반적인 패턴: 업로드 → 큐에 등록 → 실행 상태/진행 표시 → 완료 시 알림.
둘 다 저장하세요. 용도는 다릅니다:
원본 업로드는 불변으로 보관하고 임포트 실행 기록과 연결하세요.
커밋하기 전에 샘플을 보여주는 프리뷰 단계를 만드세요(예: 첫 20–100행).
일반 변동성을 처리하세요:
읽을 수 없는 파일이나 필수 열 누락 같은 진짜 차단 조건은 빠르게 실패시키되, 매핑이나 변환으로 해결 가능한 데이터는 거부하지 마세요.
단순한 매핑 테이블: 원본 열 → 대상 필드를 사용하세요.
모범 사례:
전체 파일을 처리하기 전에 매핑된 프리뷰를 보여줘 사용자가 실수를 잡을 수 있게 하세요.
사용자가 결과를 예측할 수 있도록 가벼운 변환을 우선 지원하세요:
ACTIVE)프리뷰에 "원본 → 변환 결과"를 표시하고 변환이 적용되지 않을 때 경고를 띄우세요.
검증을 세 계층으로 분리하세요:
UI에서는 행/열 참조가 포함된 실무적인 메시지(예: “Row 42, Start Date: must be YYYY-MM-DD”)를 제공하세요.
임포트를 전체 실패시키는 와 유효한 행만 수락하는 를 상황에 따라 선택 가능하게 하는 것을 고려하세요.
처리를 재시도해도 문제가 발생하지 않도록 만드세요:
import_id + row_number 또는 행 해시)external_id)로 업서트를 선호작업 동시 실행을 워크스페이스별로 제한해 DB와 다른 사용자 보호하세요.
파일 제출 즉시 임포트 실행(import run) 레코드를 생성하고, 구조화된 쿼리 가능 오류를 저장하세요(로그만으로는 부족합니다).
유용한 기능:
이렇게 하면 동일한 파일을 계속 재시도하는 반복 행동과 지원 문의를 줄일 수 있습니다.
임포트로 데이터가 DB에 들어간 뒤의 문제(중복, 모호한 변경, 변경 이력 부재)를 예방하려면 데이터 모델을 신중히 설계하세요.
대량 내보내기는 앱 성능에 영향을 주지 않도록 설계해야 합니다.
임포트/익스포트는 많은 데이터를 빠르게 이동시키므로 보안에 특히 신경 써야 합니다.