반응형 Spring/스프링 이론14 @ModelAttribute, @RequestBody의 차이점 @ModelAttribute와 @RequestBody 어노테이션은 Spring MVC 프레임워크에서 사용됩니다. HTTP 요청의 데이터를 컨트롤러 메서드에서 처리하기 위해서 사용됩니다. 위의 예시 코드를 활용해서 2개의 어노테이션의 사용 방법과 동작에 대해 알아보겠습니다. 코드 분석 @RequestBody RequestBody는 HTTP 요청의 본문(body)에 담긴 데이터를 객체로 바인딩하기 위해 사용됩니다. 컨트롤러 메서드의 파라미터 앞에 @RequestBody를 사용하여 해당 파라미터의 요청 본문의 데이터를 변환하여 객체로 받아올 수 있습니다. 주로 JSON, XML 등의 데이터 형식의 요청을 처리할 때 사용됩니다. @PostMapping("/test") public ResponseEntity te.. Spring/스프링 이론 2024. 2. 4. Pageable을 처리하는 여러 방법 SQL을 이용한 Pageable 나타내기 select * from chat_room order by created_at desc limit 0, 25; 위와 같은 SQL문을 Spring에서 Pageable을 이용하는 방법에 대해 알아보겠습니다. PageableDefault 컨트롤러를 통해 페이지 정보를 받는 @PageableDefault 어노테이션을 사용하는 방법에 대해 알아보겠습니다. @GetMapping public ResponseEntity findAll( @PageableDefault(size = 5, sort = "createdAt", direction = Direction.DESC) Pageable pageable) { return ResponseEntity.ok(chatRoomService... Spring/스프링 이론 2024. 1. 25. Message Broker STOMP 개념 서론 Message를 송-수신할 때 사용하는 MessageBroker 중 STOMP 프로토콜에 대해 알아보겠습니다. STOMP란? Simple Text Oriented Messaging Protocol 의 약자로써, WebSocket의 서브 프로토콜 입니다. 웹소켓은 Text와 Binary 형식의 타입을 정하긴 하지만, 어떠한 규격도 정해져있지 않습니다. 하지만 STOMP의 경우에는 다음과 같은 형식을 따라갑니다. COMMAND header1:value1 header2:value2 Body^@ STOMP의 커맨드 목록은 다음과 같습니다. 클라이언트 프레임 SEND SUBSCRIBE UNSUBSCRIBE BEGIN COMMIT ABORT ACK NACK DISCONNECT 서버 프레임 MESSAGE REC.. Spring/스프링 이론 2024. 1. 24. Http Interface 사용하기 Spring 6.0에서 도입된 HttpInterface에 대해 알아보겠습니다. Http Interface는 HTTP 요청을 위한 서비스를 자바 인터페이스와 어노테이션으로 정의할 수 있도록 도와준다. 그리고 해당 서비스를 구현하는 프록시 객체를 생성하면 이를 통해 손쉽게 HTTP 요청을 보낼 수 있다. 공식문서 링크 : https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-http-interface REST Clients :: Spring Framework WebClient is a non-blocking, reactive client to perform HTTP requests. It was introduc.. Spring/스프링 이론 2024. 1. 8. @RequestBody vs @RequestParam vs @RequestPart 토이프로젝트를 진행 중인데 파일을 업로드 하고 싶을 때 요청을 받을 때 어떤 구문을 사용해야하는지 알아보다가 @RequestPart 문에 사용해야한다는 것을 알았습니다. HTTP 요청할 때 사용하는 어노테이션인 @RequestBody 와 @RequestPart 더불어 @RequestParam 각각 특징에 대해 알아보겠습니다. @RequestParam RequestParam은 Servlet request 파라미터에 접근하기 위해 사용한다. MultipartFile 과 같은 것들도 동일하게 작동한다. 단, 파라미터가 String이나 MultiFile이 아닌 경우, Converter 나 PropertyEditor에 의해 처리된다. 1개의 HTTP 요청 파라미터를 받기 위해서 사용하며, 파라미터 여부가 defa.. Spring/스프링 이론 2024. 1. 5. SpringBoot Swagger 3.x.x 적용하기 SpringBoot 3.x.x Swagger 적용 SpringBoot 버전을 3.0.0 이상 사용하는 프로젝트에서 Swagger를 도입할 때 사용해야하는 Swagger 라이브러리에 대해 알아보겠습니다. 기존 SpringBoot 3.0.0 이하 버전인 경우 이전 포스팅에서 확인하실 수 있습니다. https://miiro-under.tistory.com/209 Swagger - REST API 명세 문서화 명세 문서화 명세 : 해당 API가 어떤 로직을 수행하는지 설명하고 이 로직을 수행하기 위해 어떤 값을 요청하며 이에 따른 응답값으로는 무엇을 받을 수 있는 지 정리한 자료이다. API는 개발 과정 miiro-under.tistory.com 의존성 라이브러리 설정 SpringBoot 3.0.0 이상부터는 .. Spring/스프링 이론 2023. 12. 31. 로그인 유저 어노테이션 기반으로 정보 가져오기(@AuthenticationPrincipal 커스텀) 로그인 유저 어노테이션 기반으로 정보 가져오기 이전에 @AuthenticationPrincipal 을 커스텀해서 어노테이션으로 정보를 가져오는 방법에 대해 알아보겠습니다. 로그인 유저 어노테이션 프로젝트의 성능 개선을 어노테이션을 이용해서 해결하는 방법이다. 기존 @AuthencationPrincipal 의 Principal 객체를 사용할 경우 NullException 이 발생하는 경우가 있다. Controller 단에서 Null 체크가 아닌 커스텀으로 ArgumentResolver를 만든 후에 @LoginUser라는 어노테이션을 만들어서 개선하는 방법이다. (1) @LoginUser 어노테이션 생성 @Target(ElementType.PARAMETER) @Retention(RetentionPolicy... Spring/스프링 이론 2023. 12. 24. [Spring Security] @AuthenticationPrincipal 로그인 정보 받아오기 @AuthenticationPrincipal 로그인 정보 받아오기 @AuthenticationPrincipal 을 이용해서 로그인 정보를 받아오는 방법에 대해 알아보겠습니다. 기존 방식 컨트롤러 세션에 저장되어 있는 member의 아이디를 이용해서 조회하여 사용 @GetMapping("/member") public ResponseEntity findMemberInfo(@RequestParam Long id) { return ResponseEntity.ok(memberService.findMemberInfo(id)); } 해당 방식으로 사용하면서의 불합리 1. 로그인 사용자의 정보가 필요할 때마다 매번 서버에 요청해서 DB에 접근해서 데이터를 가져온다. 2. 본인이 아닌데 타인의 정보를 확인할 수 있다. .. Spring/스프링 이론 2023. 12. 23. WebSecurityConfigurerAdapter deprecated 대체하는 방법 WebSecurityConfigurerAdapter 대체 Spring Security 6.0 버전을 기준으로 WebSecurityConfigurerAdapter를 import를 하지 못한다. WebSecurityConfigurerAdapter를 대체하는 방법에 대해 알아보겠습니다. 커스텀 컴포넌트 설정 방법 configure(httpSecurity 설정) 기존 방식의 코드 @Configuration @EnableWebSecurity public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.. Spring/스프링 이론 2023. 12. 8. 스프링부트를 이용한 유효성 검사(feat. Validation) 유효성 검사 어플리케이션의 비즈니스 로직이 올바르게 동작하려면 데이터를 사전 검증하는 작업이 필요합니다. 이를 '유효성 검사' 또는 '데이터 검증' 이라고 부르는데 이를 알아보겠습니다. 일반적인 어플리케이션 유효성 검사 문제점 계층별로 진행하는 유효성 검사는 검증 로직이 각 클래스별로 분산되어 있어서 관리하기가 어렵다 검증 로직 이외로 중복이 많아 여러 곳에 유사한 기능의 코드가 존재할 수 있다. 검증해야할 값이 많다면 검증하는 코드가 길어져서 코드가 복잡하고 가독성이 떨어진다. 문제 해결 방법 이를 해결하기 위해서 자바에서는 Bean Validation 이라는 데이터 유효성 검사 프레임워크를 제공한다. Bean Validation 어노테이션을 통해 다양한 데이터를 검증하는 기능 유효성 검사를 위한 로직.. Spring/스프링 이론 2023. 11. 22. [Spring] 트랜잭션과 @Transactional 이해하기 트랜잭션과 @Transactional 트랜잭션과 스프링에서 사용하는 @Transactional 어노테이션에 관련하여 알아보겠습니다. 트랜잭션이란? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야하는 연산들을 의미한다. 즉, 병행 제어 시 처리되는 작업의 논리적단위입니다. 트랜잭션의 연산 Transaction은 하나의 흐름으로 하나의 실행이 성공하거나, 실패하면 모든 연산을 동일하게 처리한다. ex) A,B,C의 연산을 한 묶음이라고 할때, A는 정상 작동되었지만, B가 실패한다면 A의 작업 이력도 이전으로 돌린다. 커밋 : 하나의 트랜잭션이 성공적으로 끝났으며, 데이터베이스가 일관성 있는 상태로 유지될 때, 트랜잭션이 마무리되었다는 것을 트랜잭션 관리자에게 알리기 위한 연산이다. 롤백 : 트랜.. Spring/스프링 이론 2023. 10. 24. [Spring] @Controller와 @RestController의 차이 Controller Annotation Controller Annotation의 종류인 @Controller와 @RestController의 대한 특징과 차이점에 대해 알아보겠습니다. Controller Component Client의 요청을 직접적으로 받는 Component Client가 url을 통한 요청을 보내면, 해당 url에 매칭되는 controller가 해당 요청을 핸들링한다. @Controller와 @RestController는 모두 Spring에서 Controller를 지정해주기 위한 어노테이션이다. 기본적인 Spring MVC의 Controller인 @Controller와 RESTful 웹 서비스의 Controller @RestController의 주요한 차이점은 @ResponseBody.. Spring/스프링 이론 2023. 10. 15. 이전 1 2 다음