CS공부

면접준비를 해볼까...(2)

티코딩 2023. 11. 29. 16:15

2편은 스프링부트와 관련한 질문들을 찾아서 대답하며 정리해볼것이다.

스프링에서 AOP가 뭔가요.

관점지향 프로그래밍으로 주로 메서드 실행 시점에 코드를 삽입하거나, 특정 메서드 호출 전후에 어떤 작업을 수행하도록 하는 방식으로 활용됩니다. 이를 통해 여러 모듈에서 공통으로 필요한 기능들을 중앙에서 관리하고, 코드의 중복을 최소화할 수 있습니다.

스프링 DI에 대해 아는대로 말씀해주세요.

의존성 주입으로 한객체가 다른객체에 대한 의존성을 직접해결하지 않고 외부에서 해당 의존성을 주입받는 디자인 패턴입니다. 이로인해 결합도를 낮추고 유연성을 높힐 수 있습니다. 생성자 주입, 세터 주입, 메서드 주입이 있습니다.

IOC가 무엇인가요.

제어의 역전을 말하고, 일반적으로 프로그래머가 작성한 코드가 제어의 주도권을 가지고 있다면, IOC는 이런 제어의 주도권을 외부의 컨테이너에게 넘기는 것입니다.

Bean이란.

스프링컨테이너에 의해 관리되는 객체를 말합니다. 스프링에서 IoC 컨테이너에 등록되어 생명주기와 의존성 주입을 스프링이 관리하는 객체입니다. 

스프링 필터랑 인터셉터의 차이점이 뭘까요.

둘다 애플리케이션의 요청을 가로채거나 조작하는데 사용되는 기능이지만, 필터는 서블릿 컨테이너 레벨에서 동작하고 HTTP 요청과 응답을 가로챕니다. 인터셉터는 스프링MVC레벨에서 동작하고, 주로 컨트롤러에 들어오는 요청과 컨트롤러가 응답을 생성하는 단계에서 동작합니다. 그리고 필터는 스프링 컨텍스트 초기화 이전에 실행되고 인터셉터는 이후에 실행됩니다.

Entity란.

데이터베이스에 저장되거나 관리되는 데이터의 실제 인스턴스를 나타냅니다. DB의 테이블에 대응하고 테이블의 각 행은 엔티티의 인스턴스에 해당합니다. 

Setter를 무분별하게 사용하면 안되는 이유.

무분별하게 사용하면 객체지향 프로그래밍의 원칙을 위반할 수 있습니다. 세터를 사용하면 객체의 상태를 언제든지 변경할 수 있습니다. 이로 불변성이 깨지게 됩니다. 그리고 객채의 내부 상태가 외부에서 직접 조작될 수도 있으며 이것은 캡슐화를 위반하는것입니다. 그리고 setter가 많으면 코드의 유지보수도 어려워집니다.

DTO와 VO 차이점.

DTO는 주로 데이터 전송을 위해 사용되며 비지니스 게층과 프레젠테이션 계층, 서비스 간 데이터 교환을 위한 객체입니다. 비지니스로직을 포함하지 않습니다. VO는 도메인 모델에서 개념적으로 하나의 값을 나타내기 위한 객체로 사용됩니다. 주로 불변성을 가지고, 비지니스 규칙을 적용합니다.

DTO를 사용하는 이유.

필요한 데이터만 포함하도록 설계하기 때문에 전송효율을 높히고, DTO는 데이터를 캡슐화하고 추상화하는 역할을 합니다. 그리고 서로 다른 계층 간 데이터 변환이 간단하게 이뤄질 수 있습니다. 그리고 필요한 정보만 노출함으로 데이터 노출의 위험을 줄일 수 있습니다.

MVC에 대해서 설명해주세요.

모델-뷰-컨트롤러로, 모델은 데이터와 데이터를 처리하는 부분을 담당합니다. 데이터의 상태를 관리하고 비지니스 로직을 수행합니다. 뷰는 사용자에게 정보를 표시하는 부분으로 모델의 데이터를 시각적으로 나타냅니다. 사용자 인터페이스 요소들을 담당하고 데이터의 표현방식을 결정합니다. 사용자의 입력을 컨트롤러로 전달합니다. 컨트롤러는 사용자의 입력을 받아 모델에 전달하고 모델의 상태를 갱신하거나 모델로부터 데이터를 가져와 뷰에 전달합니다. 

생성자 injection을 사용하는 이유.

객체를 생성할 때 해당 객체가 필요로하는 의존성을 외부에서 주입하는 방식입니다. 의존성이 불변하도록 유도할 수 있고 어떤 의존성을 필요로하는지 명시적으로 파악할수있고 테스트할땐 목객체를 주입할 수 있어 테스트케이스에도 용이합니다. 그리고 의존성이 해결되기 전까진 객체가 완전히 생성되지 않기 때문에 순환참조도 방지하는데 도움이 됩니다.

 

 

물론 더 많은 질문들이 있겠지만 일단 내가 이전에 정리해둔 자료들과 겹치는부분도 많기때문에 여기까지 정리해봤다.

3편에는 내 코드들을 보며 질문과 대답을 작성해보겠다.