Spring 11

카운트 증가 로직 성능 향상을 위한 방법

각각의 요청마다 조회 수나 노출 수 등을 증가시켜야 한다면 어떻게 처리하는 것이 좋을까? 단순하게는 요청이 올때마다 +1씩 업데이트를 해주면 된다. 하지만 대량의 트래픽이 발생되는 환경에서 매 번 많은 비용이 소모되는 디비 연결과 update가 이루어진다면 부하를 감당하지 못 해 장애로 연결될 것 이 뻔하다. 개선을 위한 방법 중 하나는, 로컬 메모리로 매 번 요청되는 카운트 증가를 관리하고 일정시간마다 한 번 씩 모아서 db에 update하는 방법이다. 참고용으로 코드를 적어둔다. 흐름 카운트 증가 요청 시 매번 countMap에 누적 (CountService.addReadCount) 매 5초마다 countMap의 누적 카운트를 DB로 업데이트 (ScheduledTasks.addCountInDb) pu..

Dev/Backend 2019.09.26

[spring] NoClassDefFoundError: org/apache/ibatis/cursor/Cursor 문제 해결

사내에서 사용중인 모듈을 추가하였더니.. NoClassDefFoundError: org/apache/ibatis/cursor/Cursor 요런 에러가 떨어졌다.. 검색해보니 mybatis 와 mybatis-spring 사이의 버전이 맞지 않아서 생기는 것이라고 한다. libraries에서 해당 dependency의 버전을 확인해 보았더니.. Maven: org.mybatis:mybatis:3.2.8 Maven: org.mybatis:mybatis-spring:1.3.0 http://mvnrepository.com/artifact/org.mybatis/mybatis-spring/1.3.0 여기서 검색해본 결과 맞는 mybatis 버전은 3.4.0 이군.. 따라서.. pom.xml에 디펜던시를 새로 추가해주..

Dev/트러블슈팅 2017.11.20

[Spring, Tomcat] Could not parse multipart servlet request Unable to process parts as no multi-part configuration has been provided 해결

HTTP Status 500 - Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been providedStack trace from browser:type Exception report message Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has be..

Dev/트러블슈팅 2017.05.04

spring cron scheduler 표현식 양식 및 예제

스케쥴러 cron 양식 초 0-59 , - * / 분 0-59 , - * / 시 0-23 , - * / 일 1-31 , - * ? / L W월 1-12 or JAN-DEC , - * / 요일 1-7 or SUN-SAT , - * ? / L # 년(옵션) 1970-2099 , - * /* : 모든 값? : 특정 값 없음- : 범위 지정에 사용, : 여러 값 지정 구분에 사용/ : 초기값과 증가치 설정에 사용L : 지정할 수 있는 범위의 마지막 값W : 월~금요일 또는 가장 가까운 월/금요일# : 몇 번째 무슨 요일 2#1 => 첫 번째 월요일 예제) Expression Meaning 초 분 시 일 월 주(년) "0 0 12 * * ?" : 아무 요일, 매월, 매일 12:00:00 "0 15 10 ? * *..

Dev/Backend 2017.01.06

[Spring Tip] controller에서 @RequstBody, @RequestHeader 를 같이 사용해보자

스프링 사용하다가... controller에서 이렇게 선언해보았다... public TestDTO businessTest(@RequestBody TestDTO dto2, @RequestHeader(value="api-key") String key) throws Exception { 안된다.. ㅋㅋ 대부분 controller에 @RestController 가 선언되어 있을텐데 내부에 @ResponseBody를 포함하고 있다. @ResponseBody 사용시에는 @RequestBody와 @RequestHeader 를 혼용하여 사용할 수 없다는군.. 그래서 해결법은 @RequestMapping("/something") public ResponseEntity handle(HttpEntity requestEnti..

Dev/Backend 2016.09.20

[Spring boot] 스프링부트 오류 해결 : Execution failed for task ':bootRepackage'. > Invalid signature file digest for Manifest main attributes

우선 빌드가 잘 되던 것이 갑자기 bootRepackage 단계에서 이런 에러를 내뱉으니.... Execution failed for task ':bootRepackage'. > Invalid signature file digest for Manifest main attributes 아마도 remote-shell 사용을 위해 추가한 compile("org.springframework.boot:spring-boot-starter-security") compile("org.springframework.boot:spring-boot-starter-remote-shell") 디펜던시 때문에 그런가 봅니다. security 때문에 그런듯? 구글링 결과 해결법은 다음과 같습니다. jar { doFirst { fro..

Dev/트러블슈팅 2016.07.09

Spring MVC 패턴에서 ajax를 활용한 실시간 댓글달기 소스

컨트롤러 - ReCmtController @Controller public class ReCmtController { @Autowired private ReboardDao dao; @RequestMapping(value="/re/listCmt", method={RequestMethod.GET, RequestMethod.POST}) public String listCmt(String no, ModelMap map) { List listCmt = dao.getListCmt(no); map.put("listCmt", listCmt); return "reboard/listCmt"; } @RequestMapping(value="/re/createCmt", method={RequestMethod.GET, Reque..

Dev/Backend 2012.11.28