Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Kuma's Curious Paradise

기술면접 질문 답안 모음3 본문

기술면접

기술면접 질문 답안 모음3

쿠마냥 2024. 5. 16. 13:33

14. array와 list, arraylist, linkedlist의 차이에 대해 이야기해 주세요. 

array는 크기를 조절할 수 없는 정적배열을 말합니다. list의 구현체인 arraylist와 linkedlist는 크기 조정이 가능한 동적 배열이고요. array는 메모리 상에 붙어서, 일렬로 저장이 되는데 초기화할 때 크기를 지정한 만큼 생성됩니다.
list의 경우 인터페이스로, 순서를 보장하는 배열 기반 자료구조를 이야기합니다. arraylist와 linkedlist가 그 구현체 중 하나인데, arraylist는 array와 마찬가지로 일렬 저장이 됩니다. 일단 첫 번째 만들 때 크기 10을 할당하기 때문에 배열이 늘거나 줄어도 괜찮습니다. 만약 10을 넘어가면 크기 20을 재할당하고, 이후 40, 80으로 2배씩 크기를 재할당하며 늘려갈 수 있습니다. 조회 속도는 O(1)로 빠르지만, 삽입 및 삭제 시 한칸씩 뒤로 밀거나 당겨와야 하기 때문에 비교적 느린 속도를 지닙니다. 
linkedlist는 각 인덱스가 노드로 연결되어 있는 구조를 말합니다. 0번 인덱스는 자신의 value와 1번 인덱스의 주소값을 지니고 있습니다. 1번은 2번의, 2번은 3번의 주소값을 지니고 있으며 이렇게 죽 연결됩니다. 따라서 조회 속도는 O(n)이지만, 삽입과 삭제 시 주소값만 변경해서 연결해 주면 되기 때문에 성능이 좋습니다. 

 

15. Hashmap에 대해 설명해 주세요. 

먼저, map은 key-value 쌍으로 이루어진 인터페이스입니다. 이를 구현한 구현체가 hashmap인데요, key값을 해싱하여 해당 해시값을 인덱스로 활용합니다. 따라서 순서를 보장하지 않습니다. hashmap은 내부가 사실 배열로 구성되어 있는데, 이 배열을 hashtable이라고 부릅니다. hashtable에는 해시된 key와 해당 key의 value값이 연결되어 있습니다. 따라서 key가 입력되면 바로 인덱스를 찾을 수 있어서 조회 성능이 무척 좋습니다. 
가능성이 높지는 않지만 해시 충돌이 일어날 수 있습니다. 따라서 hashmap은 맨처음 0~9까 hash값을 두다가, 일곱 개 정도가 차면 0~19로 늘리는 행동을 반복합니다. 만약 해시 충돌이 일어날 경우 value값을 배열로 저장하거나 key값을 블랙-레드 트리로 다시 정렬하여 해결합니다. 

16. 싱글톤 패턴에 대해 설명해 주세요. 
싱글톤 패턴은 하나의 인스턴스를 여기저기서 전역적으로 재사용하는 디자인 패턴입니다. 어디서든 동일한 인스턴스를 사용할 수 있다는 것이 장점이며, 인스턴스 생성을 한 번만 수행하여 리소스를 절약합니다. 예를 들어 스프링 프레임워크의 경우 빈을 싱글톤 패턴으로 관리합니다. 빈은 클래스의 인스턴스인데, 스프링프레임워크는 이 인스턴스를 하나만 생성하고 있다가 적절한 곳에 주입하여 애플리케이션을 실행합니다. 

17. DI와 IoC에 대해 설명해 주세요. 

DI는 IoC를 달성하는 하나의 방법입니다. IoC는 제어의 역전으로, 본래 개발자가 제어하던 애플리케이션의 흐름이 프레임워크 제어로 역전된 것을 말합니다. DI는 말 그대로 의존성을 '외부에서' 주입하는 것을 말합니다. 예를 들어, BookService 클래스에서 BookRepository 클래스를 주입받아야 할 때, DI가 없다면 개발자는 BookRepository 객체를 직접 생성하여 사용해야 할 겁니다. 하지만 스프링 프레임워크는 IoC 컨테이너가 BookRepository 클래스의 빈을 가지고 있다가 BookService 클래스에 주입하여 줍니다. 이로써 IoC가 달성됩니다. 

 

