입사 예정이던 회사보다 좋은 기회가 생겨 새롭게 면접을 준비하게 되었다.
Spring 과 JPA에 대한 개념을 다시 한 번 정리하고, 기본 면접 질문에 대비하고자 한다.
Spring 과 Spring Boot 의 차이는?
Spring은 자바 개발을 편리하게 해주는 오픈소스 프레임워크이다. Ioc, DI, AOP 등을 지원한다.
Spring Boot는 기존 Spring 프레임워크에서 요구되었던 복잡한 설정 과정 등을 Auto Contiguration을 통해 자동화할 수 있어 사용자의 편의성을 높였다. Gradle이나 Maven 빌드 파일에 필요한 starter 의존성을 추가해주면, starter가 필요한 의존성jar들을 자동으로 프로젝트에 로드해준다.
Spring MVC가 뭔가요?
MVC 패턴 기반의 웹 프레임워크로, 애플리케이션의 구성요소를 Model, View, Controller 로 분리한다.
Spring MVC의 컴포넌트 구성
- DispatcherServlet : 클라이언트의 요청을 먼저 받아들이는 서블릿으로, 컨트롤러에 요청을 전달한다
- HandlerMapping : 요청이 어떤 컨트롤러에게 보내진 요청인지 검사한다
- Controller : 요청을 받아 처리하고, (Service - DAO - DB) 결과를 DispatcherServlet에 전달한다.
- ViewResolver : View의 이름을 통해 알맞은 View를 찾는다
- View : 사용자에게 보여지는 UI
IoC 와 DI가 뭔가요?
IoC(Inversion of Control)는 제어의 역전의 약자로, 객체나 메서드 호출 등의 프로그램의 흐름을 개발자 자신이 아닌 프레임워크가 주도하는 것을 말한다. 스프링은 객체의 생성부터 소멸까지 생명주기의 관리를 컨테이너가 담당한다.
DI(Dependency Injection)은 의존성 주입의 약자로, 사용자가 객체를 직접 생성하는 것이 아니라, 외부에서 생성한 후 주입시켜 주는 방식이다. 이를 통해 모듈 간 결합도가 낮아지고, 유연한 코드를 작성할 수 있다.
@Autowired 가 있으면 스프링 컨테이너가 찾아서 관계를 연결한다.
DI는 A 객체에서 B, C객체를 사용(의존)할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 setter 혹은 생성자를 통해 사용하는 방식이다.
스프링 컨테이너
스프링에서 사용할 객체들을 담고있는 곳이다.
@SpringBootApplication
public class BipumInBeApplication {
public static void main(String[] args) {
SpringApplication.run(BipumInBeApplication.class, args);
}
}
- @Configuration 어노테이션을 붙인다. (@SpringBootApplication 내 포함)
- 등록된 스프링 빈을 생성하고 의존관계를 주입하며, 생명주기를 관리해준다.
- 각 메서드에 @Bean을 붙여 빈으로 등록할 수 있다.
스프링 Bean
스프링 Bean은 자바 객체이며, 스프링 컨테이너에서 만들어지는 객체를 스프링 Bean이라 부른다.
자바의 Bean과는 다른 의미로 사용된다. (자바 Bean은 DTO에 유사한 개념)
@Component와 @Bean을 사용해서 컨테이너에 Bean으로 등록할 수 있는데, @Component는 클래스 수준에서 사용되며, @Bean은 메서드 수준에서 사용된다.
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl();
}
}
@Bean은 메소드 레벨에서 선언하며, 반환되는 객체(인스턴스)를 개발자가 수동으로 빈으로 등록하는 애노테이션이다.
@Component
public class Utility {
// ...
}
@Component는 클래스 레벨에서 선언함으로써 스프링이 런타임시에 컴포넌트스캔을 하여 자동으로 빈을 찾고(detect) 등록하는 애노테이션이다.
AOP가 뭔가요?
AOP(Aspect Oriented Programming)은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고 그 관점을 기준으로 모듈화하는 것을 말하며, 어떤 로직에 공통된 관심사로 작성된 로직이 있다면 Aspect로 모듈화하여 재사용하는 것이다.
@Aspect 어노테이션으로 해당 클래스가 Aspect임을 표시하고, @Component를 통해 빈에 등록한다.
@Aspect
@Component
public class UseTimeAop {
}
참고한 블로그
https://pinokio0702.tistory.com/169
[면접]springboot 예상 질문
안녕하세요. 이번 글은 페이스북에서 좋은 글이 올라온 것 같아서 한번 정리해 보았습니다. Springboot 면접 질문 1. Spring Boot Common Interview Questions 스프링부트는 자바 개발을 위해 spring framework를 단
pinokio0702.tistory.com
https://gudwnsgur.tistory.com/14
Spring 면접 질문 모음
[ EJB : Enterprise Java Bean ] ∘ Servlet, JSP, JDBC 등과 같은 JAVA SE 종류중 하나 ∘ 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션 ∘ JSP는 화면 처리, EJB는 업무 로직을 처리한다. ∘ 단점 ·
gudwnsgur.tistory.com
'기타' 카테고리의 다른 글
[AWS MediaConvert] SpringBoot 연동하여 미디어 파일 DASH 포맷으로 변경하기 (0) | 2023.07.21 |
---|---|
JPA 면접 질문 정리 (0) | 2023.06.02 |
Git (3) - merge와 branch (0) | 2023.01.05 |
Git (2) - Git 다루기 (0) | 2023.01.03 |
Git (1) - Git이란? (0) | 2023.01.03 |