3월, 2019의 게시물 표시

[Spring] ConcurrentKafkaListenerContainerFactoryConfigurer를 사용하고 싶다.

안녕하세요, 하마연구소입니다. 스프링 어플리케이션에서 카프카 토픽에서 값을 쉽게 가져오기 위하여 @KafkaListener 어노테이션을 사용합니다. 여러개의 Kafka 서버에 접근해야할 필요가 있어서, 즉 @KafkaListener 어노테이션을 여러개 사용해야 해서, KafkaListenerContainerFactory를 수동으로 만들어야했습니다. 기왕 만드는김에 최대한 Spring에서 기본적으로 동작하는 방식으로 처리하려고 하니, ConcurrentKafkaListenerContainerFactoryConfigurer 이 녀석을 사용해야했습니다. (아따 이름 엄청 기네요~~~) spring-boot 버전 1.5.19를 사용하고 있으며, 그에따라 spring-boot-autoconfigure도 버전 1.5.19 입니다. 아래는 ConcurrentKafkaListenerContainerFactoryConfigurer.java 파일입니다. /* * Copyright 2012-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, eithe...

[Spring] Hibernate에서 "Could not build ClassFile" 발생하는 오류 해결

안녕하세요, 하마연구소입니다. spring-boot 버전 1.4.2에서 현재 1.X 버전 최고인 1.5.19로 업데이트 하였습니다. 한 프로젝트에 Maven 모듈로 여러 어플리케이션이 존재하는 구성입니다. 2개 어플리케이션만 제외하고 나머지 어플리케이션은 잘 수행됩니다. 이 2개 어플리케이션에서는 처음 로딩 중 아래와 같은 예외가 발생합니다. 더 특이한 것은 IDE에서 바로 실행시키면(로컬환경) 잘 됩니다. 서버환경에서만 안 됩니다. 환장하겠습니다. Exception in thread "main" java.lang.ExceptionInInitializerError at com.hippolab.MyTopologyRunner.getApplicationContext(MyTopologyRunner.java: 39 ) at com.hippolab.AbstractTopologyRunner.run(AbstractTopologyRunner.java: 30 ) at com.hippolab.MyTopologyRunner.main(MyTopologyRunner.java: 34 ) Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name ' entityManagerFactory ' defined in class path resource [ com / hippolab / config / MyDatabaseConfig.class ] : Invocation of init method failed; nested exception is org.hibernate.boot.archive.spi.ArchiveException: Could not build ClassFile at org.springframework.beans.factory.support.Abstrac...

[Spring] spring-boot 1.5.X 부터 spring-kafka 사용할 수가 있네요.

안녕하세요, 하마연구소입니다. 스프링에서 @KafkaListener 어노테이션을 사용해서 간단하게 카프카 토픽을 바로보는 consumer를 작성하려면 spring-kafka 라이브러리가 필요합니다. spring-boot를 적용한 환경에서 Maven pom.xml에 아래와 같이 dependency를 추가해주면 됩니다. <dependency> <groupId> org.springframework.kafka </groupId> <artifactId> spring-kafka </artifactId> </dependency> 그런데 라이브러리가 추가가 안되서 확인해보니, spring-boot 1.5.X 이후부터 spring-kafka를 사용할 수 있었습니다. 직접 필요한 라이브러리들을 모두 추가하는 방법으로 spring-boot 1.4.X에서도 사용할 수 있는 것으로 보이지만, 그러고 싶지는 않습니다. 어쩔수 없이 그냥 스프링부트 버전을 올렸습니다. 현재 최신버전인 spring-boot 2로 올리면 이곳저곳 소스에 빨간불이 많이 들어오더군요. 특히 JPA repository쪽 오류가 엄청납니다. 그래서 그냥 버전 1 대에서 현재 가장 높은 1.5.19로 업데이트하고, 몇 군데 빨간불이 들어왔지만 쉽게 해결할 수 있었습니다. 물론 더 운영해봐야 알겠지만 다행이 라이브러리 버전 충돌이나 런타임 기능도 잘 동작하는 것으로 보입니다. 그리고 @KafkaListener 어노테이션도 사용할 수 있게되었습니다. 어파치 spring-boot 버전 1.4.X와 1.5.X 초반 버전에서 보안관련 이슈가 있다는 리포트 때문에 날 잡아서 버전업하려고 했는데, 급하지는 않아서 그냥 두었습니다. 아마 놔뒀으면 그냥 기억에서 잊혀져 갔을 것입니다. 역시 사람은 발등에 불이 떨어져야 후딱 일을 처리합니다. Spring for Apache Kafka: https://spring.io/projects/sprin...

JSON beautify만 있는줄 알았는데 정말 별개 다있는 "Code Beautify" 소개

이미지
안녕하세요, 하마연구소입니다. 프로그래밍 개발업무를 진행하다보면 코딩작업외에 부가적인 작업을 해야할 때가 많습니다. 예를들어, 테스트를 위한 대량 또는 대용량 샘플파일을 만들거나 엑셀파일 export/import, 2진수/16진수 변환, 네트워크 netmask 변환, HTML/XML 인코딩과 디코딩, URL escape와 unescape, RGB 추출, MD5/SHA 얻기, Base64 변환, 이쁜 XML/JSON 출력, 파일 다른곳 비교 등등... 너무너무 많습니다. IDE 또는 다른툴을 이용한 자동화 처리가 가능하면 괜찮습니다. 하지만 적당한 툴을 모르거나, 사용방법을 모르거나, 또한 그 사용방법을 숙지하기 위하여 검색과 테스팅 등 여러가지 이유로 인하여 그냥 무식하게 손수 한땀한땀 처리하는 경우도 종종있습니다. 저는 개인적으로 사용방법을 항상 잊어버리는 것이 있습니다. 일반적인 텍스트파일 수정을 위하여 사용중인 Sublime 프로그램의 multi line 편집기능입니다. 복수개의 라인을 한방에 입력, 수정, 삭제하는 기능이죠. 항상 단축키와 어떤 메뉴에 있었는지 잊어버립니다. 이 글을 쓰고 있는 지금도 단축키가 생각이 안납니다. 개인적으로 개발을 하면서 또는 시스템 운영을 하면서 자주 수행하는 작업이 있습니다. 바로 JSON beautify 입니다. 한줄로 또는 이쁘지 않게 작성된 JSON 문자열을 보기 편하게 바꿔주는 기능입니다. 이 기능은 왠만한 IDE 또는 다른 응용프로그램을 사용하면 됩니다. 하지만 IDE에서는 새파일을 만들어서 JSON 문자열을 copy&paste하고 indent를 맞춘다음 파일 자체가 필요없다면 삭제해야합니다. 귀찮고 번거롭습니다. 따라서 전용 어플리케이션을 찾아보다가 우연히 online으로 JSON을 이쁘게 바꿔주는 홈페이지를 알게되었습니다. 홈페이지 이름은 "Code Beautify", 말 그대로 코드를 이쁘게 해주는 것입니다. Code Beautify: https://codebeautify.org...