본문 바로가기

스프링

(28)
WebSocket이란? WebSocket 웹 소켓 프로토콜은 TCP 커넥션 위에서 클라이언트와 서버 간 양방향, 전이중 통신 채널을 수립하는 표준화된 방법을 제공한다. 웹소켓의 상호작용은 HTTP 요청에 Upgrade 헤더를 사용하여 웹 소켓 프로토콜로 스위치 한다. HTTP 요청 GET /spring-websocket-portfolio/portfolio HTTP/1.1 Host: localhost:8080 Upgrade: websocket // (1) Connection: Upgrade // (2) Sec-WebSocket-Key: QUIQmkdoq123asodqdpwqeWOE== Sec-WebSocket-Protocol: v10.stomp, v11.stomp Sec-WebSocket-Version: 13 Origin: ht..
Spring ArgumentResolver로 Jwt 복호화 하기 JWT토큰 활용 Spring, Vue를 통해 프로젝트를 개발하다가 현재 요청을 보내는 사용자가 누구인지 확인하는 방법이 있는지 고민을 해보았다. OAuth 2.0, JWT 게시글에서 볼 수 있듯이 JWT의 PAYLOAD에는 Client의 정보가 들어있다. 스프링에서 JWT를 복호화해서 간편하게 가져오게 해주는 API가 있는지는 모르겠지만 경험 삼아 직접 구현해보기로 하였다. RequestHeader 클라이언트에서 JWT 토큰을 Authorization Header에 담아 보내는 것을 알 수 있다. 이 헤더를 컨트롤러에서 받아서 처리하면 된다. @PostMapping public ResponseEntity save(@RequestBody @Valid BoardSaveRequestDto dto, @Reque..
핸들러 메서드: MultipartFile, ResponseEntity MultipartFile - 파일 업로드 시 사용하는 메서드 아규먼트 - MultipartResolver 빈이 설정되어 있어야 사용할 수 있다. (스프링 부트 자동 설정이 해 줌) MultipartAutoConfiguration을 확인해보면 스프링 부트가 빈으로 등록해준 것을 알 수 있다. 추가 설정을 원한다면 applicaiton.properties에서 spring.servlet.mutipart.~~으로 할 수 있다. 예제 resource -> template -> files에 index.html을 생성한다. 주황 박스 부분은 타임리프 if 문을 이용해 message가 존재하면 message를 보여주는 것이고 빨간 박스 부분이 실제로 파일을 전송하기 위한 form이다. enctype을 multipart..
핸들러 메서드: RedirectAttributes, FlashAttributes Redirect URI 매개변수 기존 스프링 Web MVC에서는 model에 기본 primitive type 데이터를 넣고 redirect 하게 되면 URI 쿼리 매개변수에 추가된다. 하지만 스프링 부트는 기본 설정이 비활성화되어 있다. application.properties에 위와 같이 ignore-default-model-on-redirect를 false로 두면 URI 쿼리 매개변수에 추가가 된다. ​이렇게 redirect시 모델에 들어간 primitive type의 데이터들이 URI 매개변수에 추가된 것을 알 수 있다. 하지만 이 설정을 켜면 모든 경우에 적용이 되기 때문에 특정 값들만 URI 매개변수에 추가하고 싶으면 RedirectAttribute를 사용하면 된다. RedirectAttribu..
핸들러 메서드: @SessionAttributes, @SessionAttribute Session은 여러 화면이나 여러 요청에서 사용해야 하는 객체를 공유할 때 사용할 수 있다, HttpSession사용 HttpSession을 사용하여 직접 session을 추가할 수 있다. 테스트를 통해 세션정보를 확인해보면 세션이 정상적으로 저장된 것을 알 수 있다. @SessionAttributes - HttpSession보다 조금 더 추상화된 방법으로 아래와 같이 @SessionAttributes를 사용한다. model.addAttribute의 attributeName이랑 @SessionAttributes의 괄호 안의 값이 같으면 model에 추가될 때 자동으로 세션으로 넣어준다. ​위와 동일한 테스트를 돌려보면 결과가 똑같은 것을 알 수 있다. 세션 처리 이렇게 추가한 세션을 @ModelAttr..
Spring MVC @ModelAttribute, @Valid, @Validated 핸들러 메서드인 @ModelAttribute, @Valid, @Validated에 대해 알아본다. @ModelAttribute URI 패스, 요청 , 세션 등 에 있는 단순 타입 데이터를 복합 타입 객체로 받아오거나 해당 객체를 새로 만들 때 사용할 수 있다. @ModelAttribute를 이용하면 객체로 데이터를 받아올 수 있다. param에 name, limit을 담아 전송한다. @ModelAttribute는 그 값들을 Event 객체에 매핑해준다. name과 limit이 정상적으로 전송되어 Event 객체로 변환된 것을 알 수 있다. param으로만 데이터를 전송했지만 URI 패스, 세션 등에도 똑같이 적용된다. @ModelAttribute 생략 @ModelAttribute는 생략하여도 알아서 변환..
Spring MVC @PathVariable, @MatrixVariable, @RequestParam 요청을 매핑할 수 있는 @PathVariable, @MatrixVariable, @RequestParam에 대해 알아본다. @PathVariable 요청 URI 패턴의 일부를 핸들러 메서드 파라미터로 받을 수 있다. @GetMapping에서 {id} 부분을 메서드의 파라미터에 매핑시켜준다. 해당 파라미터에 @PathVariable을 붙이면 된다. 만약 /hello/23이라는 요청이 들어오면 id에 23이 매핑될 것이다. 원래라면 @PathVariable에 url {id}와 같이 명시된 name을 위와 같이 적어 주어야 한다. 하나 타입 변환을 지원해주므로 주황색 박스의 변수명이 같으면 빨간색 줄을 생략할 수 있다. 테스트 /hello/1로 요청을 보냈을 때 id에 1이 들어간 것을 알 수 있다. 만약 /..
Spring MVC HEAD, OPTIONS HTTP Method 스프링 웹 MVC에서 기본으로 지원해주는 HEAD, OPTIONS HTTP Method를 기본으로 지원해준다. HEAD, OPTIONS Method에 대한 설명은 이전 게시글에서 작성하였다. HEAD HEAD 메서드는 GET과 동일한 요청을 하지만 응답에 본문이 없고 헤더만 존재한다. 결과를 확인해보면 Body에 아무 정보가 없는 것을 알 수 있다. OPTIONS OPTIONS로 요청은 여러 가지 종류의 지원 범위를 응답해준다. @GetMapping을 통해 GET 메서드만 허용하도록 설정하였다. 만약 여기에 OPTIONS 요청을 보내면 Allow Method에는 GET만 포함될 것이다. 결과를 확인해보면 GET이 들어가 있는 것을 알 수 있다. HEAD, OPTIONS는 Spring에서 기본으로 제공하여..