개발 26

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

저번에는 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){ } 컨트롤러 클래스의 핸들러메서드와 서비..

들어오는 데이터(DTO)에서 유효성 검증

@RequestBody를 통해 JSON데이터가 자바객체로 변환하면서 들어온 데이터 DTO에서 값들에 대한 유효성을 처리해보자. 유효성 검증을 위한 의존 라이브러리 추가 Spring Boot에서 지원하는 Starter가 필요하다. build.gradle파일의 dependencies 항목에 implementation 'org.springframework.boot:spring-boot-starter-validation'// validation 을 추가한다. 주로 사용하는 유효성 애너테이션 @Email - 유효한 이메일 주소인지를 검증 - 유효한 검증에 실패하면 내장된 디폴트 에러 메세지가 콘솔에 출력 @NotBlank - 정보가 비어있지 않은지 검증 - null 값이나 공백(""), 스페이스(" ") 같은 값..

개발/Spring 2023.08.14

JSON으로 들어오는 HTTP 요청 객체로 한번에 받기

컨트롤러의 핸들러메서드에서 JSON으로 HTTP요청을 받을 때 DTO객체를 생성하여 한번에 요청 데이터를 받아보자 방법은 간단하다 핸들러메서드의 매개변수를 받는 공간에 스프링 프레임워크에서 지원하는 @RequestBody 애너테이션을 추가하여 받을 수 있다. 스프링 프레임워크에서 지원하는 @RequestBody 애너테이션은 JSON 형식의 RequestBody를 Dto클래스의 객체로 변환을 시켜주는 역할을 한다. JSON 형식이 아닌 다른 형식의 데이터를 전송한다면, Spring 내부에서 "Unsupported Media Type" 같은 에러메세지를 전달한다. 그럼 dto객체로 변환하여 비지니스로직을 거쳐 반환하려는 데이터를 다시 JSON으로 내보내야할 때는 어떻게 처리할 수 있을까? 이것도 스프링 프레..

개발/Spring 2023.08.14

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

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

AWS로Https 적용하기

https 적용 기존의 배포했던 S3정적웹호스트에서 HTTPS를 적용해보고자 합니다. 도메인을 발급하였습니다. https://www.gabia.com/ 웹을 넘어 클라우드로. 가비아 그룹웨어부터 멀티클라우드까지 하나의 클라우드 허브 www.gabia.com 500원으로 1년을 결제했네요 먼저 프론트에서 HTTPS를 설정 해주겠습니다. S3에서 배포했던 URI을 https 적용해주기 위해 AWS의 CloudFront를 설정하겠습니다. CloudFront :전세계 엣지 로케이션에서 캐싱을 해두기 때문에 유저가 가까운 엣지에 요청을 보내서 속도가 빠르다고하고 S3보다 저렴하다고도 하네요. 이렇게 CloudFront 배포 생성 완료 저희 프론트는 REACT 프로젝트이기 때문에 HTTP Error Code를 변경..

개발 2023.03.24