기본 콘텐츠로 건너뛰기

React props와 state 차이, 언제 무엇을 써야 할까

React props와 state 차이, 언제 무엇을 써야 할까 빠른 답 props는 부모가 자식에게 내려주는 읽기 전용 데이터다. state는 컴포넌트가 직접 관리하며 바뀌면 화면이 다시 렌더링된다. 자식이 값을 바꿔야 하면 props를 수정하지 말고 부모의 state 변경 함수를 전달한다. 입력값, 로딩 여부, 토글 같은 변하는 UI 데이터는 대부분 state로 관리한다. 목차 props와 state가 처음 React에서 가장 헷갈리는 이유 한눈에 비교 props를 써야 하는 상황 state를 써야 하는 상황 예제를 위한 최소 구성 실전 코드로 보기: 부모의 state를 자식에 props로 전달하기 자주 하는 실수와 예외 케이스 실무 선택 기준: 어디에 둬야 하는가 props와 state가 처음 React에서 가장 헷갈리는 이유 React를 처음 배우면 props 와 state 가 비슷해 보입니다. 둘 다 JSX 안에서 값을 출력할 때 사용하고, 둘 다 화면 결과에 영향을 주기 때문입니다. 그래서 “둘 다 데이터면 그냥 아무 데나 넣어도 되는 것 아닌가?”라는 생각이 들기 쉽습니다. 하지만 둘의 차이는 문법보다 소유권 에 있습니다. 어떤 값을 부모가 가지고 자식에게 전달 하면 props 이고, 어떤 값을 컴포넌트가 자기 내부에서 직접 관리 하면 state 입니다. 이 기준만 분명히 잡히면, 어디에 어떤 값을 둬야 하는지 대부분 정리됩니다. 초보자가 가장 자주 막히는 지점도 여기입니다. 자식 컴포넌트에서 버튼을 눌렀는데 부모가 넘겨준 값을 바꾸고 싶을 때, props 를 직접 수정하려고 시도합니다. 하지만 React는 단방향 데이터 흐름을 전제로 설계되어 있어서, 값의 변경은 값을 소유한 쪽에서 일어나야 합니다. 자식은 값을 바꾸는 대신, “이 값을 바꿔 달라”는 요청을 부모에게 보내는 구조를 사용합니다. 한눈에 비교 비교형으로 정리하면 props 와 state 의 역할 차이가 더 빨리 보입니다. 소유자: props 는 부모가 소유...

자바스크립트 이벤트 루프, 실행 순서가 헷갈릴 때 바로 이해하는 방법

자바스크립트 이벤트 루프, 실행 순서가 헷갈릴 때 바로 이해하는 방법 목차 이벤트 루프가 필요한 이유 콜 스택, 태스크 큐, 마이크로태스크 큐를 분리해서 보기 실제로 어떤 순서로 실행되는가 실험 환경은 이렇게 준비하면 충분합니다 브라우저에서 실행 순서를 직접 확인해보기 Node.js에서는 무엇이 다를까 실무에서 자주 틀리는 포인트 실행 순서 버그를 잡는 가장 현실적인 방법 빠른 답 이벤트 루프는 콜 스택이 비었을 때 대기 중인 작업을 실행 순서에 맞게 넘겨주는 구조입니다. Promise.then, queueMicrotask는 보통 setTimeout보다 먼저 실행되며, 이유는 마이크로태스크가 더 높은 우선순위를 가지기 때문입니다. setTimeout(fn, 0)은 즉시 실행이 아니라 현재 동기 코드가 끝난 뒤 다음 턴으로 미루는 동작에 가깝습니다. 실행 순서 버그를 잡을 때는 콜 스택, 마이크로태스크, 매크로태스크를 분리해서 로그로 확인해야 합니다. 초안을 발행용 글로 다시 정리하고 있습니다. 빠른 답 을 짧게 다듬고, 브라우저·Node.js에서 바로 실행해 볼 수 있는 설정과 예제를 중심으로 본문을 재구성하겠습니다.# 자바스크립트 이벤트 루프, 실행 순서가 헷갈릴 때 바로 이해하는 방법 빠른 답 이벤트 루프는 콜 스택이 비는 시점마다 대기 중인 작업을 확인하고, 우선순위에 맞게 다시 실행 흐름에 올리는 런타임 메커니즘입니다. Promise.then , queueMicrotask , await 이후 코드는 보통 setTimeout(..., 0) 보다 먼저 실행됩니다. 이들은 마이크로태스크로 처리되기 때문입니다. setTimeout(fn, 0) 은 즉시 실행이 아니라 현재 동기 코드와 현재 턴의 마이크로태스크가 끝난 뒤 다음 태스크로 넘기는 예약에 가깝습니다. 실행 순서가 꼬일 때는 코드를 동기 , 마이크로태스크 , 매크로태스크 로 나눠 로그를 찍으면 원인을 가장 빨리 찾을 수 있습니다. 이벤트 루프가 필요한 이유 자바스크립트는 ...

