1. @Transactional
Spring에서 @Transactional 애너테이션의 역할을 설명해 주세요.
트랜잭션
- 더이상 나눌 수 없는 논리적인 작업 단위
- 데이터베이스에서는 상태를 변경시키기 위해 수행하는 작업 단위
@Transactional
- 데이터베이스 작업의 원자성 보장, commit이나 rollback을 통해 작업의 일관성 유지
- 선언적 데이터베이스 트랜잭션
- 메서드 레벨, 클래스 레벨에서 사용 가능
- 해당 메서드 또는 클래스의 모든 public 메서드에 트랜잭션 사용
동작방식
- 메서드에 @Transactional을 붙이면 AOP 방식으로 프록시 객체를 생성하여 트랜잭션 처리
- 메서드 호출 시 트랜잭션 시작
- 정상적으로 메서드가 끝나면 commit, 예외 발생시 rollback
사용할 때 고려해야 할 사항
- 적용하는 메서드는 반드시 public으로 선언
- 프록시 객체로 외부에서 접근 가능한 인터페이스를 제공해야 하기 때문
- 다른 AOP 기능과의 충돌 고려
- @Order를 이용해 적용 순서를 정하거나 적용 범위를 조정하여 해결
- Service 계층에서만 사용
@Transactional의 역할은 무엇인가요?
@Transactional은 Spring에서 제공하는 어노테이션으로, 트랜잭션을 선언적으로 관리할 수 있도록 도와줍니다. 데이터베이스 작업의 원자성과 일관성을 보장하며, 작업 중 예외가 발생하면 자동으로 롤백을 수행합니다.
@Transactional이 제대로 작동하지 않을 수 있는 경우는 언제인가요?
@Transactional은 public 메서드에만 적용되기 때문에 메서드가 public이 아니면 작동하지 않습니다. 또 클래스가 아닌 인터페이스에 선언될 경우 프록시객체를 생성하지 못해 작동하지 않습니다.
@Transactional과 AOP의 관계를 설명해주세요
@Transactional은 AOP를 기반으로 동작합니다. @Transactional이 선언된 메서드를 호출할 때 프록시 객체를 생성하고, 메서드 실행 전후로 트랜잭션을 시작하고 종료하는 로직을 추가합니다.
2. Spring Security
Spring Security의 기본 개념을 설명해 주세요
Spring Security
- Spring Framework의 하위 프로젝트
- 어플리케이션에 인증과 권한을 추가하기 위한 보안 프레임워크
주요 구성 요소
- Authentication 인증 : 사용자가 누구인지 확인하는 과정
- Authorization 인가 : 인증된 사용자가 특정 리소스나 작업에 접근할 권한이 있는지 확인하는 과정
- Filter Chain : 요청이 서버로 들어올 때 여러 보안 필터를 거쳐 인증 인가 수행
- SecurityContextHolder : 현재 인증된 사용자 정보 저장
Spring Security란 무엇인가요?
Spring Security는 애플리케이션의 인증과 권한 관리를 제공하는 보안 프레임워크입니다. 주로 웹 어플리케이션에서 요청을 가로채 보안을 처리하며 필터 체인을 통해 커스터마이징 할 수 있습니다.
Spring Security의 동작 과정에 대해 설명해주세요
Spring Security는 기본적으로 Filter Chain을 기반으로 동작합니다. 먼저 요청이 들어오면 필터체인이 요청을 가로챕니다. 인증을 거친 후 인증에 성공하면 Security context Holder에 인증 정보를 저장합니다. 이후 요청을 처리하고 권한 검사를 수행합니다.
필터 체인의 순서를 변경하려면 어떻게 해야하나요?
커스텀 필터를 구현하고 @Bean으로 등록한 뒤 순서를 지정할 수 있습니다.
Spring Security에서 JWT를 사용하는 이유와 동작 방식을 설명해주세요.
JWT는 상태를 저장하지 않는 인증방식으로 서버에서 인증정보를 유지하지 않아 확장성과 성능이 뛰어납니다. 먼저 클라이언트가 인증 정보를 보내면 서버가 이를 검증하고 JWT를 발급합니다. 클라이언트는 이후 요청마다 JWT를 헤더에 담아 전송합니다. 서버는 JWT를 검증하여 사용자를 식별합니다.
JWT의 단점은 무엇이며 어떻게 보완할 수 있을까요?
JWT는 토큰이 유효 기간 동안 계속 사용되므로 유출될 경우 심각한 보안 문제가 발생할 수 있습니다. 이를 보완하기 위해서는 짧은 유효기간을 설정하고 리프레시 토큰을 사용하는 방법이 있습니다.
3. Auto configuration
Spring Boot의 자동 설정(Auto Configuratino)기능이 무엇이며, 이를 어떻게 활용할 수 있는지 설명해주세요
- 개발자가 명시적으로 설정하지 않아도 Spring Boot가 애플리케이션의 실행 환경을 분석하여 적절한 Bean과 설정을 자동으로 구성하는 메커니즘
AutoConfiguration과
@Configuration
의 차이는 무엇인가요?@Configuration은 개발자가 명시적으로 작성하여 Bean을 등록하는 클래스입니다. Authconfiguration은 SpringBoot가 제공하며 조건부 로직을 통해 Bean을 자동으로 등록합니다.
@Configuration
: 세부적인 Bean 설정이 필요한 경우 사용.- AutoConfiguration: 기본 설정으로 충분하거나, 빠른 개발이 필요한 경우 사용.
4. Bean의 라이프 사이클
Spring에서 Bean의 라이프사이클을 설명하고, 이를 관리하는 방법을 이야기해주세요
Bean Spring 컨테이너에서 관리되는 객체, 특정 라이프사이클에 따라 생성되고 소멸
라이프사이클 단계
- Bean 생성
- @Component, @Bean, XML 설정 등으로 정의된 Bean이 컨테이너에 의해 생성
- 의존성 주입
- 초기화 단계
- 사용 단계
- 소멸 단계
Spring Bean의 라이프사이클을 설명해보세요.
Spring Bean은 컨테이너에 의해 생성, 의존성 주입, 초기화, 사용, 소멸의 단계를 거칩니다.
Bean의 스코프에 따라 라이프사이클이 어떻게 달라질 수 있나요?
- Singleton 스코프: 애플리케이션 컨텍스트 시작 시 생성되고 종료 시 소멸됩니다.
- Prototype 스코프: 요청마다 새로 생성되며, 컨테이너는 초기화 단계까지만 관리하고 소멸 작업은 개발자가 직접 처리해야 합니다.
- Request/Session 스코프: 웹 애플리케이션에서 요청이나 세션의 생명주기에 따라 관리됩니다.
Spring에서 Bean의 라이프사이클을 설명하고, 이를 관리하는 방법을 이야기해주세요
Spring의 Bean 라이프사이클은 Bean이 생성되고, 초기화되어 사용되다가 컨테이너에서 소멸되기까지의 과정을 말합니다. Spring 컨테이너는 이 라이프사이클의 모든 단계를 관리하며, 개발자는 특정 단계에서 커스터마이징하여 필요한 작업을 수행할 수 있습니다.
5. REST 컨트롤러와 일반 컨트롤러
Spring에서 REST 컨트롤러와 일반 컨트롤러의 차이점에 대해 설명해주세요
RestController
- Controller와 ResponseBody를 결합한 어노테이션
- 주로 JSON, XML 등 데이터를 직접 반환하는 RESTful 웹서비스를 구현할 때 사용
Controller
- 웹 어플리케이션에서 HTML 페이지를 반환하거나 View를 렌더링하는데 사용
- 템플릿 엔진(Thymeleaf, JSP)을 통해 렌더링
@RestController
와@Controller
의 차이를 설명해보세요.
@RestController
는 RESTful API를 개발할 때 사용되며, JSON과 같은 데이터를 직접 반환합니다.
@Controller
는 View 이름을 반환하며, 템플릿 엔진을 통해 HTML 페이지를 렌더링합니다.
REST 컨트롤러는 기본적으로 모든 메소드가@ResponseBody
를 포함한 동작을 수행합니다.
@ResponseBody
어노테이션은 무엇이며, 언제 사용하는 것이 적합한가요?
@ResponseBody
는 메소드의 반환 값을 HTTP 응답 본문에 직접 쓰도록 지정하는 어노테이션입니다.
데이터(예: JSON, XML)를 반환해야 하는 경우 적합하며,@RestController
에서 기본적으로 포함됩니다.
반면, HTML을 반환하는 일반 컨트롤러에서는 사용하지 않습니다.
Feedback
- aop 기반 X → aop 프록시 기반
- 컨텍스트 → 컨테이너
- 컨트롤러와 respondbody 애너테이션이 결합된
- RESTful 아키텍처의 특징에 대해 제대로 설명하지 못함