- spring Framework의 핵심 개념
Spring Framework응 객체의 생성과 관리(IoC), 의존성 주입(DI), 트랜잭션 관리, AOP, MVC웹 개발, 데이터 접근 등을 지원하는 자바 기반의 애플리케이션 프레임워크이다.
- IoC와 DI의 차이점
IoD는 객체의 생성 및 생명주기 관리를 개발자가 아닌 Spring Container가 담당하는 것
DI는 IoC의 한 형태로, 객체 간의 의존성을 Container가 자동으로 주입해 주는 방식
- Spring Bean이란?, Bean 생명주기
Spring Bean : Spring IoC 컨테이너에서 관리되는 객체를 의미
Bean의 생명 주기
1. 객체 생성 (Bean 등록)
2. 의존성 주입
3. 초기화
4. 사용
5. 소멸
- Spring Boot와 Spring Framework의 차이점
Spring Boot는 Spring 설정을 자동화하여 빠르게 개발할 수 있도록 도와주는 프레임 워크이다.
차이점
1. 내장 Tomcat 지원 (was)
2. 의존성 관리
3. 자동 설정
- Spring Boot의 AutoConfiguration 원리
Spring Boot는 클래스패스를 스캔하고, 필요한 Bean을 자동으로 등록해준다.
- Spring Boot에서 @SpringBootApplication 어노테이션
3개의 어노테이션을 포함하는 메타 어노테이션이다.
- @SpringBootConfiguration -> 설정 파일 역할
- @EnableAutoConfiguration -> 자동 설정 활성화
- @ComponentSacn -> 패키지 내 Bean 자동 스캔
- Spring MVC의 동작
- 사용자가 요청을 보낸다.
- DispatcherServlet이 요청을 받는다.
- 적절한 Controller를 찾는다 (@Controller)
- Controller가 Service를 호출 -> Service가 Repository 호출 -> DB 접근
- 처리된 데이터를 Model에 담아 View 반환 (ModelAndView)
- ViewResolver가 알맞은 뷰를 찾는다.
- 클라이언트에게 응답 반환
- DispatcherServlet의 역할
Spring MVC의 프론트 컨트롤러로 들어오는 모든 요ㅕ청을 받고 처리한다.
요청을 받아 적절한 컨트롤러로 전달하고, 응답을 다시 반환한다.
- @Controller와 @RestController의 차이점
@Controller는 View를 반환하고
@RestController는 JSON 데이터를 반환한다.
@RestController = @Controller + @ResponseBody
- Spring Data JPA의 장점, 동작 원리
SQL을 직접 작성할 필요가 없다.(메서드명만으로 쿼리 실행 가능)
동작 원리
1. Respository 인터페이스 생성(JpaRepository)
2. Spring Data JPA가 구현체를 자동 생성
3. 실행 시 EntityManager가 동작하여 SQL 실행
- N+1 문제
N + 1 : 1개의 쿼리로 N개의 데이터를 가져왔지만, 각 데이터마다 추가 쿼리가 발생하는 문제
해결 방법
- @EntityGraph
- @Fetch(FetchType.LAZY)
- JOIN FETCH
- Spring Security의 인증과 인가의 차이점
인증(Authentication) : 사용자 신원을 확인하는 과정(로그인)
인가(Authorization) : 권한을 검증하는 과정
- JWT를 이용한 인증방식 설명
- 사용자가 로그인 하면 JWT 토큰을 발급한다.
- 클라이언트는 요청 시 JWT를 포함해서 보낸다.
- 서버는 JWT를 검증하고 사용자 정보를 확인한다.
- CSRF 보호란 무엇인가
CSRF(Corss-Site Request Forgery) : 악의적인 요청을 사용하여 사용자를 속이는 공격
방어
.csrf().disable()로 비활성화가 가능하다.
- AOP가 무엇이며 어떤 경우에 사용
AOP(Aspect-Oriented Programming) : 공통 관심사를 분리하여 관리하는 방식
- 로깅
- 트랜잭션 관리
- 보안 처리
- Spring 에서 AOP를 구현하는 방법
- 의존성 추가(spring-boot-starter-aop)
- Aspect 클래스 작성 : @Aspect 어노테이션을 사용해서 AOP 클래스를 정의한다.
- Aspect 적용 : @Before, @After, @Around 등의 어노테이션을 사용하여 적용한다.
- @Transactional 어노테이션을 사용할 때 주의할 점
- 메서드가 public 이어야 적용된다.
- 프록시 기반이라 같은 클래스 내에서 호출하면 적용이 안된다.
- RuntimeException 발생 시 롤백된다.