배경websocket 에서의 사용자 인증로직을 구현하다가사용자 정보를 세션으로 관리하는 과정에서ws 연결되어있는 사용자가 http 요청을 보내면 세션이 어떻게 되는 거지? 라는 생각이 들었다분리되어 관리된다는 말을 봤는데 진짜인지 궁금해서 테스트해봤다. 시나리오회원가입ws 연결 맺고 세션에 사용자 정보 저장하기ws 연결 맺은 클라이언트가 http 요청 보내고,http 요청 시 세션 정보(세션 id, 사용자 정보) 로그로 출력해보기예상안1 : ws와 http 세션이 따로 관리되어 세션id가 다르고 사용자 정보가 확인되지 않음예상안2 : 같은 클라이언트로 인식해서 ws연결에서 세션에 저장된 사용자 정보가 출력됨 츄라이~ 결과1. 소켓 연결 전 http 요청으로 확인한 session id : 7491B3D4C..
Spring boot
상황 MockMvc 를 써서 테스트하려면 403 이 발생하는 이슈를 csrf 토큰을 붙여 보내는 방법으로 해결한다. 근데 이 토큰이 request parameter 로 붙어서 가고, rest docs 사용 시 이 항목이 문서화가 안되었다면서 아래와 같은 에러가 난다 Request parameters with the following names were not documented: [_csrf] 파악 테스트 시 csrf 를 해제하는 방법은 못찾겠다 보내는 방법을 바꿔보았다 해결 이런식으로 csrf 를 request param이 아닌 header 에 들어가도록 설정해주면 에러가 더이상 나지 않는다 //then MockHttpServletRequestBuilder requestPost = post("/api/..
상황 @RequestBody 를 가진 POST 요청에 대해서만 계속 400 응답이 온다 파악 ERROR 가 아닌 WARN 단계로 로그가 찍혀서 계속 못보고 지나쳤는데 잘 봐야 한다.. 에러 메세지 : HttpMessageNotReadableException: JSON parse error: Cannot construct instance of ... Spring 은 요청의 직렬화/역직렬화에 Jackson 이라는 라이브러리를 사용하고, Jackson 은 생성자를 반드시 필요로 한다. 해결 그런데 나는 DTO 클래스에 @Data 와 @Builder 만 달고 사용중이었다. (@Builder 는 생성자를 생성해주지 않음) 직전 프로젝트에서 잘 됐던 코드랑 비교했었는데 그때도 이렇게 잘 썼어서 문제가 없는 줄 알았..
상황 로컬에서 실행 시에는 잘 실행됨 배포하니 jenkins로 자동 빌드되는 과정에서 빌드 fail됨 빌드 시 테스트 코드가 실패했다고 확인됨 파악 로컬에서 ./gradlew clean build 로 빌드해보니 에러 발생 (-> 항상 배포 전 미리 빌드해보고 올렸어야 함) 여기서 보이는 로그로는 해결하기 부족해서 ./gradlew test -i 로 테스트 시 발생하는 에러 로그 전체 출력해봄 역시나 안보이던 로그에 쉬운 단서가 있었음! 테스트코드 실행 시 어떤 repository 빈을 못찾았다고 되어있었는데 @WebMvcTest 어노테이션에 특정 컨트롤러를 지정하지 않고 사용했더니 모든 컨트롤러를 다 로드하느라 모든 컨트롤러에서 사용하는 빈을 찾아 넣으려고 했나봄 해결 @WebMvcTest 에 이 테스트..
문제 소켓을 연결해서 web socket 통신 중인 클라이언트가 http 로도 해결 가능한 요청을 할 일이 생기는 경우 (실시간, 양방향 필요없음) 이 요청은 이미 연결되어있는 소켓을 사용해서 ws로 설계하는 게 맞을까? 아니면 http 로 설계하는 게 맞을까? 결론 : http 로 설계하는 것이 좋다 소켓으로도 가능은 하지만 http로 하는 이유는 필요가 없음 : web socket 의 용도는 실시간성 데이터를 받기 위한 것인데 해당 api는 실시간 통신이 필요하지 않은 것이므로 코드 재사용성과 모듈화, 유지보수성 : 나중에 그 api가 다른 곳에서 사용될 수도 있음. 따라서 기능의 성격에 맞게 설계하는 것이 더 적절함 서버 부담에 대해 : 이런 상황이라면 부담만 본다면 웹소켓 통신을 하는 게 부담이 ..
Spring Boot 에서 JPA를 사용해서 자동을 테이블을 생성하기 위해 create-drop 을 사용했다 에러 o.h.t.s.i.ExceptionHandlerLoggedImpl : GenerationTarget encountered exception accepting command : Error executing DDL "..." org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "..." 원인 여러가지 원인이 있다고 나왔는데 나 같은 경우에는 Entity를 구성하는 코드 중에 SQL 예약어가 있었다 최신 날짜를 의미하려고 update라는 컬럼을 사용하려고 했다; ㅋㅋㅋㅋ 어쩐지 다른 테이블들은 잘 생성되는데 한..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm32BO%2FbtrtnEbriVU%2F532NklqpL5CVO7YBRla1rk%2Fimg.png)
[Spring] 스프링 부트 첫걸음 3 : REST API에 데이터베이스 연동 (MySQL, MyBatis) ** 해당 글은 하단 참고란의 영상을 보고 따라서 공부하며 기록한 글입니다. 이전글과 이어집니다. [Spring] 스프링 부트 첫걸음 : Android앱 REST API 서버 만들기 2 (POST, PUT, DELETE 요청, @RequestParam, Postman) [Spring] 스프링 부트 첫걸음 : Android앱 REST API 서버 만들기 2 (PUT요청, @RequestParam, Postman) ** 해당 글은 하단 참고란의 영상을 보고 따라서 공부하며 기록한 글입니다. 이전글과 이어집.. onedaythreecoding.tistory.com 이전글에서 get, post, put,..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCALf5%2Fbtrs7BEFQbx%2Fz8qFSeT41Z2dvWffWoRnwk%2Fimg.png)
[Spring] 스프링 부트 첫걸음 2 : Android앱 REST API 서버 만들기 2 (PUT요청, @RequestParam, Postman) ** 해당 글은 하단 참고란의 영상을 보고 따라서 공부하며 기록한 글입니다. 이전글과 이어집니다. [Spring] 스프링 부트 첫걸음 : Android앱 REST API 서버 만들기 1 ** 해당 글은 하단 참고란의 영상을 보고 따라서 공부하며 기록한 글입니다. IDE 준비 Eclipse STS : Sping.io 사이트에서 Projects > Spring Tools 4 다운받아 설치(https://spring.io/tools) Spring Tools 4 is.. onedaythreecoding.tistory.com 이전글에서 GET으로 데이터 조회기능을 만..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHJegO%2Fbtrs7mt4m6D%2FMGGUFbnv0tPqdfLM2nraMk%2Fimg.png)
[Spring] 스프링 부트 첫걸음 1 : Android앱 REST API 서버 만들기 1 (GET요청, @PathVariable) ** 해당 글은 하단 참고란의 영상을 보고 따라서 공부하며 기록한 글입니다. IDE 준비 Eclipse : 나는 설치되어있음 STS : Sping.io 사이트에서 Projects > Spring Tools 4 다운받아 설치(https://spring.io/tools) Spring Tools 4 is the next generation of Spring tooling Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise appli..