batch 성 업무를 처리할때 동일한 쿼리에 바인딩할 값만 변경하여 계속 반복하며 처리해야 하는 상황이 있다. public void updateEmployee(List list) { for (Employee employee : list) { sqlSession.update("Employee.updateEmployee", employee); } } 이런식으로 java에서 for문을 돌며 몇번이고 update 쿼리를 호출하는 방식인데 바람직하지 않다. 성능을 끌어 올리고 싶다면 MyBatis의 foreach문을 이용하여 처리를 해주는 방법이 있다. sql UPDATE employee SET salary = 50000 WHERE employeeID IN #{employee.employeeID} java pub..
프로젝트를 수행함에 있어 오픈시 가장 크리티컬한 문제이기도 하고 자주 문제가 발생하는 부분인 Transaction 오류에 관련된 내용을 정리해본다. Transaction이 잘 수행되다가 사용자가 몰리면 DB가 죽는경우 Spring Framework를 사용하는 경우라면 Transaction을 Spring Container 안에서 설정을 해야 한다. (선언적 트랜잭션) 선언적 트랜잭션 중 XML 선언방식을 사용할 때 잘못된 예와 잘 설정된 예를 보자면 * 잘못된 예 * 잘 설정된 예 위의 안좋은 예는 현재 모든 서비스 구현체 클래스 안의 모든 메소드에 대해서 트랜잭션을 수행하도록 설정이 되어 있다. 이는 매우 비효율적인 방법으로 성능에 안좋은 영향을 미친다. 조회문이 트랜잭션을 생성한다면 사람이 많아지면 트..
Springboot 환경에서 web.xml 의 jsp-config 사용하기 (w.SpringBootServletInitializer) 일전에 똑같은 주제에 대해 글을 썼었는데 더 괜찮은 방법이 있어서 다시 글을 작성해본다. 적용방법은 아주 간단하다. web.xml *.jsp UTF-8 false /WEB-INF/jsp/common/c.. oingdaddy.tistory.com 더 괜찮은 방법이 있어서 아래의 글보다는 이 글을 참조하길 바란다. 기존의 프로젝트를 springboot 전환 과정에서, 모든 jsp에서 include하고 있는 공통 jsp 파일에 대해 전환하는 부분을 찾기 힘들었다. stackoverflow 같은곳에서 도움을 얻고자 열심히 찾아보았지만 jsp 자체가 springboot 표준이 아니..
springboot를 기동을 시작하면 제일 먼저 다음 문구가 나오는것을 확인할 수 있다. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.4.2.RELEASE) [12:24:20.819][INFO ][sample.Application.logStarting:line48] - Starting Application 이런것을 banner(배..
자바로 코딩을 할때 반복적으로 또는 기계적으로 작업을 해야 하는 몇몇 경우가 있다. 예를들면 model 클래스를 작성할때 멤버변수를 정의하고 그에 따른 getter, setter 등을 만든다거나 로그를 사용할 클래스에서 매번 로그를 정의해 줘야 하는 이런 반복적인 일들. 이런 불편함을 조금이나마 해소해주는 녀석이 있다. 바로 lombok 이라는 녀석이다. lombok의 여러가지 기능이 있지만 지금은 lombok을 사용하여 매번 로그 객체를 만들던 수고를 덜어보는걸 해보도록 하겠다. 우리가 일반적으로 로그를 찍기 위해서 했던 행동들을 일단 보자. private static final Logger LOG = LoggerFactory.getLogger(Sample.class); slf4j를 통해 로깅을 하는데..
프로젝트를 하다 보면 LogFactory 관련 오류가 나는 경우가 있다. 말그대로 LogFactory 클래스를 찾지 못해서 발생하는 exception이다. 이유는 다 exclusion 만 시켰지 '연결'을 시켜주지 않아서이다. org.springframework spring-core commons-logging commons-logging ${org.springframework.version} 보통 이런 식으로 slf4j로 logging을 하기 위해 commons-logging을 exclusion을 시킨다. 그리고 slf4j, 구현체 logging framework를 dependency에 추가를 하고 다음을 추가해줘야 한다. org.slf4j jcl-over-slf4j ${slf4j.version} jc..
지난 글인 File to File 예제를 통해 어떤것이 Chunk 지향적인것인지 간단히 알수 있었다. Spring Batch Chunk Example (1) - File to File (with FlatFileItemReader, FlatFileItemWriter) 현재까지 진행한 대부분의 프로젝트는 복잡하기도 하고 상황에 맞지 않아(WebService, EAI 연동 등) Spring Batch에서 일반적으로 사용하고 있는 chunk 방식 대신에 tasklet을 이용하여 사용하였다. tasklet을 oingdaddy.tistory.com DB to DB는 File to File에서 기본적인것은 충분히 언급을 했으므로 바로 예제로 들어가겠다. context-batch-job-db2db.xml ... 생략 ..
현재까지 진행한 대부분의 프로젝트는 복잡하기도 하고 상황에 맞지 않아(WebService, EAI 연동 등) Spring Batch에서 일반적으로 사용하고 있는 chunk 방식 대신에 tasklet을 이용하여 사용하였다. tasklet을 이용한다면 하나의 자바 메소드 안에 내가 필요한 내용만을 쭉 기술해서 사용하면 되므로 Spring Batch에 대한 개념이 없어도 쉽게 접근이 가능하다. 하지만 Spring Batch에서 일반적으로 사용되고 또 권고하는 chunk 방식이 더욱 강력한 성능을 가지고 있기에 공부를 더 하고 이를 활용한 개발방식의 변화도 필요하다. 그래서 Spring Batch를 사용하며 이론적으로는 많이 들었던 개념인 chunk (file2file, file2db, db2file, db2d..