전에 RestTemplate대신 WebClient라는 글을 작성했었다.https://pamyferret.tistory.com/79 RestTemplate 대신 WebClient기존에 springboot에서 http 통신을 해야할 때 RestTemplate을 곧잘 쓰곤 했다. 하지만 spring 5.0 버전부터는 RestTemplate은 더 이상 새로운 버전을 내놓지 않을 것이며 WebClient를 쓰라고 권장하고 있다. As of 5pamyferret.tistory.com RestTemplate의 경우 이제 maintanace로 들어가 더 이상 새로운 버전 업이 이뤄지지 않는하고 하며 webClient를 쓰라고 권장을 했다는 내용으로 작성을 한 것이었다.하지만 실무를 하면서 RestTemplate을 쓸 ..
개발을 하다보면, 개발 공부를 하다보면 DI라는 용어를 많이 접하게 된다. 거기에 덧붙여 DI 컨테이너, IoC이라는 용어도 많이 접하게 되는데 처음에 이러한 용어들을 접하고 가지 않으면 이게 뭐지? 라고 어리둥절하다가 해당 용어의 뜻을 알고 아 그렇구나 라고 바로 이해를 하게 된다. 그래서 이번에 제대로 해당 용어들에 대한 개념들을 정리해보려 한다. DI(Dependency Injection)이란? 우선 제일 기본적인 DI는 의존성 주입을 의미한다. 의존성 주입에 대해 제일 간단한 예를 들면 Controller에서 Service를 사용하는 것을 예로 들 수 있다. public class MenuController { private tinal MenuService menuService; ... } Con..
https://pamyferret.tistory.com/8 [ SpringBoot ] SpringBoot의 기본 Cache 사용하기 개발을 하다보면 어라? 이 데이터 계속 똑같이 사용되고 업데이트 될 일이 없는데? 하는 것들이 보인다. 데이터 업데이트가 자주 이뤄지지도 않고 자주 호출되는 데이터인데 계속 DB에 가서 데이 pamyferret.tistory.com https://pamyferret.tistory.com/9 [ Redis ] Window에 redis 설치해서 사용하기 스프링 부트의 캐싱 기능을 사용하다보니 분산 캐싱 기능도 사용해보고 싶어졌다. 분산 캐싱에 사용할 캐시 데이터 저장 공간은 여러 가지를 사용하는데, 그 중 Redis라는 것을 사용해보려고 한 pamyferret.tistory.c..
스프링부트에서 캐시 어노테이션을 사용하다보니 여러 가지 에러를 보게 되었다. 그 중 하나가 바로 위 에러인데, @CachePut에 key 값 없이 사용하다보니 제목에도 있듯이 아래 에러가 발생했다. - java.lang.IllegalStateException: Cannot convert cache key 에러 발생 원인 우선 에러 발생은 key 값 없이 사용해서가 아니다. key 값 없이 사용할 경우 자동으로 key 값이 아래와 같이 들어가지게 된다. 또한 존재하지 않는 key 값을 사용했을 경우에 또한 존재하지 않는 그 새로운 key 값으로 캐시 데이터가 저장되서 상관 없다. 그렇다면 왜 이런 에러가 발생하는 것일까? 그건 바로 key 값이 없고 또한 해당 함수에 별도 파라미터 있을 경우 해당 함수의 ..
지금까지 Mock이랑 MockMultipartFile을 이용해서 단위 테스트를 했었다. 그 떄까지는 순조로웠던 단위 테스트... 하지만 한 Service의 함수 한에 Util용으로 만들어둔 다른 클래스의 static 메소드를 호출하는 부분이 있었다. 바로 위와 같은 형식의 함수였다. 파일을 업로드하고 가져오고 삭제하고 디렉토리를 정리하는 등의 파일 관련된 공통 기능들이 들어 있는 FIleUtil이 Service 함수 중간 중간에 들어 있는데 특히 위와 같이 uploadFile()과 같이 파일을 업로드 하는 함수가 들어있는 TestService.method()와 같은 것을 테스트 하려고 하니까 FileUtil.uploadFile()이 작동해 계속 이상한 파일이 만들어지는 현상이 발생했다. 게다가 다른 함수..
지금까지는 JPA를 사용하면서 JPA에 Native Query를 사용하거나 jpa method를 조합해서 사용했었다. 아지만 n:m으로 매팽되는 데이터를 사용하게 되었고, 이를 Native Query를 이용해서 해결할 수 있으나 QueryDsl을 써서 해보자는 의견이 나와 QueryDsl을 쓰게 되었다. (아직은 QueryDsl이 뭔지 잘은 모르겠다. jpa의 함수들이 실제 돌아가는게 QueryDsl 기능들을 그 속에 넣어놔서 라고는 하지만...) 여하튼 QueryDsl을 쓰게 되었는데 다른 사람들은 IntelliJ, 나 혼자 Eclipse를 사용하게 되었다. 혼자 Eclipse를 쓰는 나, 다른 사람이 작성해놓은 QueryDsl 코드를 pull 받자마자 Q* 클래스들을 못 찾겠다는 에러를 내면서 실행도..
스프링부트에서 JPA를 사용하다가 모든 리스트를 다 지우고 처음으로 초기화 할 일이 생겼다. 그래서 나는 repository의 deleteAll() 함수를 사용한 후 for문을 통해 처음에 집어넣었던 값들을 똑같이 DB에 집어넣고자 saveAllAndFlush()를 했다. 그렇게 하면 기존에 이것저것 수정된 DB 데이터들이 모두 삭제되고 처음에 집어넣었던 값들을 다시 DB에 넣어서 DB는 이것저것 사용하기 전의 처음 값들을 가지게 될 것이라고 생각한 것이다. 하지만 primary key인 id 값이 이미 존재한다며 'javax.persistence.EntityExistsException' 에러가 발생했고 혹시 deleteAll()을 하고 나서 flush를 안 해서 그런가 하고 repository의 flu..
개발을 하다보면 어라? 이 데이터 계속 똑같이 사용되고 업데이트 될 일이 없는데? 하는 것들이 보인다. 데이터 업데이트가 자주 이뤄지지도 않고 자주 호출되는 데이터인데 계속 DB에 가서 데이터를 가져온다. DB에 한 번 갔다 하는데도 적은 데이터의 경우는 매우 그 시간이 짧지만 많은 데이터면 데이터일 수록 그 시간이 점점 늘어나 나중에는 사용자가 불편을 느낄 정도로 데이터를 가져오는 시간이 길어진다. 그럴 때 캐싱(Caching) 기능을 사용해서 똑같은 데이터는 DB에서 가져오지 않고 미리 캐싱해놓은 데이터를 가져오고 만일 데이터 업데이트가 이뤄지면 캐싱된 데이터를 업데이트하고 캐싱된 데이터가 너무 자리를 많이 차지하면 아예 캐싱된 데이터를 지워버리는 등 DB에 가서 데이터를 가져오지 않고 그보다 가깝고..
- Total
- Today
- Yesterday
- PostgreSQL
- HttpClient
- eclipse
- ssh
- 이클립스
- Intellij
- DATABASE
- 메시지큐
- DB
- 역직렬화
- springboot
- 데이터베이스
- 캐시
- rabbitmq
- MAC
- 스프링부트
- Spring
- JPA
- annotation
- cache
- Caching
- mockito
- 공간데이터
- 어노테이션
- 자바
- 캐싱
- enum
- k8s
- Java
- postgres
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |