관리 메뉴

제뉴어리의 모든것

[Section3]기술 면접 본문

코드스테이츠/정리 블로깅

[Section3]기술 면접

제뉴어리맨 2022. 9. 19. 13:23

=========== 1번 : Spring MVC 프레임워크의 요청처리 과정에 대해서 설명해 주세요.

스프링 엠브이씨의 기본적인 처리 과정은 아래와 같습니다.
클라이언트의 요청이 서버로 들어오게되면
먼저 Dispatcher Servlet이라는 프론트 컨트롤러가 요청 정보를 받겠됩니다.
이때, 디스패처 서블릿은 클라이언트의 요청을 처리할 컨트롤러를 찾기 위한 검색을 "핸들러 맵핑" 이라는 인터페이스에게 위임합니다.
그렇게 위임을 받은 "핸들러 맵핑"은 요청 정보에 해당하는 컨트롤러의 정보를 찾아서 다시 "디스패처 서블릿"에게 전달하여 줍니다.
그리고 "디스패처 서블릿"은 그 전달받은 정보를 "핸들러 어댑터"에게 전달하여 해당 컨트롤러내의 "핸들러 메소드"의 호출을 위임합니다.
그렇게 "핸들러 어댑터"가 호출한 핸들러 메소드는 클라이언트의 요청에 대한 비즈니스 로직을 거친후 처리 결과와 "View" 정보를 "핸들러 어댑터"에게 리턴하고
그 리턴 받은 처리결과와 View 정보를 다시 "디스패처 서블릿"에게 전달합니다.
그리고 그 전달받은 View 정보를 "뷰 리졸버"에게 전달하여 해당하는 View를 찾도록 합니다.
그리고 찾은 View 정보를 가지고 "디스패처 서블릿"은 해당하는 View에게 처리 결과를 넘겨서 클라이언에게 전달할 응답 데이터 생성을 요청합니다.
그렇게 View에 의해 생성된 응답 데이터를 다시 "디스패처 서블릿"에게 전달되고, "디스패처 서블릿"은 응답 데이터를 최종적으로 클라이언트에게 전달하게 됩니다. 

그러나 여기서 만약 Controller가 RestController일 경우
조금 달라집니다.
Controller는 데이터 자체만을 리턴하므로, "디스패처 서블릿"은 "뷰 리졸버"가 아닌
처리결과 데이터의 타입에 맞는 "메세지 컨버터" 를 호출하게 됩니다.
그렇게 "메세지 컨버터"에 의해 만들어진 응답 데이터를 최종적으로 클라이언트에게 전달하게 됩니다.



https://januaryman.tistory.com/428
https://velog.io/@rlfrkdms1/Spring-MVC-Message-Converter
https://velog.io/@joungeun/%EA%B0%9D%EC%B2%B4%EA%B0%80-Json-%ED%98%95%ED%83%9C%EB%A1%9C-%EB%B0%94%EB%80%94-%EC%88%98-%EC%9E%88%EA%B2%8C
https://lkhlkh23.tistory.com/94
https://yeonyeon.tistory.com/112
https://mangkyu.tistory.com/49

 

[Spring] @Controller와 @RestController 차이

Spring에서 컨트롤러를 지정해주기 위한 어노테이션은 @Controller와 @RestController가 있습니다. 전통적인 Spring MVC의 컨트롤러인 @Controller와 Restuful 웹서비스의 컨트롤러인 @RestController의 주요한 차..

mangkyu.tistory.com

https://snoopy81.tistory.com/196

 

 

 

=============15번 :  JPA의 영속성 컨텍스트에 대해서 설명해 주세요.
영속성 컨텍스트란 엔티티를 영구 저장하는 환경을 의미한다.
이러 한 영속성 컨텍스트는 하나의 트랜잭션 안에서만 공유되며
비즈니스로직에서 엔티티를 바로 DB에 반영하지 않고, 영속성 컨텍스트에 우선적으로 저장, 관리하여
영속성 컨텍스트의 특징인 "1차 캐시", "쓰기 지연" 등의 기능을 수행하면서 "데이터 액세스" 처리에 대한 효율을 높여주는 기능이 있습니다.

영속성 컨텍스트의 특징으로는

