1번 - Spring MVC 프레임워크의 요청처리 과정에 대해서 설명해 주세요.
2번- Spring MVC에서 제공하는 CSR(Client Side Rendering)과 SSR(Server Side Rendering) 방식에 대해서 설명해 주세요.
csr ,ssr을 설명하기 전에 spa와 mpa를 설명하도록하겠습니다
오늘날 어플리케이션 개발을 한다고 했을 때 리액트, 뷰, 앵글러와 같은 자바스크립트 기반 프레임워크를 사용해서 spa를 개발하게 됩니다
spa란 싱글 페이지 어플리케이션의 약자로 하나의 페이지로 구성된 웹 어플리케이션입니다. (php, jsp)
어플리케이션을 이용할 때 헤더는 고정되어있고 메뉴를 선택하면 클릭한 부분이 변경되거나 메인만 변경되는 것이 spa입니다
mpa란 멀티 페이지 어플리케이션의 약자로 탭을 이동할 때마다 서버로부터 HTML을 새로 받아와 페이지 전체를 새로 바꾸는 전통적인 웹페이지 구동 방식입니다
spa와 mpa를 먼저 얘기한 이유는 csr,ssr 이 두가지와 밀접한 관계를 가지고 있습니다.
일반적으로 spa 페이지 구성 방식에는 csr 랜더링 방식을, mpa 페이지 구성방식에는 ssr 렌더링 방식을 사용합니다
spa방식은 정적웹페이지를 초반에 모두 다운로드하고 그 이후 새로운 페이지 요청이 있을 때 페이지 갱신에 필요한 데이터를 전달받아서 클라이언트쪽에서 자연스럽게 렌더링하게 되어 csr방식을 사용하게 되고
mpa는 새로운 요청이 있을 때 마다 서버에서 이미 랜더링 된 정적 리소스를 받아오기 때문에 랜더링방식으로 ssr방식을 사용하게 됩니다
csr, ssr과 더불어 ssg도 같이 배우게 되는데
ssg는 스태틱 사이드 제네레이션으로 ssr방식과 비슷하지만 언제 데이터가 만들어지느냐에 따라 달라집니다
ssr은 요청할 때 즉시 만들게되므로 데이터가 달라져서 미리 만들어 두기 어려운 페이지에 적합하고
ssg는 미리 다 만들어두니까 바뀔일이 거의 없는 페이지에 적합합니다.
3번 - Spring MVc에서 REST API 엔드포인트를 구현하기 위해 사용되는 애너테이션들에 대해서 설명해 주세요.
- @Controller, @RestController, @RequestMapping, @GetMapping, @PostMapping, @PatchMapping, @DeleteMapping 등
- RestController
:해당 클래스가 REST API의 리소스(자원,Resource)를 처지하기 위한 API 엔드포인트로 동작함을 정의한다
:@RestController가 추가된 클래스는 애플리케이션 로딩 시, Spring Bean으로 등록해준다. - RequestMapping
:클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드(Handler Method)를 매핑해주는 역할을 한다
:Contoller 클래스 레벨에 추가하여 클래스 전체에 사용되는 공통 URL(Base URL)설정을 한다 - GetMapping
:클라이언트가 서버에 리소스를 조회할 때 사용하는 애너테이션이다 - PostMapping
:PostMapping은 클라이언트의 요청 데이터를 서버에 생성할 때 사용하는 애너테이션이며, 클라이언트 쪽에서 요청 전송시,HTTP Method 타입을 동일하게 맞춰주어야 한다. - PatchMapping
:클라이언트가 서버에 데이터를 변경할 때 사용하는 애너테이션으로 일부분 변경시 사용한다 - PutMapping
:클라이언트가 서버에 데이터를 변경할 때 사용하는 애너테이션으로 데이터를 덮어쓸때 사용된다
4번- Controller에서 응답 객체로 사용하는 ResponseEntity에 대해서 설명해 주세요.
- ResponseEntity 의 장점 @
5번 - Rest Client가 무엇인지 설명해 주세요.
6번 - Spring 에서 사용하는 Rest Client에 대해서 설명해 주세요.
7번 - DTO가 무엇인지 설명해 주세요.
8번 - DTO의 장단점에 대해서 설명해 주세요.
9번 - DTO 클래스의 Request Body에 대한 유효성 검증 방법에 대해서 설명해 주세요.
예외 처리
10번 - Spring MVC에서의 예외 처리 기법에 대해서 설명해주세요.
- Controller내에서의 @ExceptionHandler 상용
- 글로벌 Exception 처리
- 비즈니스 로직 Exception 처리
✔ 데이터 액세스 계층
11번 - ORM이 무엇인지 설명해 주세요.
12번 - Spring JDBC, Spring Data JDBC, Spring Data JPA의 차이점을 설명해 주세요.
13번 - Spring Data JDBC에서의 애그리거트와 애그리거트 루트에 대해서 설명해 주세요.
14번 - JPA에서 의미하는 Persist에 대한 의미를 설명해 주세요.
15번 - JPA의 영속성 컨텍스트에 대해서 설명해 주세요.
16번 - JPA의 단일 엔티티 매핑 방법에 대해서 설명해 주세요.
- @Entity, @Table, @Id, @GeneratedValue, @Column 등
17번 - JPA의 엔티티 간 연관 관계 매핑에 대해서 설명해 주세요.
- @OneToOne, @ManyToOne, @OneToMany 등
- mappedBy 속성에 대한 설명
✔ 트랜잭션
18번 - 트랜잭션이 무엇인지 설명해 주세요.
두 개의 작업들이 마치 하나의 그룹처럼 묶여서 처리되는 중에 둘 중 하나라도 처리에 실패할 경우 애플리케이션의 신뢰성이 깨지는 상황이 발생한다. 이처럼 트랜잭션은 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 처리 단위인데, 무조건 여러 개의 작업을 그룹으로 묶는다고 해서 트랜잭션이라고 부를 수 있는 게 아니라 물리적으로는 여러 개의 작업이지만 논리적으로는 마치 하나의 작업으로 인식해서 전부 성공하든지 전부 실패하든지 둘 중 하나로만 처리되어야 트랜잭션의 의미를 가진다.
이러한 All or Nothing이라는 트랜잭션 처리 방식은 애플리케이션에서 사용하는 데이터의 무결성을 보장하는 핵심적인 역할을 한다.
ACID원칙
트랜잭션의 특징을 이야기 할 때는 일반적으로 ACID 원칙을 이용한다.
- 원자성(Atomicity) 트랜잭션에서의 원자성이란 작업을 더이상 쪼갤 수 없음을 의미한다.
논리적으로 하나의 작업으로 인식해서 둘다 성공하든지 둘다 실패하든지 둘중 하나로만 처리되는 것이 보장되어야 한다 - 일관성(Consistency) 일관성은 트랜잭션이 에러없이 성공적으로 종료될 경우, 비즈니스 로직에서 의도하는대로 일관성있게 저장되거나 변경되는 것을 의미한다. 100만원을 인출했는데 120만원이 인출되었다고 조회된다면 일관성에 위배 되는 것이다.
- 격리성(Isolation) 격리성은 여러 개의 트랜잭션이 실행될 경우 각각 독립적으로 실행이 되어야 함을 의미한다
격리성을 이해하기 위해서는 CPU가 프로세스를 처리하는 과정을 이해하고 있는것이 좋다
예를들어 우리가 컴퓨터에서 워드 작업을 하고있고, 동시에 뮤직 플레이어로 음악을 듣고있다면 우리눈에는 보이지 않지만 CPU는 위 두가지 프로세스를 아주 빠른 속도로 번갈아가면서 실행을 시킨다
이처럼 데이터베이스 역시 성능 향상을 목적으로 한 개 이상의 트랜잭션을 번갈아가면서 처리할 수 있는데, 이 경우 각 트랜잭션이 다른 트랜잭션에 영향을 주지 않고 독립적으로 실행이 되어야 한다는 것이 바로 격리성이다. - 지속성(Durability) 트랜잭션이 완료되면 그 결과는 지속되어야 한다는 의미.
즉, 지속성은 데이터베이스가 종료되어도 데이터는 물리적인 장소에 저장되어 지속적으로 유지되어야한다는 의미이다.
19번 - 트랜잭션 경계가 무엇인지 설명해 주세요.
20번 - Spring에서 트랜잭션을 설정하는 방법에 대해서 설명해 주세요.
- @Transactional 애너테이션 방식
- AOP 방식
21번 - 분산 트랜잭션이 무엇인지 설명해주세요.
22번 - 트랜잭션 전파(Transaction Propagation)가 무엇인지 설명해 주세요.
23번 - 트랜잭션 격리 레벨(Transaction Isolation Level)이 무엇인지 설명해 주세요.
✔ 테스팅
24번 - 기능 테스트, 통합 테스트, 슬라이스 테스트, 단위 테스트에 대해서 설명해 주세요.
25번 - JUnit의 Assertion이 무엇을 의미하는지 설명해 주세요.
26번 - Given - When - Then 패턴에 대해서 설명해 주세요.
27번 - MockMvc를 이용해 Spring MVC의 API 엔드포인트인 Controller를 테스트하는 방법을 설명해 주세요.
28번 - Mock이 무엇인지 설명해 주세요.
29번 - Stub과 Stubbing이 무엇인지 설명해 주세요.
30번 - Mockito가 무엇인지, Mockito의 역할에 대해서 설명해 주세요.
31번 - @SpringBootTest와 @WebMvcTest의 차이점을 설명해 주세요.
✔ API 문서화
32번 - Swagger와 Spring Rest Docs의 장단점을 설명해 주세요.
33번 - Spring Rest Docs의 API 문서화 동작 방식에 대해서 설명해 주세요.
34번 - Spring Boot 기반 애플리케이션을 빌드하는 방법에 대해서 설명해 주세요.
35번 - Spring Boot 기반 애플리케이션 빌드 시, 주로 사용하는 프로파일(Profile)에 대해서 설명해 주세요.
36번 - Spring Boot 애플리케이션 실행 파일을 배포하는 방법에 대해서 설명해 주세요.
- 전통적인 배포 방식
- 클라우드 서비스에 배포하는 방식
'앞으로 공부할것들' 카테고리의 다른 글
[어노테이션 정리][계속해서 수정중] (0) | 2022.11.13 |
---|---|
[Spring][기술면접16문] (0) | 2022.10.18 |
[Spring][NodeJs] (0) | 2022.10.18 |
과제 - 요약하고 정리하기 (0) | 2022.10.02 |
[DB]Docker (0) | 2022.09.20 |