Spring 25

spring boot 3 + Hibernate 6 logging config

spring boot 3 + Hibernate6를 쓰면서 쿼리를 로깅 하기 위해서는 기존과 달라진 점이 있는데, 기존은 아래처럼 설정 했다. spring: jpa: show-sql: false properties: hibernate: format_sql: true logging: level: org.hibernate.SQL: debug org.hibernate.type.descriptor.sql: trace 아래처럼 설정 하면, 쿼리의 parameter가 잘 보인다. spring: jpa: show-sql: false properties: hibernate: format_sql: true logging: level: sql: debug org.hibernate.orm.jdbc.bind: trace

localhost HTTPS 적용 (spring boot)

mkcert install brew install mkcert brew install nss # firefox 사용 예정이라면, 추가mkcert localhost 명령어 mkcert -install [-uninstall 삭제] > mkcert -install The local CA is now installed in the system trust store! ⚡️ The local CA is now installed in the Firefox trust store (requires browser restart)! 🦊> mkcert -pkcs12 localhost Created a new certificate valid for the following names 📜 - "localhost" The PKCS..

[Spring framework] Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider

Netty를 쓰는 환경에서는 해당 오류가 M1 Apple chip 부터 발생한다. Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS 해당 이슈는 MacOS에서만 발생한다. 해결방법은 netty issue에 나와 있는데, 보통 아래 디펜던시를 추가해주면 해결 된다. io.netty:netty-resolver-dns-native-macos 그런데, 좋은 방법이 며칠전에 추가 되었는데, 실행 하는 OS를 구분하여 runtimeOnly로 해당 모듈을 추가 해주는 방식이다.O..

@ConfigurationProperties (Spring Boot)

kafka: topic: {topic name} producer-config: bootstrap.servers: {server info} key.serializer: org.apache.kafka.common.serialization.StringDeserializer value.serializer: org.apache.kafka.common.serialization.StringDeserializer acks: all batch.size: 16384 linger.ms: 1000 위와 같은 정보를 클래스 형태로 가져오고 싶다면 어떻게 해야 할까? 이럴때 쓸 수 있는 것이 @ConfigurationProperties 이다. kotlin에서 특히나 불변 값으로 가져오고 싶다면, @ConstructorBindin..

Mybatis의 nested select, nested result (Spring Boot, H2, Kotlin|Java)

마지막 근무일 즈음에 팀원분이 궁금하다고 요청을 해주셔서, 보다가 사실 생소한 현재 팀에서 Kotlin 환경이다 보니, 이런 저런 이슈들이 좀 있었는데, Mybatis의 nested select 관련 질문으로 이상하게 잘 안된다고 해주셨다. 결과적으로 어렵진 않은 이슈였는데, 궁금해서 Java 버전으로도 동일하게 샘플 코드르 작성 해보았다. 그 이유는 코틀린 언어적인 이슈인지, 순수한 Java환경에서도 이슈가 되는지 궁금 했다. 그래서 두 프로젝트를 생성 해서 테스트 해봤다. 결과적으로 코틀린 환경에서는 data class에 대한 noarg 플러그인이 필요로 했다. 다만, 해당 플러그인을 쓰는게 맞을까? 고민스럽긴 하다. 그리고 이럴때 필요한 개념이 보통 Mybatis에서는 association/coll..

Spring 2022.07.19

logback에서 maxHistory 이슈

Logback maxHistory bug logback의 rolling 정책중 하나인 SizeAndTimeBasedRollingPolicy 를 사용하는데, maxHistory가 동작을 하지 않는 이슈가 있는데, 이게 1.2.3버전에 있는 버그였다. https://stackoverflow.com/questions/47752955/logback-sizeandtimebasedrollingpolicy-applies-totalsizecap-to-each-day-in-maxhi https://jira.qos.ch/browse/LOGBACK-1361 그런데, 아직 1.3.0이 릴리즈가 되진 않았다. (https://mvnrepository.com/artifact/ch.qos.logback/logback-classic..

JSP속에서, handlebars 삽질.

JSP 상에서 handlebars를 사용할 때, Controller에서 ModelAttribute 넘겨줄 시에, 데이터로 사용 할 값은 그냥 오브젝트 넘겨줄 경우, 오브젝트 형태로 넘어가기 때문에, handlebars에서 데이터로 사용하기 어렵다. [Category(id="asdfasdf", name="asdfasdf"), Category(id="asdfadf", name="asdfadf)]위와 같이 오브젝트 타입까지 넘겨지게 된다. 그렇게 되면,JSON.parse를 통해 배열로 만들 수 없기 때문에, JSON string형태로 controller에서 넘겨주면 아래와 같이 사용할 수 있다. modelMap.addAttribute("Categories", JsonUtils.write(categories))..

#Today #Error #삽질

Error 정리 앞으로는 매일 매일 삽질한 경험을 좀 블로그에 남겨두는 습관을 가져야겠다고 생각했다. 오늘의 에러 org.springframework.context.annotation.ConflictingBeanDefinitionException 이 오류가 남으로써 war 파일이 배포된 후 Tomcat이 Loading조차 되지 않는다. 그 이유는 바로, Bean Scan을 하고 Bean Definition을 정의한 xml을 parsing한다. 이때, Bean이 중복되어 충돌이 나서, Bean을 로드 시킬 수 없는 치명적인 에러가 바로 저 에러다. 이게 맞는 수순인지는 모르지만, 오늘 유추한 바로는 그렇다.. 위 처럼 작성을 했다고 치자, 그럼 당연히 spring framework에서는 bean id가 중..

Web 개발시 편리한 도구 - LiveReload

웹 프론트 개발시 편리 도구 - Live Reload 프론트의 수정 사항을 자동으로 반영 해주는 역할을 한다. (뭐 결국 쉽게 하면, 새로고침을 자동으로 해주는 거지) 위처럼 크롬 확장 도구로 존재한다. 설치를 하게 되면, 확장 프로그램 부근에 위와 같은 아이콘이 생성 된다. 사용법, localhost 서버를 띄우고, 해당 버튼을 클릭하면, 마우스 오버시 LiveReload is connected라는 메세지가 뜬다. 그럼, 해당 프론트 작업을 하게 되면, 파일 저장을 감시하여 자동으로 해당 페이지의 수정 사항을 반영해준다. ​

[Spring framework] 공부를 해보자 4탄

웹 어플리케이션의 컨텍스트 구성 방법 3가지 정도가 존재한다. 첫 번째는 컨텍스트 계층 구조를 만드는 것이고, 나머지 두 가지 방법은 컨텍스트를 하나만 사용하는 방법이다. 첫 번째와 세번째는 스프링 웹 기능을 사용하는 것이고, 두 번째는 스프링 웹 기술을 사용하지 않을 때 적용 가능한 방법이다. 서블릿 컨텍스트와 루트 어플리케이션 컨텍스트 계층 구조 웹 관련 빈들은 서블릿의 컨텍스트에 두고, 나머지는 루트 어플리케이션 컨텍스트에 등록한다. 루트 컨텍스트는 모든 서블릿 레벨 컨텍스트의 부모 컨텍스트가 된다. 스프링 이외에 프레젠테이션 프레임워크 혹 AJAX 등 여러 외부 라이브러리 , 프레임워크를 사용 할 수 있다. 루트 어플리케이션 컨텍스트 단일 구조 스프링 웹은 사용 하지 않고, 서드 파티 웹 프레임워..

반응형