이번 주에는 스터디에서 Spring 관련 모의면접을 진행했다.
팀 공용 노션에도 정리되어 있긴 하지만, 답변자별로 정리되어 있어서 스터디원들과 내가 받았던 질문과 그에 대한 답변을 주제별로 간단하게 정리해봤다 :)
틀린 부분에 대한 지적은 언제나 환영합니다🫶
1. DI / IoC
👉 DI란?
Dependency Injection의 약자로, 의존관계 주입을 의미한다.
클라이언트가 사용하는 인스턴스를 외부로부터 주입받아서 사용하는 것을 DI라 한다.
👉 의존관계 주입의 장점
클라이언트 코드의 수정 없이 구현체를 갈아끼울 수 있기 때문에, 코드의 유지보수성이 증가한다.
👉 Spring에서 의존관계를 주입하는 3가지 방법
1. 생성자 주입: 생성자를 이용해서 의존관계를 주입하는 방법으로, 구현체가 반드시 필요하고, 수정될 일이 없을 때 사용한다.
2. 수정자 주입: setter를 이용해서 의존관계를 주입하는 방법으로, 구현체를 변경할 가능성이 있을 때 사용한다.
3. 필드 주입: @Autowired 애노테이션을 이용해서 의존관계를 주입하는 방법으로, 간단하지만 DI 프레임워크에 의존적이고 테스트가 힘들다는 단점이 있다.
👉IoC란?
Inversion of Controll의 약자로, 제어의 역전을 의미한다.
스프링에서는 프로그램의 흐름을 스프링이 제어한다. 이는 곧 스프링이 개발자 대신 객체를 생성하고, 객체의 라이프사이클을 관리한다는 의미이다. IoC는 DI를 통해 구현된다.
2. 스프링 빈
👉 스프링 컨테이너란?
스프링 컨테이너는 개발자 대신 객체를 생성하고 관리해주는 DI 컨테이너이다.
👉 스프링 빈이란?
스프링 컨테이너가 관리하는 객체를 의미한다. 빈의 생명 주기는 스프링 컨테이너에 의해 관리된다.
👉 스프링 빈 등록 방법
1. @Component 애노테이션을 사용
2. @Configuration 애노테이션을 붙인 클래스 내에서 @Bean 애노테이션 사용
👉 스프링 컨테이너 생성 과정
1. 스프링 컨테이너 생성
2. 스프링 빈 등록
3. 의존관계 주입
3. AOP
👉 AOP란?
관점 지향 프로그래밍의 약자로, 공통 관심 사항과 핵심 관심 사항을 분리하는 것을 말한다.
비즈니스 로직을 깔끔하게 유지하고, 공통 관심 사항을 원하는 곳에만 적용할 수 있다는 장점이 있다.
👉 AOP의 동작 원리
AOP를 적용하면, 가짜 서비스 클래스(프록시 클래스)가 만들어진다. 이 가짜 서비스 클래스는 진짜 서비스 클래스의 코드를 복제하여 코드를 조작하는데, 컨트롤러가 서비스를 호출할 때 프록시 클래스가 호출되어 공통 관심 사항을 적용한다.
4. 스프링 MVC
👉MVC 패턴이란?
Model, View, Controller로 구성되어 있음.
Model은 데이터를 담아두는 역할을, View는 화면을 렌더링하는 일을, Controller는 요청을 처리하는 역할을 담당.
👉MVC 패턴의 장점
역할을 분리함으로써 책임이 명확해지고, 변경 사이클이 다른 코드를 분리함으로써 유지보수성이 향상됨.
👉 스프링 MVC 동작 과정
1. 디스패처 서블릿이 HTTP 요청을 받는다.
2. 디스패처 서블릿은 핸들러 매핑을 통해 요청 URL에 매핑된 컨트롤러를 찾아 호출한다.
3. 컨트롤러는 서비스를 호출하여, 요청 처리를 위임한다.
4. 서비스는 필요하다면 DB에 접근하여 비즈니스 로직을 수행한다.
5. 컨트롤러는 요청 처리 결과를 받아 ModelAndView에 담아서 디스패처 서블릿에 반환한다.
6. 디스패처 서블릿은 뷰 리졸버에게 뷰의 이름을 넘긴다.
7. 뷰 리졸버는 이름에 맞는 뷰를 찾아, 뷰 객체를 생성하여 반환한다.
8. 클라이언트에게 뷰를 반환한다.
5. 기타
👉 스프링과 스프링부트의 차이
스프링 부트는 라이브러리를 자동으로 관리해주기 때문에 환경설정이 간편하고, 내장 톰캣 서버가 존재하여 별도의 웹 서버를 설치할 필요가 없다.
👉 프레임워크와 라이브러리의 차이
공통점: 외부의 코드를 갖다쓴다.
차이점: 프레임워크는 호출 제어권이 프레임워크에게 있지만, 라이브러리는 사용자가 필요할 때마다 호출하여 사용함.
👉 스프링의 세 가지 특징
DI와 IoC, AOP, ASP
6. 추가로 공부해야 할 것
👉 서블릿과 JSP의 차이
👉 필터와 인터셉터의 차이
👉 빈 스코프
👉 @Transactional에 대하여
이번 주에 가장 크게 깨달은 점은 @Transactional도 AOP의 일종이었다는 것.
그래서 면접 때 AOP 적용해 본 경험 묻는 질문에 없다고 했더니 그런 반응이었구나 ༼;´༎ຶ ༎ຶ༽
스터디원의 친절한 설명으로는 JDBC 커넥션 객체를 얻어오고, pstmt를 준비하고, 객체를 반납하는 일련의 과정들을 분리해둔 게 @Transactional이라고 한다.
어째 스터디를 하면 할수록 공부할 내용이 더 늘어나는것 같다 ^_ㅠ
'𝐒𝐭𝐮𝐝𝐲' 카테고리의 다른 글
디스코드는 어떻게 Elixir로 500만명의 동시 접속자를 처리했을까? (0) | 2025.03.11 |
---|