18. MVC 모델이란 무엇인가요?

Model-View-Controller로 이루어진 디자인 패턴입니다. View는 사용자와 직접 상호작용하는 인터페이스입니다. 사용자가 요청을 보내면 Controller에 전달되고, Controller는 Model을 동작하게 합니다. Model은 데이터베이스와 상호작용하는 비즈니스 로직입니다. Controller는 Model과 View의 상호작용을 돕는 역할로, Model에서 만들어진 데이터를 다시 View에 전달하고 View는 사용자에게 해당 결과를 보여 줍니다. 

 

19. @Component와 @Bean의 차이를 설명해 주세요. 

둘다 스프링 프레임워크에게 이것으로 빈을 만들어라! 라고 알리는 기능을 합니다. @Component는 클래스에 붙어서 해당 클래스를 인스턴스화하여 빈으로 관리해야 함을 알려줍니다. @Bean은 메서드에 붙어서 메서드가 반환하는 객체를 빈으로 관리해야 함을 알려줍니다. @Bean 메서드들을 여러 개 지니고 있는 클래스는 빈 생성을 위한 설정 클래스로, @Configuration을 붙입니다. @Autowired가 붙은 요소에 bean을 주입하여 사용합니다. 

 

20. Dispatcher Servlet은 무엇인가요? 

스프링 프레임워크에서 모든 요청을 관리하는 프론트 컨트롤러 서블릿입니다. HTTP 요청이 들어오면 디스패쳐 서블릿은 요청 URL을 확인하여  적절한 컨트롤러로 전달합니다. 여기서 HandlerMapping을 사용하여, @RequestMapping이나 @GetMapping과 같은 어노테이션을 확인하고 URL과 매핑된 메서드를 찾습니다. 이후 해당 메서드를 실행한 후 처리 결과를 받아서 뷰 변환 및 렌더링을 진행합니다. 이후 최종 HTML을 클라이언트에게 전송합니다. 이 과정들을 원래는 xml 파일로 모두 설정해야 했는데, 이를 쉽게 만들어 주는 것이 톰캣입니다. 

21. 어노테이션이란 무엇이고 구체적으로 어떤 것이 있나요?

어노테이션은 자바 코드에 메타 데이터를 추가하는 방법입니다. 예를 들어, @Service 라는 어노테이션은 이 클래스를 인스턴스화하여 빈으로 관리해야 함을 알려주면서, 동시에 해당 클래스에 비즈니스 로직이 담겨 있다고도 알려 주지요. @Override같은 경우, 부모 클래스의 메서드를 오버라이드하였음을 표시하고, 이를 통해 컴파일러는 메서드 시그니처가 같은지 자동 검사할 수 있게 됩니다. 

 

22. Spring Security의 구조와 JWT 발급 과정에 대해 설명해 주세요. 

시큐리티는 크게 인증, 인가 과정으로 구분됩니다. 인증은 사용자가 누구인지 확인하고 인가는 사용자에게 권한을 부여합니다. 시큐리티는 아주 많은 필터 체인으로 구성이 되어 있는데, 그중 Authentication Filter에서는 Authentication Manager가 사용자를 확인하고 Authentication 객체를 반환합니다. 인가는 URL로 제어하거나 어노테이션, 예를 들면 @Secured, @PreAuthorize 등을 활용할 수 있습니다. 

JWT 발급 과정은 아래와 같습니다. 

로그인 요청 -> Authentication Filter가 요청을 가로채고 id와 password를 추출. Authentication Manager를 통해 인증 시도. -> Authentication Manager는 이 일을 Authentication Provider에게 넘기고, provider는 사용자 정보를 UserDetailsService를 통해 로드하여 입력한 정보와 맞는지 검사합니다. -> 인증이 성공하면 Authentication Manager는 Authentication 객체를 반환하고 Security Context Holder에 저장합니다. -> 이후 JWT를 생성하여 클라이언트에 전달합니다. 

 

'기술면접' 카테고리의 다른 글

[cs] MVVM 예시와 함께 이해하기  (1) 2024.09.03
[cs] 노출식 모듈 패턴  (0) 2024.08.06
기술면접 질문 답안 모음4  (0) 2024.05.29
기술면접 질문 답안 모음2  (1) 2024.05.09
기술면접 질문 답안 모음1  (0) 2024.05.06