기술면접 스터디 2회차. 어제 멘토링 시간 때 받은 과제를 수행하면서 기술면접 스터디를 진행했다.
DI, 의존성 주입은 객체가 다른 객체와의 의존성을 가질 때 직접 해당 객체를 생성하지 않고 외부에서 필요한 객체를 주입받는 방식의 디자인 패턴입니다. 직접 생성할 경우 의존하는 객체에 변경이 있을 때 하나하나 다 수정해야 하지만, 의존성 주입을 통할 경우 외부에서 한 번만 수정을 한 뒤 주입을 받으면 되기 때문에 유지보수성이 좋아집니다. 그리고 DI를 통해 결합도가 느슨해지고, 테스트 시 mock 객체를 주입하는 방식으로 더 쉽게 진행할 수 있고, 컨테이너가 객체의 생명주기를 알아서 관리해줘 신경쓰지 않아도 되는 장점이 있습니다.
자바에서는 try-catch로 예외처리를 하는데 모든 코드에 try-catch를 붙이는 것은 비효율적입니다. 이를 해결하기 위해 Spring은 aop를 이용해 예외처리를 하는 방식을 고안했는데, 대표적으로 많이 활용하는 방식이 @ExceptionHandler와 @ControllerAdvice입니다. @ExceptionHandler를 특정 컨트롤러 내부에서 사용하면 해당 컨트롤러에서 발생하는 지정한 타입의 예외를 처리를 합니다. 전체 컨트롤러에 대한 예외를 전역적으로 처리하고 싶으면 새로 클래스를 만들어 @ControllerAdvice를 적용해주고 아래에 @ExceptionHandler를 구현하면 됩니다. 만약 예외 발생 시 객체로 반환을 하려면 @ResponseBody를 붙이는 대신 @ControllerAdvice를 @RestControllerAdvice로 사용하면 됩니다.
Spring Framework: Java 기반의 엔터프라이즈 애플리케이션 구축을 위한 종합적인 프레임워크. 주요기능은 IoC, DI, AOP
Spring MVC : Spring Framework의 하위모듈. 웹 어플리케이션을 위한 MVC 디자인 패턴을 구현한 웹 프레임워크. 클라이언트의 요청을 Controller가 처리하고, Model을 통해 데이터를 관리하고, View를 통해 사용자에게 결과를 보여주는 방식으로 동작.
Spring Boot: Spring 기반의 애플리케이션을 빠르고 쉽게 개발할 수 있게 도와주는 프레임워크. 많은 부분에 미리 디폴트 설정이 되어있어 복잡한 설정 없이도 애플리케이션을 실행할 수 있다. 내장 Tomcat 서버로 별도의 서버 설치 없이 웹 애플리케이션을 독립적으로 실행할 수 있게 해준다.
Spring은 java 애플리케이션 개발의 기본적인 구조를 제공하고, Spring MVC는 웹 애플리케이션 개발을 위한 구조를 제공하고, Spring Boot는 Spring 기반 애플리케이션의 개발과 실행을 간편하게 해주는 도구를 제공한다.
내가 쓴 기술을 제대로 설명할 수 있어야 한다.
스프링과 자바에 대한 기초적인 지식이 반드시 필요하다.
프로젝트 경험은 이미 충분하다.
알고는 있고 경험해봤지만 말하지 못할 수 있다.
스프링부트 내장웹서버가 장점인 이유?
서버를 띄울 때 서버 이중화시 모두 웹서버를 다 띄워줘야되는데 각각의 웹서버 마다 버전이 다르거나 설정이 다르면 번거롭다.
스프링부트는 내장 톰캣으로 모두 버전을 동일하게 가져갈 수 있다.
스프링부트의 핵심기능은 Bean 객체이다.
빈 객체는 스프링 프레임워크 ioc 컨테이너에서 관리되는 객체를 말한다.
빈 객체를 활용하지 않고 그냥 싱글톤으로 직접 생성해서 관리하라면 소규모면 가능하지만 규모가 커지고 관리해야하는 객체가 많아지면 힘들다.
그래서 개발자가 직접 관리하지 않고 스프링이 관리하면 유지보수하기 편하다.
스프링이 객체의 lifecycle을 온전히 다 관리해준다.
그래서 개발자가 비즈니스로직에 집중하도록 해준다.
ioc컨테이너를 구현한 구체적인 인터페이스는? ApplicationContext
의존성 주입방법
의존 객체를 외부에서 전달받는 방식과 직접 생성하는 방식이 있다. 의존 객체를 직접 생성하게 되면 수정이 필요할 때 직접 다 고쳐줘야한다. 외부에서 전달받게되면 외부에서 한번만 수정을 한 뒤 전달하면 끝이다.
확장성, 유지보수성 때문에 Bean 객체를 써야한다