본문 바로가기

오류일기

(21)
Spring Security Session, Redis직렬화 문제, 근데 이제 Seriallizable 인터페이스를 곁들인 ❗ 해당 포스팅은 사진과 내용이 많습니다! 상황현재 진행하고 있는 프로젝트에서 Spring Security를 도입하였습니다. 인증및 인가 방식은 session방식을 선택하였고 session저장소는 In memory가 아닌 Redis에 저장하고자 하였습니다. In memory방식을 통해 구현을 하였을때는 정상적으로 동작하였지만 @EnableRedisHttpSession을 통해 Redis에 session을 저장하려하니 다음과 같은 에러가 발생하였습니다.  원인(추측)인프런를 통해 Spring Security를 공부하였고 해당 강의에서는 @EnableRedisHttpSession을 통해 손쉽게 session 저장소를 변경하는 것으로 보아 저만 이러한 문제가 발생하는 듯 합니다...  하지만 에러가 터진다고 안..
nGrinder -> Gatling 테스트 프레임워크 변경기 (with 호스트의 한계..) 요약nGrinder의 controller가 nGrinder의 agent가 보내는 요청을 견디지 못하고 죽었다그렇기에 nGrinder로는 breaking point test를 수행하지 못하였다nGrinder가 아닌 gatling으로 테스팅 툴 변경해야 한다.nGrinder를 통해 테스트 결과를 얻었습니다. 그리고 이를 정리하다 다음과 같은 에러 로그를 발견하였습니다. 톰캣 서버가 버티지 못하고 죽은 것이 아닌 톰캣 서버에 요청을 보내는 agent가 부하를 견디지 못하고 죽어버려 테스트가 끝나버린 것입니다. 이를 저는 하나의 agent가 너무 많은 부하를 줬기 때문이라 생각하고 agent의 수를 늘려 다시 테스트를 수행하기로 하였습니다.(기존에는 하나의 agent로 테스트를 진행하였습니다.) 에이전트 컨테이..
[nGrinder] 스크립트 검증 도중 Connection refused(feat. nGrinder 아키텍쳐, 터널링) 상황nGrinder를 통해 테스트 스크립트를 작성하고 있었습니다 해당 로직은로그인 요청단순 로직 요청로그아웃이렇게 나누어져 있었습니다. 그리고 IDE에서는 다음과 같이 녹색불이 뜨며 올바르게 동작하였습니다그러나... nGrinder 스크립트 작성창에서는 다음과 같이 나왔습니다. 그리고 이는 방화벽에 막혀있거나 엉뚱한 URI로 요청을 보낼시 다음과 같이 나옵니다... 아니 분명 인텔리제이에서는 잘 되었는데... nGrinder에서는 왜...?? 라는 생각이 들었습니다.그러나 다행히도 이러한 문제를 잘 설명해놓은 블로그 글이 있었고 이를 참고하여 문제를 해결하였습니다. https://ordilov.github.io/posts/ngrinder%20%EB%A1%9C%EC%BB%AC%EC%97%90%EC%84%9..
Dockerfile, Docker-compose에서 CMD 여러개 입력하기 개인적으로 하고 있는 프로젝트에서 도커를 이용해 가상 환경을 띄워야 하는 상황이 발생했습니다. 그리고 해당 이미지를 띄우자 마자 사용해야 하는 명령어가 두 개 있었습니다. 하나는 redis를 띄우는 것이고 나머지 하나는 jar파일을 실행시키는 것이였습니다. 저는 도커 문법에 어색했지만 금방해낼거라 생각하고 작업을 진행하였으나... 문제가 발생하고 해결까기 5시간 걸렸습니다... ㅠㅠ 시행착오 일단 제가 작성했던(안돌아가던) 도커 파일은 다음과 같습니다. FROM sami355/performance-test:latest WORKDIR /app COPY ./build/libs/Login-0.0.1-SNAPSHOT.jar /app/interceptor.jar CMD ["redis-server", "java",..
Docker로 H2 컨테이너로 띄우기(포트 문제) 상황 설명 개인 프로젝트를 하며 H2를 컨테이너로 띄워야 하는 일이 생겼습니다. 저는 도커 허브에서 다음과 같이 h2 DB를 이미지로 빌드해놓은 것을 발견했습니다. (도커 허브) + 해당 이미지를 받을 경우 다음과 같이 경고창이 나오지만 다른 방법이 없기에 그대로 사용해야 할 듯 합니다. 이후의 컨테이너화 하는 방법은 다른 블로그에 잘 쓰여 있길래 링크를 첨부하겠습니다. 그러나 24년 4월 기준으로 해당 이미지를 컨테이너화해서 로컬머신에서 접속하면 다음과 같이 접속이 불가능하다고 나옵니다. 저는 이 문제를 해결하기 위해 다음과 같이 접근하였습니다. 시행착오 DB의 포트 번호를 설정하는 설정파일이 있으리라 생각하였습니다. 저는 H2 DB의 설정정보가 저장되어 있는 설정 파일을 찾으려 하였으나 쉬운 일은 아..
nGrinder java.io.tmpdir 오류 해결방법 토이프로젝트를 하는 중 부하 테스트를 해야 하는 상황이 왔습니다. jmeter, gatling, ngrinder 등 다양한 테스팅 툴 중 Naver에서 만들었으며 레퍼런스가 그나마 많은 jmeter와 nginder중 무엇을 선택해야 할 지 고민하였습니다. 그러나 저는 현재 자바 + 스프링으로 취준을 하고 있고 테스트 스크립트를 groovy로 작성할수있는 nGrinder를 사용하기로 하였습니다. 원인 그렇게 nGrinder document를 보면서 다음과 같이 실행시켰고 java -jar ngrinder-controller-3.5.9.war 다음과 같은 오류가 발생했습니다. 에러 코드를 요약하자면 다음과 같습니다. java.io.tmpdir(자바 시스템 속성)와 OS 기본 tmpdir은 서로 달라야 합니다..
[JPA] Reason: Validation failed for query for method public abstract 에러가 날 때 JPQL로 신나게 두들기다 다음과 같은 오류가 났습니다... 그리고 이는 문제의 코드 입니다. @Query(value = "select r from Report r " + "where ST_Dwithin(r.location, :point, :radius, false) = true") List findReportsWithinRadius(@Param("point") Point point, @Param("radius") double radius); 구글링을 해보니 nativeQuery = true 조건을 걸어주면 된다고 합니다... @Query(value = "select r from Report r " + "where ST_Dwithin(r.location, :point, :radius, false) = t..
[JPA] PostgreSQL을 사용하는 환경에서 Point 타입 사용하기 프로젝트를 진행하면서 반경검색을 해야할 일이 있었습니다. 그리고 기존에 사용하고 있던 MySQL로는 부정확하며 로직을 수행하는 시간 역시 PostgreSQL에 비해 떨어졌습니다. 아래는 당시 저의 생각을 작성해 이슈로 올린 링크입니다. https://github.com/GDSC-KNU/3rd-sc-ex1-CitySavior-Backend/issues/5 [FEAT] 신고조회 기능 구현 · Issue #5 · GDSC-KNU/3rd-sc-ex1-CitySavior-Backend Description 📝 단일 신고 조회 기능 DB로 부터 단순 조회입니다. 지도에서 신고현황 조회 기능 요청 파라미터로부터 인근에 존재하는 신고 정보를 반환하는 기능입니다. DB변경 파라미터로 넘어오 github.com 그렇기에 ..
Google Cloud Storage + Spring Boot 401 Unauthorized 프로젝트를 진행하며 Google Cloud Storage 줄여서 GCS에 이미지를 업로드해야하는 로직을 작성해야 했습니다. 그리고 다행히도 참고할만한 노션 정리글을 발견하여 따라하였으나... 401 에러가 반환되었습니다.. ㅠㅠ.. 현재 저는 GCS에서 액세스 키를 json 형식으로 받아서 yaml에서 이를 읽어들이는 방식으로 Storage 빈을 생성했습니다. 그렇기에 방법을 다음과 같은 방식으로 직접 설정해줘가며 코드를 수정했습니다. @Configuration public class GoogleCloudStorageConfig { @Bean public Storage storage() throws IOException { ClassPathResource resource = new ClassPathRes..
[Spring Boot] MockMvc를 이용해 파일과 제이슨 형태를 한번에 받는 메소드 테스트하기 이러저러한 이유로 근 반년만에 프로젝트를 진행하게 되었습니다. 덕분에 모든것이 새로웠습니다. ㅎ.. 저는 멀티파트로 이미지 파일과 Json을 한번에 받아서 처리해야 하는 로직을 작성해야 했습니다. 과거의 저였다면 @RestController로 슥슥 동작하는지만 확인하고 바로 다음 로직을 구현하는데 집중하였을 것입니다. 그러나 최근 "클린코드"를 읽었고 "객체지향의 사실과 오해", "오브젝트"라는 책을 읽고 있기에 이 참에 TDD를 통해 구현해보고자 마음먹었습니다. 비록...구현을 먼저하고 이에 대한 테스트 코드를 작성하였으니 올바른 TDD는 아니지만... 그래도... 그렇게 구글링을 하며 MockMvc를 통해 이미지 파일 전송에 대한 테스트 까지는 어찌저찌 하였고 그 결과 아래와 같은 코드를 작성하였습니..