Spring 31

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

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

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

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

Spring framework 스프링 웹 MVC 프레임워크 - 1 스프링 웹 MVC 프레임워크 - 2 스프링 웹 MVC 프레임워크 - 3 스프링은 특정 뷰 기술이 없어도 브라우저에서 렌더링이 가능하도록 하는 View Resolver를 제공한다. 스프링에서 JSP, Velocity(사용 안함), Freemarker, XSLT View, Thymeleaf, ReactJS, AngularJS등이 있으며, NodeJS 렌더링으로 유명한 Jade 또한 사용이 가능하다. (고로, 뷰 템플릿 엔진은 무엇을 쓰든지 가능하다. 자유도가 높다.) 스프링이 뷰를 처리하는데 중요한 기술 2가지 인터페이스가 있다. View Resolver interface View interface view Resolver interface는..

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

Spring framework Spring내에서 가장 기초적이고 가장 중요한 두개의 패키지는 org.springframework.beans 와 org.springframework.context패키지이다. 이 패키지내 코드는 Spring의 Inversion of Control(대안으로 Dependency Injection으로 불리는)기능의 기초를 제공한다. BeanFactory는 잠재적으로 어떤 종류의 저장 기능을 사용하여 어떤 성질의 bean을 관리하는 향상된 설정 기법을 제공한다. ApplicationContext는 BeanFactory(또는 하위클래스)의 가장 상위에 위치하고, 향상된 점 중에서 Spring AOP기능의 좀더 쉬운 통합, 메시지 자원 핸들링(국제화내에서 사용하기 위한), 이벤트 위임,..

토비 스프링 공부 - 자바빈

자바빈 원래 비주얼 툴에서 조작 가능한 컴포넌트를 말했다. 자바의 주력 플랫폼이 웹 기반의 엔터프라이즈 방식으로 바뀌면서 비주얼 컴포넌트로서 자바빈은 인기가 없어졌지만 JSP 빈, EJB와 같은 표준 기술과 자바빈의 스타일의 오브젝트를 사용하는 오픈소스 기술을 통해 계속 이어져왔다. 하지만 현재 자바빈은 두 가지 관례를 따라 만들어진 오브젝트를 가리킨다. 1. 디폴트 생성자 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 툴이나 프레임워크에서 리플렉션을 이용해 오브젝트를 생성하기 때문이다. 2. 프로퍼티 자바빈이 노출하는 이름을 가진 속성을 프로퍼티라 한다. 프로퍼티는 SET으로 시작하는 수정자 메소드/접근자 메소드(getter/setter)를 이용해 수정 또는 조회 할 수 있다. 리팩토링 ..

반응형