Q. UserController에서 userService 주입하는 이유? @atuowired를 안쓰는 이유?
- 가장 큰 이유는 불변성 때문이다. 절대 바뀌지 않도록 보장하기 위해 생성자 주입을 사용.
- userService가 절대 다른 객체로 바뀌지 않고 항상 같은 userService를 사용
| 비교 항목 | @Autowired(필드 주입) | 생성자 주입 |
| 불변성 | final 불가 → 런타임 변경 가능 | final 가능 → 불변 보장 |
| 순환참조 감지 | 런타임 시 늦게 발견 | 빈 생성 시점에 바로 감지 |
| 의존성 명확성 | 클래스만 봐서는 어떤 의존성이 필요한지 숨겨짐 | 생성자 파라미터로 명확하게 보임 |
| 선택적 의존성 | 가능 (@Autowired(required=false)) | 선택적 주입엔 적합하지 않음 |
| 코드 간결성 | 가장 짧음 | 생성자 필요(조금 더 코드 많음) |
| Spring 권장 여부 | X (테스트, 유지보수 불리) | ✅ 스프링 공식 권장 방식 |
Q. @Controller + Thymeleaf @RestController + Thymeleaf는 왜 잘 안 쓰나?
✅ 1. @Controller + Thymeleaf
- @controller는 view를 반환
✅ 2. @RestController + Thymeleaf
- @RestController는 @Controller + @ResponseBody 합친것
- 리턴 값을 뷰 이름으로 해석하지 않고 그냥 HTTP 응답 바디로 보
============================================================================================
리액트를 한 프로젝트에서 사용하기 위해 우선 리액트 프로젝트를 생성했다. (npx create-react-app frontend)
그 후 리액트가 잘 연결됐는지 확인은 frontend 위치가서 npm start를 하고 실행되면 잘 연결된거다.
근데 그래도 백엔드의 데이터가 계속 배열로 나오면서 에러가 뜨길래 확인해보니 CORS 차단때문이였다.
CORS (Cross-Origin Resource Sharing)
- 브라우저 보안 정책 때문에 다른 도메인/포트에서 오는 요청을 기본적으로 막음
- React 개발 서버 → http://localhost:3000
- Spring 백엔드 서버 → http://localhost:8080
Spring에서 CORS 허용하려면 WebMvcConfigurer를 구현해서 설정해야해서 설정을 해줬다.
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 모든 API
.allowedOrigins("http://localhost:3000") // React 프론트 주소 허용
.allowedMethods("GET", "POST", "PUT", "DELETE");
}
'Back-End > SpringBoot' 카테고리의 다른 글
| SSR과 CSR (3) | 2025.07.25 |
|---|---|
| JAVA 빌드 툴 - Maven과 Gradle (1) | 2025.07.25 |
| 기본 crud 만들기 (0) | 2025.07.20 |
| 김영한 스프링 기본 이론 정리1 (0) | 2025.03.18 |
| SQL Injection (0) | 2023.08.27 |