목록CS 지식/면접준비 (78)
개발놀이터
Q. JPA 영속성 컨텍스트의 이점을 설명해주세요. A. 영속성 컨텍스트를 사용하는 이유는 1차캐시, 동일성 보장, 쓰기 지연, 변경 감지, 지연 로딩이 있습니다. Q. 더 자세히 설명해주세요. A. 1차 캐시는 조회가 가능하며 1차 캐시에 없으면 DB에서 조회하여 1차 캐시에 올려 놓습니다. 동일성 보장은 동일성 비교가 가능합니다. 쓰기 지연은 트랜잭션이 지원하는 쓰기 지연이 가능하며 트랜잭션 커밋하기 전까지 SQL을 바로 보내지 않고 모아서 보낼 수 있습니다. 변경 감지는 스냅샷을 1차 캐시에 들어온 데이터로 찍고 커밋 되는 시점에 엔티티와 스냅샷을 비교하여 update 쿼리를 생성합니다. 지연 로딩은 엔티티에서 해당 엔티티를 불러올 때 그 때 SQL을 날려 해당 데이터를 가져옵니다.
Q. POJO 란 무엇인가요? 스프링 프레임워크에서 POJO는 무엇이 될 수 있을까요? A. POJO란 인터페이스, 클래스를 구현하거나 확장하지 않은 단순한 클래스를 말합니다. POJO 클래스는 자바에서 제공하는 API 외에 종속되지 않습니다. 특정 환경에 종속되지 않아 코드가 간결하고 테스트 자동화에 유리합니다. 스프링에서는 도메인과 비즈니스 로직을 수행하는 대상이 POJO가 될 수 있습니다.
Q. @Bean / @Component 어노테이션에 대해서 설명해주시고 둘의 차이점에 대해서 설명해주세요 A. 두 어노테이션 모두 싱글톤으로 빈을 등록할 때 사용하는 어노테이션입니다. @Bean은 메서드를 빈으로 등록하는 어노테이션이고 @Component는 클래스를 빈으로 등록하는 어노테이션입니다.
Q. CORS 에러가 무엇인가요? A. Cross Origin Resource Sharing 의 약자로 동일한 출처가 아닌 다른 출처에 대한 접근을 막는 보안 정책입니다. Q. CORS 에러를 스프링에서 해결하는 방법이 뭔가요? A. Servlet Filter에 Access-Control-Allow-Origin 을 헤더에 담아 응답하거나, WebMvcConfiguer 를 구현한 Configuraion 클래스를 만들어서 빈으로 등록하거나, Controller 클래스에서 @CrossOrigin 어노테이션을 통해 접근을 허용할 수 있습니다. 제일 간단한 것은 어노테이션을 붙이는 것이지만 컨트롤러가 많을 때 붙여야하는 어노테이션도 많아진다는 단점이 있습니다.
Q. Servlet Filter 와 Spring Interceptor 의 차이는 무엇인가요? A. 차이점이 여러개 있는데 우선 스펙이 다릅니다. 필터는 서블릿 필터로써 javax.servlet 스펙에 포함되는 클래스이고 인터셉터는 Spring MVC 스펙에 포함되어있는 클래스입니다. 그리고 각자 실행시점이 다르다는 차이가 있습니다. 필터는 서블릿 전후처리를 담당하지만 인터셉터는 스프링에서 핸들러를 실행하기 전후나, ViewResolver를 통해 컨트롤러에서 리턴한 View Name 으로부터 렌더링을 담당한 View 오브젝트를 반환한 후 실제 View를 렌더링한 후에 처리를 담당합니다. 또한, 등록 위치도 다릅니다. 필터는 Web Application 에 등록합니다. 톰캣을 사용할 경우 web.xml에 등..
Q. Spring Web MVC 의 Dispatcher Servlet의 동작 원리에 대해 간단히 설명해주세요. A. 먼저 디스패처 서블릿이 핸들러 매핑에서 핸들러를 조회합니다. 그리고 핸들러 어댑터 목록에서 핸들러를 처리할 수 있는 핸들러 어댑터를 조회합니다. 핸들러 어탭더가 실행되면서 실제 핸들러를 실행합니다. 핸들러 어댑터는 디스패처 서블릿에게 ModelAndView를 반환합니다. 디스패처 서블릿은 viewResolver를 호출합니다. viewResolver는 디스패처 서블릿에게 View를 반환합니다. 디스패처 서블릿이 View를 통해서 View를 랜더링합니다.
Q. IoC 컨테이너의 역할은 무엇이 있을까요? A. 애플리케이션 실행 시점에 빈 오프젝트를 인스턴스화 하고 DI 한 후에 최초로 애플리케이션을 기동할 빈 하나를 제공해줍니다.
Q. 스프링 Bean의 Scope에 대해서 설명해주세요. A. 빈 스코프는 빈이 존재할 수 있는 범위를 뜻하며 싱글톤, 프로토타입, request, session, application 등이 있습니다. 싱글톤은 기본 스코프로 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프입니다. 프로토타입은 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프입니다. request는 웹 요청이 들어오고 나갈때까지 유지하는 스코프, session은 웹 세션이 생성, 종료할때까지, application은 웹 서블릿 컨텍스트와 같은 범위로 유지하는 스코프입니다.
Q. 스프링 Bean의 생성 과정을 설명해주세요 A. 객체 생성, 의존 설정, 초기화, 사용, 소멸의 과정의 생명주기를 가지고 있습니다. Bean은 스프링 컨테이너에 의해 생명주기가 관리되며 빈 초기화 방법은 @PostConstruct를 빈 소멸에는 @PreDestroy를 사용합니다. 생성한 스프링 빈을 등록할 때는 ComponentScan을 이용하거나 @Configuration의 @Bean을 사용하여 빈 설정파일을 직접 빈으로 등록할 수 있습니다.
Q. 스프링 빈이란 무엇인가요? A. 스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체입니다. (꼬리질문) Q. 스프링 컨테이너는 무엇인가요? A. 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 합니다. 개발자가 만든 객체는 new 연산자, 인터페이스 호출 등의 방식으로 생성되고 소멸되지만 스프링 컨테이너를 사용하면 해당 역할을 대신해줍니다. 즉, 제어 흐름을 외부에서 관리하게 됩니다. 또한, 객체들 간의 의존 관계를 스프링 컨테이너가 런타임 과정에서 알아서 만들어 줍니다.