스프링 MVC에서 @RequestBody와 @ModelAttribute를 어떻게 구분해 써야 할까

스프링 MVC에서 @RequestBody와 @ModelAttribute를 어떻게 구분해 써야 할까 목차 왜 둘이 자주 헷갈릴까 요청은 어디서 읽히는가 내부 동작은 어떻게 다를까 @RequestBody 가 맞는 상황과 코드 예시 @ModelAttribute 가 맞는 상황과 코드 예시 설정까지 함께 봐야 하는 이유 curl 로 보면 차이가 더 분명해진다 검증과 예외 처리에서 주의할 점 실무에서는 어떤 기준으로 고르면 될까 빠른 답 JSON 본문을 DTO로 받는다면 대부분 @RequestBody를 사용합니다. 쿼리스트링, 폼 전송, multipart/form-data를 객체로 묶을 때는 @ModelAttribute가 더 자연스럽습니다. 둘의 차이는 문법보다 Content-Type, 바인딩 대상, 내부 변환기 흐름에서 갈립니다. 파일 업로드와 일반 필드를 함께 받는 요청은 @ModelAttribute 쪽이 실무에서 더 자주 쓰입니다. 빠른 답 application/json 본문을 DTO로 받는 요청이라면 보통 @RequestBody 를 사용합니다. 쿼리스트링, application/x-www-form-urlencoded , multipart/form-data 를 객체로 묶을 때는 @ModelAttribute 가 더 자연스럽습니다. 둘의 차이는 문법보다 데이터를 어디서 읽는지, 그리고 어떤 바인딩 경로를 타는지에 있습니다. 파일 업로드가 섞인 요청은 대부분 @ModelAttribute 로 처리하고, JSON 파트가 따로 필요할 때만 @RequestPart 를 함께 검토합니다. 왜 둘이 자주 헷갈릴까 @RequestBody 와 @ModelAttribute 는 둘 다 컨트롤러에서 "요청 데이터를 DTO로 받는다"는 점만 보면 비슷해 보입니다. 그래서 처음에는 애너테이션 취향 차이처럼 느껴지기 쉽습니다. 하지만 실제로는 출발점이 완전히 다릅니다. @RequestBody 는 HTTP 요청의 body 전체를 읽어서 객체로 변환합...

스프링에서 `@ControllerAdvice`를 언제 쓰고 어떻게 구성해야 할까

스프링에서 @ControllerAdvice 를 언제 쓰고 어떻게 구성해야 할까 목차 왜 @ControllerAdvice 가 필요한가 @ControllerAdvice 와 @RestControllerAdvice 의 차이 스프링 MVC에서 전역 처리 로직은 어떻게 적용될까 적용 범위는 반드시 좁혀서 시작하는 것이 좋다 실전 예시: 공통 에러 응답과 전역 예외 처리기 @InitBinder 와 @ModelAttribute 는 언제 쓸까 에러 응답 설계에서 자주 놓치는 기준 기대대로 동작하지 않을 때 확인할 것 운영 가능한 구조로 정리하는 방법 빠른 답 여러 컨트롤러에서 반복되는 예외 처리 로직은 @ControllerAdvice로 모으는 것이 기본입니다. JSON 에러 응답이 목적이라면 보통 @RestControllerAdvice를 먼저 검토하면 됩니다. 적용 범위는 패키지나 애너테이션 기준으로 좁힐 수 있어 전역 남용을 막을 수 있습니다. 핸들러가 기대대로 동작하지 않으면 예외 타입, 우선순위, 응답 본문 생성 방식을 먼저 확인해야 합니다. 빠른 답 여러 컨트롤러에서 반복되는 예외 처리, 바인딩, 공통 모델 설정은 @ControllerAdvice 로 모으는 것이 기본입니다. REST API에서 JSON 에러 응답을 일관되게 내려야 한다면 보통 @RestControllerAdvice 를 먼저 선택합니다. 적용 범위는 basePackages , assignableTypes , annotations 로 좁혀야 전역 남용과 예상치 못한 충돌을 줄일 수 있습니다. 동작이 기대와 다르면 예외가 발생한 위치, 예외 타입 매칭, 여러 어드바이스의 우선순위와 응답 직렬화 방식을 먼저 확인해야 합니다. 컨트롤러 코드가 늘어나기 시작하면 비슷한 로직이 반복됩니다. 입력 검증 실패를 400으로 바꾸는 코드, 특정 비즈니스 예외를 404나 409로 바꾸는 코드, 날짜 문자열을 공통 형식으로 파싱하는 코드가 대표적입니다. 처음에는 각 컨트롤러에서 직접 처리해도 큰 문...