본문 바로가기

질문과 답변/Java, Spring

Spring, Spring Boot (4)

 

Spring 에 사용된 2개의 아키텍쳐인 MVC 아키텍쳐3-Layered 아키텍쳐를 설명하시오

더보기

Spring MVC 아키텍쳐는 요청의 라우팅처리 방식의 연결을 지원합니다.

 

DispatcherServlet이 HandlerMapping를 통해 매핑한 Controller에게
HandlerAdapter가 해당 controller의 매핑된 메서드의 실행을 위임합니다.

이는 Service, Repository를 통해 Model을 형성하고,

Model과 Viewname, ViewTemplate을 통해 ViewResolver에서 View를 생성합니다.

이를 DispatcherServlet이 반환하는 일련의 과정입니다.

 

이 때 MVC 아키텍쳐 전체가 Presentation Layer,

Service를 통해 비즈니스 로직을 실행시키는 부분이 Business Layer,

비즈니스 구현을 위한 데이터 조회 및 CRUD를 제공하는 부분이 Data Access Layer 가 되며

이 3개의 Layer로 상세 구현 시 관심사를 분리하는 방식이 바로 3-Layered 아키텍쳐입니다.

 

@RepositoryDAO 의 차이에 대해 설명하시오

더보기

DAO는 DB에 직결된 CRUD 함수를 전부 모아둔 인터페이스이다.

구현체는 일반적으로 EntityManager를 통해 수행되며, DB에 접속할 수 있는 모든 메서드를 다 만들어둔 것이다.

따라서 이는 DB의 모양과 완전히 동일하다.

 

반면, Repository는 DAO에서 필요한 메서드만을 뽑아온 것이다.

(추가 설명 필요)

 

DAODTO 각각을 설명해보시오

더보기

DAO는 DB와 직결된 CRUD를 모아둔 인터페이스이며,

DTO는 요청으로 들어온 JSON String을 presentation layer에서 처리할 수 있게 역직렬화 한 객체이다.

 

MSAMonolithic 의 차이에 대해 설명해보시오. 그리고 API GW 는 무엇인가?

더보기

Monolithic은 서버 내의 모든 인스턴스가 동일하고 완전한 서비스를 제공할 수 있는 아키텍쳐이며,

만약 한 개의 인스턴스만이 존재할 경우 SPOF에 취약합니다.

또한 규모가 커질 경우, 유지보수가 어려워 집니다.

 

한편 MSA는 서버 내의 인스턴스가 처리하는 각기 다른 서비스를 제공합니다.

이때 API GW를 두어 요청에 대한 API 호출을 중앙화 한다.

이를 통해 Swagger를 통해 버전을 관리하고

어떤 API의 요청을 어떤 서버가 응답할지 Consumer와 Producer 관리를 한다.

또한, api gw는 로드밸런싱을 통한 트래픽 제어의 역할도 할 수 있다.

 

@JsonProperty@JsonFormat 은 어떨 때 사용하는지, 상세하게는 어떤 라이브러리것인지 설명하라

더보기

두 개다 JSON과 DTO사이의 직렬화와 역직렬화를 관장하는 Jackson 라이브러리의 어노테이션이다.

@JsonProperty는 DTO에서 사용하는 field를 반환할 때

JSON 키 값과 DTO 필드 간 이름을 맞추기 위해 사용한다.

 

@JsonFormat은 JSON 내 날짜 표기 시 포맷을 지정하기 위해 사용한다.

해당 날짜 객체의 타입변환과 이에 맞는 pattern을 지정할 수도 있다.

가령 yyyy년-mm월-dd일 정도로 현재 시간을 한글을 포함해 간단히 요약하는 포맷으로 변환이 가능하다.

 

ResponseEntity<T> 은 무엇인가? 어떻게 활용할 수 있는가?

더보기

ResponseEntity는 T라는 객체를 ResponseBody, 즉 JSON 형태로 반환함과 동시에
HttpStatus 도 보내기 위해 사용하는 래퍼 클래스이다.

builder 패턴을 사용해 반환하고자 하는 객체와 HttpStatus를 래핑한다.

httpStatus의 경우, 200 OK라면 ResponseEntity.ok.body(object)와 같은 변형 빌더 패턴으로도 사용이 가능해

다양한 응답 상태를 쉽게 제어할 수 있다.

 

Controller 에 대한 Exception 처리를 중앙화하기 위해 사용하는 Spring 어노테이션은 무엇인가?

더보기

@ControllerAdvice와 @ExceptionHandler이다.

전자를 통해 중앙화할 클래스를 Bean으로 선언해 싱글톤으로 사용하고,

특정 예외를 처리할 메서드를 정의할 때 사용한다.

 

추가로, @RestControllerAdvice를 사용한다면 REST API용으로도 사용할 수 있다.

 

@JsonCreator@JsonValue 는 어떨 때 사용하는지 설명하라

더보기

@JsonCreator는 요청으로부터 입력받은 값이 DTO에 직접 매핑되지 않을 때 역직렬화하기 위해 사용한다.

복잡한 생성자 혹은 정적 팩토리 메서드에 매핑할 때 사용한다.

 

@JsonValue는 반환할 값이 JSON에 직접 매핑되지 않을 때 직렬화하기 위해 사용한다.

주로 Enum을 직렬화 할 때 사용한다.

 

@JsonPropertyOrder 는 어떨때 사용하는가?

더보기

JSON 내 프로퍼티가 많을 때 이것의 순서를 결정할 때 사용한다.

DTO내 필드의 순서가 email, name, id와 같은 가독성이 떨어지는 순서일 경우,

이를 통해 JSON으로 반환할 때는 id, name, email과 같이 가독성 좋게 바꾸는 형식으로 사용할 수 있다.

 

'질문과 답변 > Java, Spring' 카테고리의 다른 글

Java, JVM  (1) 2024.11.13
Spring, Spring Boot (3)  (0) 2024.11.02
Spring, Spring Boot (2)  (0) 2024.10.31
Spring, Spring Boot (1)  (1) 2024.10.25