본문 바로가기

Spring

(24)
Spring + @Lazy https://github.com/antop-dev/spring-lazy 요즘 MSA를 공부하면서 아래와 같은 문구를 보았다. 마이크로서비스에서는 완전 자동화를 달성하기 위해 초소한의 시동/종료 시간을 갖도록 애플리케이션의 크기를 가능한 한 작게 유지하는 것이 극단적으로 아주 중요하다. 이를 위해 마이크로서비스에서는 객체와 데이터의 지연 로딩lazy loading에 대해서도 고려해봐야 한다. 이 때 떠오른 단어는 Spring과 @Lazy이다. 스프링 빈 설정시 @Lazy 애노테이션만 달아주면 이 빈을 가져오는 시점에 생성하기 때문에 모든 빈을 처음 초기화시에 만들지 않는다. 그런데 약간의 의문사항이 있어서 테스트 해봤다... 구글링을 대충 해도 나오는 자료이지만 직접 해봤다. 등장 클래스 아래와 같이 3..
[Kotlin + Spring] Maven configuration Problem Kotlin 1.3 이상을 사용하면서 스프링 부트 메인 클래스는 open 키워드를 넣어줘야 하는 가벼운(?) 이슈가 있었었다... 이번에는 spring-data + Mongodb를 공부하면서 다시 이 이슈가 등장하였다. Kotlin + Spring 하면서 코틀린의 class 가 final로 되는 부분과 스프링에서 빈을 처리하기위해 클래스를 까발리는(?) 부분에서 문제가 생긴다. final class 는 조작이 안되기 때문에!? > mvn spring-boot:run [INFO] Scanning for projects... [INFO] [INFO] ---------------------< com.microservices:chapter5 >--------------------- [INFO] B..
Mybatis Interceptor + RowBounds 를 이용한 페이징 처리 https://github.com/antop-dev/example/tree/master/mybatis-rowbounds-example Mybatis에 RowBounds 클래스를 이용해서 페이징 처리를 할 수 있다. package org.antop.mybatis.mapper; import org.antop.mybatis.model.Employee; import org.apache.ibatis.session.RowBounds; import java.util.List; public interface EmployeeMapper { List select(RowBounds rowBounds); } select * from employees order by emp_no asc 위와 같이 맵퍼와 XML 이 있다. Ro..
LOGBack Configurator with JMX Introduce 요즘 logback 많이 쓸꺼다... "Reasons to prefer logback over log4j"에 보면 이제는 log4j 를 버리고 logback 을 써야하는지 이유를 영어로 설명 해놓았다. ㅅㅂ -_-;; 딴건 잘 모르것고 맘에 드는걸 보자면... - Automatic reloading of configuration files (설정 파일 자동으로 다시 로드)- Automatic removal of old log archives (이전 로그 아카이브 자동 삭제)- Automatic compression of archived log files (아카이브 로그 파일 자동 압축) 서버를 재시작 하지 않고 logback.xml 파일을 수정하면 바로 설정이 적용 된다고 한다. ㅎㅎ ..
현지어로 언어명 보여주기 Introduction 다국어를 지원하는 홈페이지에서 언어 선택하는 부분을 보면 대표하는 언어로 다국어명이 나오는 것을 볼 수 있다. 이거 따라해 보자 -_-;; Locale 에서 getDisplayCountry() 뽑아낼 때 인자로 현재 Locale 을 넣어주면 자신의 Locale 언어 그대로 나온다. for (Locale locale : Locale.getAvailableLocales()) { if (locale.getCountry().isEmpty() == false) { System.out.println("--"); System.out.println(locale.getCountry()); // 이거 System.out.println(locale.getDisplayCountry(locale)); }..
Image Pyramid Introduction 아주 오래 전 플렉스와 실버라이트가 난리를 쳤을 때 난 플렉스를 공부 했었다. 그 때 훈스닷넷에서 하는 실버라이트 세미나를 갔었는데(왜 플랙스 세미나를 안가고...) 그 때 발표자(?)가 발표를 했던게 실버라이트의 이미지 피라미드였다. 그 때.. 난 "아 참 조쿠나~" 라고 생각 해놨다가 꽤 오랜 시간이 지난 지금 생각이 났다. ㅋㅋㅋ Fundamental 고용량의 큰 이미지가 있다. 이 이미지를 브라우저에서 본다고 하자. 그러면 실제로 화면에 보여지는 이미지의 영역은 얼마 안될 것이다. 하지만 큰 이미지를 한번에 가져오기 때문에 네트워크 낭비가 심하다. 이 문제를 해결하기 위해서 이미지를 잘게 자른 후 화면(브라우저)에 보이는 영역만 불러오는 것이다! 이것 저것 찾아보니까 이미지..
"트리 메뉴 구성" 의뢰 Request 아래와 같은 트리 메뉴를 구성할 데이터가 들어있는 테이블이 있습니다. path 칼럼에 상위 트리의 경로가 "/" 구분자로 들어 있습니다. 예를 들어 id가 7인 노드는 [루트 → 3 → 4 → 7] 의 경로를 가지게 됩니다. 이렇게 데이터가 들어있는 테이블을 조회해서 ul 과 li 태그의 조합으로 화면에 나타내고 싶습니다. 트리 깊이(depth)는 제한이 없습니다. 데이터베이스는 MySQL, 프레임워크는 Spring + iBatis를 사용합니다. Response 재귀함수/재귀쿼리를 써야 한다. MySQL 에는 기본적으로 재귀쿼리가 안된단다. -_-; 나 역시도 특정 데이터베이스에서만 있는 문법을 싫어하기 때문에 있어도 안쓸 생각이었다! 단순 select 쿼리로 아래 클래스에 만족하는 계층 ..
com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) Intorduction 일반적으로 스프링과 com.fasterxml.jackson를 사용하여 컨트롤러 메소드에서 @ResponseBody 어노테이션을 이용하면 알아서 객체가 JSON 으로 변환되어 나가게 된다. @RequestMapping(value = "/file/list", method = RequestMethod.GET) @ResponseBody public ModelMap list() { ModelMap mm = new ModelMap(); List list = fileService.list(); mm.put("list", list); return mm; } 만약 변환해야 하는 객체가 아래와 같이 순환 참조되는 객체일 경우 JSON 으로 변환을 하다가 에러가 나게 된다. 아래 소스 코드와 같이 간..