- 신입 백엔드 개발자 면접에서 자주 나오는 질문을 모아 정리한 포스트입니다.
- 모든 질문들을 정리할 수는 없지만 최대한 자주 나오는 질문들과 중요한 질문을 정리하고 있습니다. 질문들은 계속 추가할 예정입니다.
- 이 포스트에 꼭 중요한 질문이 빠져있다면 댓글로 남겨주시면 반영하도록 하겠습니다.
- 필자는 Java,Spring Framework를 중점으로 한 백엔드 개발자를 목표로 하고 있습니다. 따라서 글 내부에 Java 혹은 백엔드 관련 용어가 나올 수 있습니다.
📍 Spring 프레임워크가 무엇인지 설명해주세요.
스프링 프레임워크는 자바 플랫폼을 위한 오픈 소스 어플리케이션 프레임워크로 POJO 기반을 바탕으로, DI와 AOP,PSA를 지원하는 경량의 컨테이너를 제공하는 프레임워크를 의미합니다.
📍 POJO란 무엇인가요?
Plain Old Java Object의 약자로서, 프레임워크 인터페이스나 클래스를 구현하거나 확장하지 않은 단순한 클래스를 의미하는 것으로, 타 프레임워크에 종속되지 않아 코드가 간결하고 테스트 자동화에 유리합니다.
📍 AOP란 무엇인가요?
관점 지향 프로그래밍의 약어로, 공통 관심사항과 핵심 관심사항을 분리하는 것을 의미합니다. 각 소스코드에서 여러 번 반복해서 사용하는 코드를 흩어진 관심사라고 부르고, 이것을 Aspect로 모듈화해 핵심 로직에서 분리해 재사용하는 것이라고 볼 수 있습니다.
+) AOP = 관심사의 분리
말 그대로 프로그램을 두 가지 관점으로 바라보겠다는 뜻!
- 공통 관심사항(cross-cutting concern)
: 중복되는 공통 코드(보안,로그,트랜잭션 등) - 핵심 관심사항(core concern)
: 비즈니스 로직
공통 관심사항은 코드가 중복된다. 프록시 패턴을 사용해서 비즈니스 로직과 분리한다. 이렇게 두 가지 고나심사로 분리하게 되면 개발자는 비즈니스 로직에 더욱 집중할 수 있게 된다.
📍 PSA란 무엇인가요?
환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조를 말한다.
📍 DI(Dependency Injection, 의존관계 주입)가 무엇인지 설명해주세요.
특정 객체에 필요한 객체를 외부에서 결정해서 연결하는 것을 의미한다. 직접 객체를 생성하지 않고 스프링에서 객체를 생성한 뒤에사용할객체에 주입시켜서 사용하게 하는 것
- 생성자 주입 : 생성자 호출시점에딱 1번만호출되는 것을 보장하며 불변, 필수 의존관계에 사용한다.
- Setter 주입 : 선택,변경 가능성이있는 의존관계에 사용되며 스프링빈을 선택적으로 등록이 가능하다.
- 필드 주입 : 코드가 간결해서 좋지만 외부에서 변경이 불가능해서 테스트하기 힘들다는 단점이 있다.
📍 IoC(Inversion of Control, 제어의 역전)이 무엇인지 설명해주세요.
객체의 생성부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀐 것을 의미합니다.
정확히 설명하면, 디자인 원칙 중 하나로 클래스 간의 결합도를 줄이기 위해 다양한 종류의 제어를 반전시킬 것을 권장하는 것을 의미합니다.
📍 DAO,DTO,BO,VO의 차이에 대해 설명해주세요.
DAO(Data Access Object)
- DB 데이터를 조회하거나 조작하는 기능을 전담하는 객체
- DB 접근 로직과 비즈니스 로직을 분리하기 위해서 사용
DTO(Data Transfer Object)
- 계층간의 데이터 교한을 위한 객체
- 로직을 갖지 않는 순수 데이터 객체로 getter,setter만 포함
VO(Value Object)
- DTO와 동일한 개념
- Read Only로 수정 불가
- getter,setter 이외의 추가 로직 포함 가능
BO(Business Object)
- 비즈니스 로직을 포함하는 오브젝트로, 여러 DAO를 사용해 데이터를 처리
📍 MVC란 무엇인가요?
애플리케이션의 구성요소를 Model,View,Controller 세가지 역할로 구분하는 디자인 패턴입니다.
- Model : 데이터
- View : jsp 파일들과 같이 사용자들에게 실제로 보여지는 페이지
- Controller : 사용자들의 요청을 받고 응답을 주는 로직 담당. 사용자가 접근한 url에 따라서 요청사항을 파악하고 요청에 맞는 데이터를 model에 의뢰하고 데이터를 view에 반영해서 사용자에게 보여줌
📍 스프링 Bean 객체와 Bean 생명주기에 대해 설명해주세요.
Bean 객체는 DI 컨테이너 내부에 존재하며 관리를 받고 있는 객체를 의미합니다. @Bean 어노테이션을 등록해 사용하거나, xml을통해 등록할 수 있습니다.
Bean의 생명 주기는다음과 같습니다.
스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존 관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료
- 스프링컨테이너에 의해 생명주기 관리
- 스프링 컨테이너 초기화 시 빈 객체 생성, 의존 객체 주입 및초기화
- 생성과 의존관계 주입과 초기화 분리
- 의존관계주입(생성자 주입)은 필수정보를 받고 메모리 할당을통해 객체 생성 책임
- 초기화는 생성된 값들을활용해 외부 커넥션을 연결하는등 무거운 작업 수행
- 명확하게 분리하는 것이 유지보수 관점에서 좋다.
- 싱글톤 빈들은 컨테이너가 종료되기 직전에소멸전 콜백에 발생
📍 Annotation에 대해 설명해주세요.
프로그램에게 추가적인 정보를 제공하는메타데이터입니다. annotation을 정의하고, 원하는 위치에 배치하고, 코드가 실행되는 도중 자바리플렉션을 이용해 추가 정보를 획득해 기능을 실시하는 방식으로 동작됩니다.
📍 Spring에서 제공하는 대표적인 Annotation 몇 가지만 예를 들어주세요
- @Controller : 특정 클래스를 Controller로 등록하는 어노테이션
- @Autowired : Spring에서 자동으로 의존성 주입을 하기 위한 어노테이션
- @RequestMapping : 컨트롤러로 등록된 클래스 내에 특정메서드를 요청되는 URL과 매칭시키는 어노테이션
'취뽀여정' 카테고리의 다른 글
신입 백엔드 개발자 취뽀여정 1탄 - 중소(si)기업 면접 후 (5) | 2024.02.26 |
---|