웹 개발
-
[Spring, JPA] kotlin에서 JpaRepository default method 사용하기웹 개발/Spring Framework 2022. 4. 11. 00:34
JpaRepository를 상속받은 인터페이스에서 default method를 활용할 수 있는데, 그 방법에 대한 포스팅이 많이 보이지 않아 정리해본다. JpaRepository를 상속받은 interface에서 아무렇지 않게 디폴트 메서드를 구현해서 서비스에서 호출을 하면 jpa에서 쿼리 생성을 못했다는 에러메시지가 나온다. jpa를 이미 사용하고 있는 사람이라면 query creation을 알고 있을 것이다. 바디가 없는 메서드에 한하여 메서드명을 바탕으로 쿼리를 생성해내는 jpa의 편리한 기능이다. 이 포스팅의 제목처럼 우리는 기본적인 조회처리나 조회 후 데이터 자체의 유무에 대한 exception 처리를 굳이 서비스 로직에서 처리하고 싶지 않다. interface인 repository에서 defau..
-
왜 Null을 보고 나쁘다고 하는걸까?웹 개발/웹&프로그래밍 2022. 3. 26. 23:55
신입 때부터 관용어처럼 'null은 나쁘다'라는 말을 들어왔다. '왜 null은 나쁜가?'라는 궁금증을 가지고 있으면서도 막연히 객체, 값의 불안정함, null 처리를 위해 생기는 지저분한 코드들을 만들어내기에 나쁘다고 하는거겠지? 라며 근거없이 혼자 추측해서 짐작만 하고 있었다. 근원적인 질문에 대해 이해하고 정리해두고 싶어서 null이 왜 나쁜지 몇가지 레퍼런스들을 읽어보기로 했다. 1. Null이란 1-1. 개념 먼저 null이란 무엇인가? 영국의 컴퓨터 과학자인 Tony Hoare(토니 호어?라고 읽어야하나)가 만든 개념으로 위키백과를 참고하자면, In computing, a null pointer or null reference is a value saved for indicating that ..
-
[Spring] Kotlin + Retrofit으로 SOAP 통신하기웹 개발/Spring Framework 2020. 10. 10. 16:05
SOAP(Simple Object Access Protocol)로 통신하는 방식은 최근에는 찾아보기 힘들다. 그래서 그런지 외부와 통신해야하는 업체가 SOAP로 통신을 주고 받아야하는 조건과 우리 서비스에서 사용하는 http 클라이언트 라이브러리인 Retrofit을 사용해야 하는 조건을 모두 만족시켜주는 시원한 해결방법이 없었다. 여기저기의 정보를 조합해서 통신하는데 성공했는데 그 방법을 정리하려 한다. Retrofit에서 XML 통신을 위해 JAXB converter 라이브러리를 제공한다. Retrofit으로 XML 통신을 하는 방법은 이 글을 참고하면 된다. 하지만, SOAP 통신을 할 때 namespace에 prefix를 부여하기도 할텐데 Retrofit에서 제공하는 JAXB converter 라이..
-
[Spring] html 파일(with Thymeleaf)을 pdf파일로 변환하기웹 개발/Spring Framework 2020. 9. 28. 23:35
Thymeleaf engine을 사용하는 html을 pdf로 변환해서 파일로 저장하기 이번 포스팅은 Spring에서 html 파일을 pdf로 변환해서 로컬에 저장하는 방법이다. (설명을 끝까지 봐야 제대로된 pdf 파일이 나온다) 준비물 1. Spring boot 2.3.4 2. Kotlin 1.3 or Java 11 3. Thymeleaf 라이브러리 4. flying-saucer-pdf 라이브러리 1. build.gradle에 dependency 추가 // build.gradle.kts implementation("org.springframework.boot:spring-boot-starter-thymeleaf") implementation("org.xhtmlrenderer:flying-saucer-p..
-
[Spring] Retrofit2에서 XML로 통신하기웹 개발/Spring Framework 2020. 8. 17. 17:33
요즘은 Http API를 주고받으면 데이터 형태는 XML보다 JSON으로 많이 사용하고 있다. 그렇지만 여전히 XML을 사용하는 회사도 많다. 외부 업체의 API가 XML로 데이터를 내려주기 때문에 XML로 통신할 수 있도록 개발해야했고, 우리는 Http client tool로 retrofit을 사용하고 있었다. 내가 해결해야 할 건 retrofit을 이용해서 XML로 통신할 수 있도록 만들어야 했다. 구글링을 해서 먼저 나온 건 SimpleXmlConverter을 사용할 수 있도록 com.squareup.retrofit2:converter-simplexml 의존성을 추가해서 사용하라는 글이 많다. 사용하려고 보니, deprecated 됐다. 친절하게 어떤걸 쓰는걸로 바꿔라! 라고 알려주어서 JAXB(J..
-
Cannot find cache named '' for Builder[] caches=[] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false' 에러 해결웹 개발/에러 해결 2020. 8. 6. 23:32
이 포스팅에서 제시하는 해결방법은 spring-cloud-aws를 사용하고 있을시에만 해당함. java.lang.IllegalArgumentException: Cannot find cache named '캐시 이름' for Builder[캐싱한 메서드 위치] caches=[캐시 이름] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' | sync='false' 빠른 응답성을 위해 사용하는 Cache. 스프링에서도 이런 Caching 기능을 제공하고 있는데, @Cacheable을 사용하고 있는 메서드에서 위와 같은 에러가 발생했다. 최근 헤로쿠에서 AWS로 옮겨가면서 spring cloud aw..
-
[Spring] Spring boot에서 Amazon MQ(Active MQ) 연결하기웹 개발/Spring Framework 2020. 7. 16. 00:12
Amazon MQ란? Amazon MQ는 클라우드에서 메시지 브로커를 쉽게 설정하고 운영할 수 있는 Apache ActiveMQ용 관리형 메시지 브로커 서비스입니다. Amazon MQ는 Active MQ를 사용하고 있다. 이름처럼 AWS에서 제공해주고 있는 서비스이기도 하다. Active MQ에 대해 더 알고 싶다면 여기를 참고해보자! 다 읽어보진 않아도 어떤 아키텍처로 이루어져 있는지는 알아야쥬 그림 하나만 보면 이해가 된다. 메시지를 생산하는 Producer, 메시지를 전달하는 Broker, 받은 메시지를 소비하는 Consumer 모델로 이루어져있다. Active MQ는 Queue 방식과 Publish/Subscribe 방식을 이용해 메시지를 전달한다. Queue 방식을 사용하면 Consumer들에게..
-
[Spring Boot] logback과 Sentry를 활용하여 에러 모니터링하기웹 개발/Spring Framework 2020. 5. 30. 17:27
Sentry는 에러 모니터링을 위한 툴로 굉장히 많이 쓰이고 있는 툴이다. 이번에 회사에서 Sentry 붙이는 작업을 했는데, 기존에는 global하게 적용되어 있지 않고, 선언적 방법으로 적용되어 있었다. 즉, 내가 Sentry로 확인하고 싶은 부분만 메서드로 선언해서 보는 방식이었다. (Sentry.capture()라는 메서드를 활용하여..) 이렇게 사용하면 시스템 전체 에러로그를 확인할 수 없고, 확인하고 싶다면 일일이 exception이 발생하는 부분에 일일이 선언해주어야 한다. 시스템 전체 에러를 모니터링하기 위해 사용하는 툴이기에 global하게 적용할 수 있도록 방법을 찾아보았고, 적용한 방법을 정리했다. 추가적으로 이 포스팅을 작성하기 위해 이것저것 테스트 해보는 와중에 더 간단하게 설정할..