/admin/** → /api/** → /** 와 같이 특정 경로부터 일반 경로로 순서 설정해야 한다.http.authorizeHttpRequests(auth -> auth
.requestMatchers("/admin/**").hasRole("ADMIN") // 1️⃣ 좁은 범위 (우선 적용)
.requestMatchers("/api/**").hasAnyRole("USER", "ADMIN")
.requestMatchers("/**").permitAll() // 2️⃣ 넓은 범위 (마지막에 적용)
);
💡 Tip:
- 가장 구체적인 경로부터 작성해야 한다.
/**처럼 모든 요청을 허용하는 설정은 항상 맨 마지막에 둬야 한다.- 그렇지 않으면 상위 경로가 모두 허용되어 보안 설정이 무효화될 수 있다.
...)// 1️⃣ 객체 병합
const user = { name: "홍길동", age: 25 };
const updatedUser = { ...user, age: 26 }; // age만 변경
console.log(updatedUser);
// 출력: { name: "홍길동", age: 26 }
// 2️⃣ 배열 병합
const arr1 = [1, 2, 3];
const arr2 = [4, 5];
const merged = [...arr1, ...arr2];
console.log(merged);
// 출력: [1, 2, 3, 4, 5]
// 3️⃣ props 전달 시 활용
<MyComponent {...props} />
🧠 스프레드 연산자 vs 구조분해할당
| 구분 | 설명 | 예시 |
|---|---|---|
| 스프레드 연산자 | 데이터를 펼쳐서 복사 | { ...object }, [...array] |
| 구조분해할당 | 데이터를 꺼내서 변수에 저장 | const { name } = object; |