개발/Spring Boot MVC 9

서비스로직에서 발생될 수 있는 예외처리

저번에는 DTO에대한 유효성검증처리 및 URI의 변수 유효성검증처리를 RestControllerAdvice 에 적용을 해보았다 이번에는 Service로직에서 발생될 수 있는 RuntimeException 및 사용자 정의 예외를 사용해보자. 서비스로직에서 발생할 수있는 예외처리를 예로 들면 - 시스템 내부에서 조회하려는 리소스(자원,Resource)가 없는 경우 - 백엔드 서버 쪽에서 예외를 의도적으로 던져서 클라이언트 쪽에 에러가 발생한 정보를 알려줘야할 경우 가 있다. 이 부분에 대해서는 RuntimeException 객체에 적적한 예외메세지를 포함한 후에 메서드 밖으로 throw 해주면 된다. throw해준 뒤 공통으로 예외처리를 하는 globalExceptionAdvice클래스에서 받은 Runtim..

@ExceptionHandler를 이용한 예외 처리

예외 처리를 하는 이유 클라이언트와 서버간 통신을 하다보면 요청값이 틀리거나 잘못된 정보를 요청할시 에러가 뜨게되는데 그 에러를 예외처리 해줌으로써 더욱 더 명확히 에러가 왜 발생되었는지를 클라이언트에게 알려줄 수 있다. @ExceptionHandler를 사용해 Controller에 메서드를 만들게 되면 유효성 검증과정에서 내부적으로 던져진 MethodArgumentNotValidException을 @ExceptionHandler를 사용한 메서드를 통해 들어오게 됩니다. MethodArgumentNotValidException 객체에서 getBindingResult().getFieldErrors()통해 발생한 에러정보를 확인할 수 있습니다. 그렇기 때문에 필요한 정보만 넘겨주기 위해서 Error Resp..

MapStruct를 이용하여 Mapper 자동 생성

개발자가 일일이 수작업으로 매퍼 클래스를 만드는 것은 비효율적이기 때문에 MapStruct가 매퍼 클래스를 자동으로 구현해 줌으로써 개발자의 생산성을 향상 해줄 수 있다고 한다. MapStruct란? 매퍼 클래스를 자동으로 구현해 줌으로써 개발자의 생산성을 향상해줄 수 있다. MapStruct 의존 라이브러리 추가 dependencies { implementation 'org.mapstruct:mapstruct:1.5.3.Final' // mapstruct annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' // mapstruct } MapStruct를 사용하려면 Mapper를 인터페이스로 정의하여야하고 @Mapper(component..

DI를 적용한 비즈니스 계층과 API 계층 연동

Spring DI를 사용하면 클래스간의 결합을 느슨한 결합으로 손쉽게 만들어 줄 수 있다. DI를 적용하기 위한 조건 주입을 받는 클래스와 주입 대상 클래스가 모두 Spring Bean이어야 함. DI 적용 방법 스프링 빈으로 등록된 객체를 생성자를 통해 주입 private final UserService userService; public UserController(UserService userService) { this.userService = userService; } 누가 UserService를 주입 하는가? Spring프레임워크에서 애플리케이션 로드 시, ApplicationContext에 있는 Been객체를 찾아 주입 API계층에서의 Controller는 @RestController을 통해 S..

API계층 ←→ 서비스 계층

서비스계층은 Controller에서 전달 받은 요청을 실제로 처리하는 비즈니스 로직을 수행 후 결과 값을 다시 API계층으로 리턴해주는 역할을 합니다. public class UserService { //회원가입 public User createUser(User user){ return null; } //회원수정 public User updateUser(User user){ return null; } //회원찾기 public User findUser(long userId){ return null; } //회원전체출력 public List findUsers(){ return null; } //회원삭제 public void deleteUser(long userId){ } 컨트롤러 클래스의 핸들러메서드와 서비..

MVC패턴 계층 기반 패키지 구조

Spring Boot 팀에서는 테스트와 리팩토링이 용이하고, 향후에 마이크로 서비스 시스템으로서의 분리가 상대적으로 용이한 기능 기반 패키지구조 사용을 권장을 하고있다. 위 사진은 팀프로젝트인 gigker 프로젝트 때 패키지 목록이다. 빨간줄로 표시된 부분을 보면 DB 설계 후 나온 각각의 테이블을 기준으로 패키지를 각각 만든다.

Controller 클래스 설계 및 구조 생성

Controller 구조 작성을 위해서는 (1) @RestController -레스트컨트롤러를 추가하면 해당 클래스가 REST API의 리소스를 처리하기 위한 API 엔드포인트로 동작함을 정의합니다. -애플리케이션 로딩 시, Spring Bean으로 등록해줍니다. (2)@RequestMapping -클라이언트의 요청과 클라이언트 요청을 처리하는 핸들러 메서드를 매핑 해주는 역할을 합니다. -클래스 전체에 사용되는 공통 URL설정을 합니다. (3)@SpringBootApplication -내부적으로 자동구성활성화,@Component가 붙은 클래스를 Spring Bean으로 등록하는 기능활성화, @Configuration 붙--은 클래스를 자동으로 찾고 Bean 등록 활성화 이렇게 세가지 일을 해줍니다. (..

Spring Web MVC

Spring MVC Model View Controller 의 약자로 클라이언트의 요청을 편리하게 처리해주는 프레임워크이고 서블릿API를 기반으로 동작을 하고 있는 모듈입니다. Model Model은 Spring MVC에서 M에 해당합니다. 클라이언트에서 요청한 부분들을 비지니스로직을 거쳐서 나온 데이터를 Model이라고 합니다. View View는 Spring MVC에서 V에 해당합니다. View는 Model데이터를 받아서 화면에 데이터를 전달 해줘야 하는데, 그 화면을 View라고 합니다. View는 겉으로 보여지는 화면의 리소스를 제공하는 역할을 합니다. Controller Controller는 Spring MVC에서 C에 해당합니다. 클라이언트에서 요청을 직접적으로 받는 엔드포인트이고 Model과..