본문 바로가기

Spring17

[Spring] @ExceptionHandler, @ControllerAdvice를 통한 예외 처리 스프링은 API 예외를 처리하기 위한 @ExceptionHandler이란 어노테이션을 제공한다. @ExceptionHandler 에러를 전달하기 위한 DTO이다 @Data @AllArgsConstructor public class ErrorResult { private String code; private String message; } 다음은 예외를 받고자 하는 컨트롤러에 @ExceptionHandler를 사용한 예시이다. @Slf4j @RestController public class ApiExceptionV2Controller { @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(IllegalArgumentException.class) publi.. 2023. 3. 24.
[Spring] 로그인 처리(쿠키, 세션) 로그인 처리하기 - 쿠키 사용 로그인의 상태를 유지하기 위해 쿠키를 사용할 수 있다. 서버에서 로그인에 성공하면 HTTP 응답에 쿠키를 담아서 브라우저에 전달하면 브라우저는 앞으로 해당 쿠키를 지속해서 보내준다. 쿠키를 생성한 뒤에 클라이언트에서 쿠키 저장소에서 조회하여 자동으로 쿠키를 서버에 넘긴다. 쿠키와 보안 문제 보안문제 쿠키 값은 임의로 변경할 수 있다. 쿠키에 보관된 정보는 훔쳐갈 수 있다. 해커가 쿠키를 한번 훔쳐가면 평생 사용할 수 있다. 대안 쿠키에 중요한 값을 노출하지 않고, 사용자 별로 예측 불가능한 임의의 토큰(랜덤 값)을 노출하고, 서버에서 토큰과 사용자 id를 매핑해서 인식한다. 그리고 서버에서 토큰을 관리한다. 토큰은 해커가 임의의 값을 넣어도 찾을 수 없도록 예상 불가능 해야.. 2023. 1. 24.
[Spring] 검증(Bean Validation) Bean Validation 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준으로 검증로직을 모든 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화한 것이 바로 Bean Validation이다. 쉽게 말해 검증 애노테이션과 여러 인터페이스의 모음이라고 볼 수 있다. Bean Validation을 잘 활용하면 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있다 Bean Validation 의존관계 추가 Bean Validation을 사용하려면 다음 의존관계를 build.gradle에 추가해야 한다. //build.gradle implementation 'org.springframework.boot:spring-boot-starter-validation' .. 2023. 1. 20.
[Spring] 메시지와 국제화 메시지 화면에 보이는 '상품명'이라는 단어를 모두 '상품이름'으로 바꾸기 위해서는 해당되는 모든 html 파일을 변경해야 한다. 화면수가 적다면 문제가 되지 않겠지만, 화면수가 수십 개 이상이라면 매우 번거로운 작업일 것이다. 이러한 문제점을 해결하기 위해 스프링에서 다양한 메시지를 한 곳에 관리하는 기능을 지원한다. //messages.properties item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quantity=수량 국제화 메시지에서 설명한 메시지 파일(messages.properties)을 나라별로 별도로 관리하면 서비스를 국제화할 수 있다. 영어를 사용하는 이용자 //messages_en.properties item=Item item... 2023. 1. 16.
[Spring] @ModelAttribute 사용법 다음과 같은 객체가 있다고 해보자. @Data public class HelloData { private String username; private int age; } HTTP 요청 파라미터를 받아서 그 값을 객체에 저장하기 위해서는 @RequestParam을 통해 값을 받고 객체에 전달하는 방식으로 할 수 있을 것이다. @RequestParam String username; @RequestParam int age; HelloData data = new HelloData(); data.setUsername(username); data.setAge(age) 하지만 이렇게 직접 하는 방식은 번거롭다. 스프링은 @ModelAttribute를 통해 이 과정을 완전히 자동화해 준다. @ModelAttribute.. 2023. 1. 13.
[Spring] @RequestParam 사용법 스프링에서는 Http 요청 파라미터 값을 편리하게 사용하게 해주는 @RequestParam을 지원한다. HttpServletRequest의 request.getParameter의 기능과 동일하다고 보면 된다. @RequestParam 사용법 @ResponseBody @RequestMapping("/request-param-v1") public String requestParamV2( @RequestParam("username") String memberName, @RequestParam("age") int memberAge) { log.info("username={}, age={}", memberName, memberAge); return "ok"; } Http 요청 파라미터의 이름으로 바인딩하여 그 값.. 2023. 1. 10.