Spring/Spring 이야기 21

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..

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 등 여러 외부 라이브러리 , 프레임워크를 사용 할 수 있다. 루트 어플리케이션 컨텍스트 단일 구조 스프링 웹은 사용 하지 않고, 서드 파티 웹 프레임워..

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

Spring framework - 개념 스프링에서 스프링이 제어권을 가지고 직접 만들고, 관계를 부여하는 오브젝트를 Bean이라 부른다. 빈 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라 부른다. 좀 더 확장한 어플리케이션 컨텍스트를 주로 사용한다. 어플리케이션 컨텍스트는 별도의 정보를 참고해서 빈의 생성, 관계설정등의 제어 작업을 총괄하는 역할을 한다. 빈 팩토리 스프링의 IoC를 담당하는 핵심 컨테이너이며, 빈 등록, 생성, 조회, 반환 및 부가적인 빈을 관리하는 기능을 담당한다. 어플리케이션 컨텍스트 빈 팩토리를 확장한 IoC 컨테이너다. 빈 팩토리와 빈과 관련한 기능을 하는 것 이외에 스프링이 제공하는 각종 부가 기능들을 추가 제공한다. 스프링이 싱글톤으로 빈을 생성하는 이유..

반응형