본문 바로가기
반응형

Delvelopment/Spring8

[Spring] WebFlux EventLoop (Non Blocking) Spring Webflux에서 사용되는 EventLoop를 보기 위해 Spring mvc 에서 사용되는 thread per request에 대해서 비교해 보려고 한다. 두 모델의 차이는 Blocking처리 방식과 Non-Blocking 처리 방식으로 Thead의 idle 시간을 줄여 동시에 더 많은 요청을 처리 할 수 있게된다. Spring mvc에서는 DispathServlet형태의 Servlet으로 처리되어 톰캣에 의존적입니다. 또한, thead per request방식으로 Servlet Container에서 요청을 Thread에 할당하여 Blocking 방식으로 호출되며 Idle 상태가 됩니다. Blocking 방식으로 idle 상태가 유지되면 많은 요청이 있는 서비스에서는 적절한 처리를 하지 못하.. 2022. 12. 4.
[Spring] multiple Datasource 설정과 JPA와 Mybatis 연동 그리고 Querydsl 설정까지 (h2, mysql, mssql, rds) 기존 JPA에 RDS를 주로 개발하던 도중. 레거시 시스템의 db 연동이 필요한 시점이 왔다. 데이터 마이그를 하고싶은데 백오피스에 대한 대응을 내가 다 할 수 없으니.. 뭐 어쩌겠어.. 데이터 넣어줘야지 그래서 multi datasource에 대한 작업을 시작.. 우선 설정에 필요한 내용은. Database 정보 JPA에서 사용할 Entity Package 경로 Hibernate 설정 Mybais 에서 사용할 mapper package 경로 application.yml Database 정보들이 필요하다. spring: config: activate: on-profile: local datasource: jdbc-url: jdbc:mysql:// username: password: driver-class.. 2022. 5. 4.
[Spring Hibernate] java.sql.SQLSyntaxErrorException: Unknown table 'SEQUENCES' in information_schema Error Spring 프로젝트에서 JPA를 사용하던 도중 multi DataSource를 적용할 일이 발생했다. 설정을 하던 도중 java.sql.SQLSyntaxErrorException: Unknown table 'SEQUENCES' in information_schema Error hibernate 설정에 "dialect" 설정을 PostgreSQL로 설정을 해뒀던것.. 내가 설정한 db는 Mysql이였기에 문제 발생. 아래 DatabaseConfig.class에 hibernate 설정을 공유한다. 알맞은 dialect 설정을 진행하면 된다. 아래는 multi Datasource설정을 위해 컨피그 파일로 분리한 것이고 application.yml에 설정이 기본적으로 사용되니 그곳에서 변경하시면 됩니다. pu.. 2022. 5. 4.
[Spring, Java] SLF4J Logger 올바른 사용법. (log4j2, logback) 새로운 직장으로 회사를 옮기면서 레거시 시스템을 보는일이 생기게 되었고, Logger를 세가지 방법으로 사용하는 것을 보고 공유가 필요하다고 느꼇다. (정확히 레거시의 개발자는 누군지 모르겠다. 많은 사람들의 손을 탄거 같다.) 우선, Spring 에서 Logger를 세가지를 쓸 수 있다, Log4j2, log4j, logback 이다. 세개의 차이는 " " 에서 확인해 보면된다. 이 글은 어떤 라이브러리를 쓰든 공통으로 지켜야할 약속이라고 생각한다. (성능적으로 가독성 측면으로) Log의 발생이 성능적으로 큰 이슈가 될 수 있음을 경험해 봤는데, 스트레스 테스트를 10만 건을 진행했을때 Logger를 어느정도 사용했냐 안했냐에 따라 성능적인 지표가 크게 차이났기 때문이다. 보통의 개발자는 신경쓰지 않지.. 2021. 11. 20.
[Spring] 트랜잭션 설정 propagation (전파속성) @Transactional 종류 / propagation 전파속성 Spring framework 환경하에서 개발하다보면 필요한 Transaction에 대한 기본적인 설정들이다. 간혹 설정을 제대로 안해놔서 rollback이 되버리는 case도 존재하기도 했었다. REQUIRED와 REQUIRES_NEW를 보통 사용했는데, 다른 격리수준도 확인차 정리한다. REQUIRED(기본값) 부모 트랜잭션이 없다면 새로운 트랜잭션 생성.해당 메써드가 호출한 곳와 별도의 쓰레드라면 어떤 동작이 일어날까? 답은 전파 레벨과 상관 없이 무조건 별도의 트랜잭션을 생성하여 해당 메써드를 실행한다. Spirng은 내부적으로 트랜잭션 정보를 ThreadLocal 변수에 저장하기 때문에 다른 쓰레드로 트랜잭션이 전파되지 않는다 중.. 2021. 3. 19.
JSP/JSTL 태그, 내장함수 ( <c:if>, <c:choose>, fn:length() 등...) c:if, c:choose 태그와 fn:length, fn:contain 등의 함수 정리 if else는 없다 필요하다면 choose 태그를 사용해야한다. 해당 태그는 조건에 따른 다중 분기처리가 가능하다. JSTL 함수 https://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/fn/tld-summary.html 오라클 공홈에 공유된 정보이다. ${fn:contains(str, str)} return boolean 대소문자 구분. ${fn:contains("HelloWorld!!", "World")} // true ${fn:contains("HelloWorld!!", "world")} // false ${fn:containsIgnoreCase(str, str)} .. 2020. 4. 19.
반응형