면접 준비 - 스프링, 기타
- 프레임워크 vs 라이브러리
프레임워크: 개발할 때 필수적인 코드나 알고리즘 등의 큰 틀을 제공하는 것. 프레임워크가 흐름을 제어함.
라이브러리: 특정 기능을 모아둔 코드들의 집합. 사용자가 흐름을 제어함.
- call by value vs call by reference
값에 의한 호출: 인자로 받은 값을 복사하여 처리
참조에 의한 호출: 인자로 받은 값의 주소를 참조하여 값에 직접 저장.
* 자바는 값에 의한 호출이다.
배열, 클래스와 같은 참조형 타입은 그 자체로 주소를 갖고 있기 때문에 값을 복사하여 인자로 전달해도, 값이 변경되는 것.
- TDD
매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스.
테스트가 코드 작성을 주도하는 개발방식.
새로운 기능에 대한 테스트케이스 작성 -> 테스트를 통과하는 코드 작성 -> 리팩토링
- WAS vs web server
WAS: DB 조회나 다양한 로직 처리의 동적 컨텐츠를 제공하는 애플리케이션 서버
web server: HTTP 프로토콜을 기반으로 클라이언트가 요청을 하면 정적 컨텐츠를 제공하는 서버
- 대용량 트래픽에서 장애 발생 시
스케일 업을 통해 하드웨어 스펙을 향상 / 스케일 아웃을 통해 서버를 여러대 추가해 시스템을 증가
- 스케일 업: 기존 서버의 사양을 업그레이드
- 스케일 아웃: 서버를 여러대 추가
- 어노테이션
사전적 의미로는 주석이라는 뜻.
프로그램에게 추가적인 정보를 제공해 특별한 의미, 기능을 수행하도록 하는 메타데이터.
-----
- spring framework
자바 개발을 편리하게 해주는 오픈소스 프레임워크.
- 경량 컨테이너: 객체의 생명주기를 관리하고 스프링으로부터 필요한 객체를 얻음
- 제어의 역전(IoC): 사용자가 아닌 프레임워크가 컨트롤을 제어.
- 의존성 주입(DI): 계층이나 서비스 간에 의존성이 존재할 경우 프레임워크가 연결시켜줌
- 관점 지향 프로그래밍(AOP): 여러 모듈에서 공통적으로 사용하는 기능을 분리하여 관리
- @RequestBody vs @RequestParam vs @ModelAttribute
@RequestBody: 클라이언트로부터 전송되는 JSON 형태의 HTTP Body 내용을 MessageConverter를 통해 자바의 객체로 변환
@RequestParam: 한개의 HTTP 요청 파라미터를 받기 위해 사용
@ModelAttribute: HTTP Body 내용과 파라미터 값들을 생성자/getter/setter를 통해 객체 형태로 주입하기 위해 사용
- Spring boot vs Spring framework
Spring boot: 설정의 많은 부분을 자동화하여 사용자가 편하게 스프링을 사용할 수 있도록 도움. 내장된 톰캣으로 서버를 바로 실행 가능.
Spring framework: 사용자가 직접 환경설정을 해야함.
- Spring MVC
Model, View, Controller로 기능을 구분하여 개발하는 디자인 패턴.
Model: 데이터 관리나 비즈니스 로직을 처리
View: 비즈니스 로직의 처리 결과가 UI로 표현
Controller: 사용자의 요청을 처리하고 Model과 View를 중개
- 클라이언트는 URL을 통해 요청을 전송한다.
- 디스패처 서블릿은 핸들러 매핑을 통해 해당 요청이 어느 컨트롤러에게 온 요청인지 찾는다.
- 디스패처 서블릿은 핸들러 어댑터에게 요청의 전달을 맡긴다.
- 핸들러 어댑터는 해당 컨트롤러에 요청을 전달한다.
- 컨트롤러는 비즈니스 로직을 처리한 후에 반환할 뷰의 이름을 반환한다.
- 디스패처 서블릿은 뷰 리졸버를 통해 반환할 뷰를 찾는다.
- 디스패처 서블릿은 컨트롤러에서 뷰에 전달할 데이터를 추가한다.
- 데이터가 추가된 뷰를 반환한다.
- 제어의 역전
객체의 생성이나 라이프사이클 등 객체에 대한 제어권을 개발자가 아닌 IoC 컨테이너에게 넘기는 것.
IoC 컨테이너에 객체를 생성하면 객체끼리 의존성을 주입해줌.
컨테이너에 등록한 객체-> 빈
- 빈 등록 방법
- @Component 어노테이션 사용
@Controller, @Service, @Repository 어노테이션 사용하는 것 모두 포함됨 - @Configuration 어노테이션을 붙인 설정 클래스를 따로 만들고, 그 클래스 안에 @Bean 어노테이션을 붙인 메소드를 생성함. 메소드 안에서 빈으로 등록할 객체를 생성
- 의존성 주입
필요한 객체를 직접 생성하는 것이 아닌 외부로부터 객체를 받아서 생성하는 것.
생성자 주입, 필드 주입, setter 주입을 통해 DI 가능.
생성자 주입 권장: 순환 참조 방지, 불변성, 테스트용이
- 관점지향 프로그래밍
핵심 비지니스 로직에 있는 공통 관심사항(ex: 로깅, 보안, 트랜잭션)을 분리.
중복 코드 제거, 재활용성, 변화수용 용이성
- 서블릿
자바를 사용해 웹 페이지를 동적으로 생성하는 프로그래밍 기술.
MVC에서 컨트롤러 역할을 함
- 싱글톤 패턴
스프링에서 빈 생성시 default로 싱글톤 패턴이 적용.
컨테이너를 통해 직접 싱글톤 객체를 생성하고 관리.
요청이 들어올 때마다 매번 객체를 생성하지 않고 이미 만들어진 객체를 공유하기 때문에 효율적.
- @Transactional
클래스나 메서드에 이 어노테이션이 추가되면 트랜잭션 기능이 적용된 프록시 객체가 생성되어 메소드 전후로 트랜잭션 처리 수행.
* 프록시: 원래 객체를 감싸고 있는 같은 타입의 객체.
https://github.com/JaeYeopHan/Interview_Question_for_Beginner
https://dev-coco.tistory.com/category/%F0%9F%93%8CETC
https://velog.io/@kdhyo/JavaTransactional-Annotation-%EC%95%8C%EA%B3%A0-%EC%93%B0%EC%9E%90-26her30h