웹 개발/Spring Framework
-
[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..
-
[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하게 적용할 수 있도록 방법을 찾아보았고, 적용한 방법을 정리했다. 추가적으로 이 포스팅을 작성하기 위해 이것저것 테스트 해보는 와중에 더 간단하게 설정할..
-
[Spring] 팩토리 메소드 패턴을 적용하여 bean을 동적으로 사용하기웹 개발/Spring Framework 2020. 4. 19. 22:58
하나의 인터페이스를 상속받는 구현체들이 많을 경우, 팩토리 메소드 패턴을 이용하면 동적으로 필요한 객체를 받아와서 사용할 수 있다. Factory 패턴이란? Factory method는 부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다. 부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다. - 위키백과 Head First 디자인 패턴을 참고하여 팩토리 패턴을 정리한 포스팅을 보면 팩토리 패턴에 대해서 학습할 수 있다. 팩토리 메소드 패턴을 이용하면 인터페이스의 구현클래스를 매번 선언해서 가져올 필요없이 가져오려는 인터페이스의 구현체의 타입을 이용해서 가져올 수 있다. Spring에서..
-
[Spring] Lombok을 이용해 Builder 패턴을 만들어보자.웹 개발/Spring Framework 2020. 3. 21. 17:10
Builder 패턴이란? Effective Java 규칙 2 - 조슈아 블로크 생성자에 인자가 많을 때는 빌더 패턴을 고려하라 빌더 패턴(Builder pattern) 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다. (출처: 위키백과) 난 생성자가 많아지면 빌더 패턴을 만드는 편인데, 개발자 성향에 따라 다를수도 있구나를 느꼈다. 빌더패턴을 활용하면 어떤 필드에 어떤 인자를 넣어줬는지 명확히 알 수 있고, 넣어줄 필요 없는 필드(null)는 굳이 선언할 필요 없으니 좋다고 생각했다. 근데 다른 분은 어떤 필드에 null이 들어간다는걸 명확히 볼 수 있는 점 때문에 생성자를 통해 객체를 생성하시는 방법을 택했다고 하셨다. int..
-
[Spring] 페이징처리를 위해 써먹는 Paging 객체 만들기 및 활용웹 개발/Spring Framework 2019. 5. 18. 18:12
회사 내에서 페이징 객체를 만들어야겠다고 생각한 계기는 특정 고객사에서 특정 메뉴를 주로 사용하는데 이 메뉴가 페이징 처리가 안되어있어 너무 느리다는 불만사항을 자주 들었다. 그 이외 UI 라이브러리 문제도 있었어서(고객사는 이 문제에 대한 불만이 더 많았다.) 새로 회사에서 사용하는 라이브러리로 바꿀 겸 이 메뉴에 대한 페이징 처리를 하기로 마음 먹었다. 기존에는 페이징 처리를 메서드마다 페이지 인덱스와 페이지 사이즈를 계산하고 Map에 담아 return 방식으로 페이징 처리를 하고 있었는데, 이 부분 때문에.. 페이징 객체를 만들자!!! 먼저 내가 구성한 건, 페이징 처리를 위한 변수 정하기. 내가 생각한 리스트는 아래와 같다. pageIndex : 현재 이 페이지가 몇번째 페이지냐 pageSize ..
-
[Spring] war에 test class가 포함된다?(war에서 test class 빼는 법)웹 개발/Spring Framework 2019. 5. 8. 23:14
war를 묶을 때(packaging) test class가 포함되어 컴파일 된다면? 다른 신입분의 war를 받아서 풀어볼 일이 있었는데 컴파일된 테스트 클래스가 포함되어 있었다. 어 왜? 테스트 클래스가 어떻게 포함되어 있지? 난 이제까지 war를 묶으면 자동으로 테스트 클래스가 빠지는 줄 알았다. 실 운영 서버에는 컴파일된 테스트 클래스는 필요없으니까 말이다. war를 묶을 때 테스트 클래스를 포함할 수도, 제외할 수 있다는 걸 이번에 처음 알았다.(그외에도 멀티 프로젝트 또는 다른 디렉토리를 포함하는) 이렇게 어쩌다보니 하나 배웠다. 컴파일된 테스트 클래스가 war에 포함되더라도 그 테스트 클래스를 읽을 일이 없으니 괜찮을 수도 있지만 왠지 모를 찝찝함 + 굳이 필요없는 파일 이 들어감 때문에 해결방..