1차 캐시 : 영속성 컨텍스트에 한번 저장된 데이터를 다시 필요로 하게 될 경우, DB를 거치지 않고 "1차 캐시"에 저장된 엔티티를 그대로 가지고 올 수 있습니다. 
동일성 보장 : 프로그램상의 객체와 DB상의 데이터의 불일치가 발생될 수 있는 문제점을 해소시켜 줍니다.
쓰기 지연 : DB에 직접 처리 해야하는 쿼리들을 트랜잭션이 끝나는 시점에 한번에 flush 시켜서 반영하므로, DB에 발생되는 lock이 걸리는 시간을 최소화 합니다.
변경 감지 : 영속성 컨텍스트가 관리하는 엔티티를 save할때에, 데이터의 변경이 감지되면 자동적으로 update를 수행하게 됩니다.
지연 로딩 : 엔티티를 DB에서 select 할때, 연관된 엔티티를 즉시 가져오는것이 아닌, 필요시점에 가져오게 되는 기능입니다.



이렇게 영속성 컨텍스트에 관리되는 엔티티는 
"비영속", "영속", "준영속", "삭제" 의 상태를 가집니다.

비영속 : 영속성 컨텍스트에서 관리 된적이 없는, 영속성 컨텍스트와는 무관한 엔티티 상태를 말합니다.
영속 : 영속성 컨텍스트에 저장되어, 영속성 컨텍스트에 의해 관리되는 상태를 말합니다.
준영속 : 영속성 컨텍스트가 관리하던 엔티티가, detach() 되어 더이상 영속성 컨텍스트의 의해 관리되지 않는 상태를 말합니다.
삭제 : 영속성 컨텍스트와 DB상에서 삭제된 상태를 말합니다.

스냅샷 : 엔티티가 영속성 컨텍스트에 저장된 최초의 상태


https://hwannny.tistory.com/65
https://www.inflearn.com/questions/38482
https://ryuks.tistory.com/m/24
https://thalals.tistory.com/290

 

[Spring] JPA 즉시 로딩과 지연 로딩

JPA는 데이터를 조회할 때, `FetchType` 으로 `즉시로딩(Eager)` 과 `지연로딩(Lazy)`가 있습니다. 참고로 JPA FetcyType의 default값은 @xxToOne에서는 EAGER, @xxToMany에서는 LAZY입니다. Feth Type이란 이 Fet..

thalals.tistory.com

https://cnu-jinseop.tistory.com/101

https://velog.io/@neptunes032/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%9E%80

 

 

 

 

=========== 31번 : @SpringBootTest와 @@WebMvcTest의 차이점을 설명해 주세요.

@SpringBootTest 애노테이션은
테스트시에 애플리케이션을 로드 하여, 스프링과 애플리케이션에서 사용되는 모든 빈을 스프링 컨테이너에 등록을 하게 된다.
즉, 내부적으로는 애플리케이션이 실행중인것과 같은 상태이다.
그러므로, 실제 애플리케이션이 구동할때의 환경과 가장 유사한 환경에서 테스트가 가능하다는 장점이 있지만,
반대로 테스트보단 디버깅에 가까운 환경이며 성능이 안 좋다는 단점이 있다.

통합테스트시 사용

그리고 
@WebMvcTest 은 
Controller 레벨의 테스트가 가능할 만큼의 빈들만 등록하여 준다.
그로 인해, Controller 레벨의 테스트를 진행 할 경우에 @SpringBootTest로 인한 테스트에 비해 빠르고, 성능이 좋다는 장점이 있지만
실제 앱의 환경이 아닌 Mock 기반의 테스트 환경이기 때문에, 실제 환경과는 다른 결과가 발생 될 수 있다.

웹레이어의 슬라이스 테스트시 사용

참조 : https://astrid-dm.tistory.com/536

https://www.javaguides.net/2022/03/springboottest-vs-webmvctest.html

 

jpa 이점중에 동일성보장이 왜 장점인지 자세히 알고싶습니다.. - 인프런 | 질문 & 답변

강의내용중에 동일성보장에 대한 장점을 듣고 정확히 어떤 사례에 이점인지 궁금하여 구글링을 해봤는데 시원하게 원하는 내용을 찾지 못하였습니다. ㅠㅠ 어떤 상황에서 동일성보장에 대한

www.inflearn.com

http://blog.devenjoy.com/?p=524

 

 

 

 

 

 

 

https://velog.io/@rlfrkdms1/Spring-MVC-Message-Converter

 

[스프링 MVC] 핸들러 매핑, 핸들러 어댑터

핸들러 매핑과 핸들러 어댑터가 어떤 것들이 어떻게 사용되는지 확인해보자. Controller 인터페이스와 HttpRequestHandler 핸들러(컨트롤러)를 통해 예시를 들겠다. Controller 인터페이스 과거 Spring에서

yeonyeon.tistory.com

https://velog.io/@rlfrkdms1/Spring-MVC-Message-Converter