파란하늘의 지식창고
반응형
thymeleaf-layout-direct 성능 문제 (groovy 성능 문제)
Study/Java 2019. 9. 24. 10:51

3년 전 쯤에 했던 작업이라 상세한 내용을 적지는 않고 요약해서 정리만 한 글임. Spring 을 사용하면 보통 web template engine을 thymeleaf를 많이 쓴다. 그런데 thymeleaf가 버전이 올라가면서 자체 성능이 올라갔다고 하지만 실제로 성능 테스트를 해보면 정말 느리고 많이 몰리면 서버가 다운된다. 왜 그런가 힙 덤프를 떠보니 문제가 되던 포인트는 groovy 였다. groovy의 어느 위치인지 기억이 나지 않지만 자체 캐시 처리를 하는 코드에 synchronized 처리가 되어 있었고 해당 부분에 병목이 생기면서 데드락이 발생해 성능이 저하되었다. (아래 jira의 경우랑 비슷한거 같긴한데 저건 1.5.1 버전의 closed 된 jira라 관련 내용인지 확실하지 않다...)..

STS 4.4.0 (eclipse 2019-09) 에서 Junit 5 실행 시 PreconditionViolationException NoClassDefFoundError 에러 발생하는 경우
Study/Java 2019. 9. 20. 15:55

2019-09-19에 STS 4.4.0 이 릴리즈 되어 사용해보았다. Junit 5 실행 시 다음과 같은 에러가 발생했다. java.lang.NoClassDefFoundError: org/junit/platform/commons/PreconditionViolationException at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.createFilteredTest(JUnit5TestLoader.java:70) at org.eclipse.jdt.internal.junit5.runner.JUnit5TestLoader.createTest(JUnit5TestLoader.java:64) at org.eclipse.jdt.internal.junit5.runn..

Spring RestTemplate으로 요청 시 302 redirect 된 페이지의 response 결과받기
Study/Java 2019. 8. 9. 15:28

HttpStatus가 302 인 경우 브라우저에서는 해당 페이지로 리다이렉트 되어 화면이 처리된다. restTemplate으로 요청한 응답 결과의 HttpStatus가 302 인 경우는 해당 페이지로 리다이렉트 되지 않고 응답 결과만 반환받는다. 하지만 redirect된 결과로 응답을 받을 수 있는 기능이 있다. restTemplate에서 requestFactory를 apacheml httpclient를 사용하는 경우 지원되는 기능이다. 다음처럼 HttpClientBuilder에 redirectStrategy 설정을 하면 요청된 결과가 302인 경우 해당 페이지로 리다이렉트 된 결과를 반환해준다. RestTemplate restTemplate = new RestTemplate(); HttpComponen..

article thumbnail
Docker가 Window에서 Disk 활성시간이 100%가 되고 응답없는 경우
Study/CI&CD 2019. 8. 2. 13:38

docker를 Windows 10에서 사용하면서 docker 명령어가 응답이 없고 작업 관리자의 Disk가 활성 시간이 100%가 되는 경우가 있다. 대부분의 Docker container를 여러 개 띄워서 메모리를 많이 사용하는 경우 메모리 사용률이 설정된 값을 넘어서 disk로 메모리 사용이 대체되는 경우이다. 메모리를 얼마나 사용하고 있는지 확인하려면 다음 명령어를 사용한다. docker stats docker setting의 메모리 설정을 container가 사용한 총 합보다 높게 설정하면 된다. 추가로 이런 경우 docker를 종료하고 재시작한 후 container를 실행하면 대강 다음과 같은 에러가 발생하는 경우가 있다. ERROR: for worker Cannot start service w..

Docker에 Spring Cloud Data Flow 설치하기
Study/CI&CD 2019. 8. 1. 08:16

개인 공부용으로 windows 10 pro의 Docker 설치 기준임 Docker desktop community 2.3.0 버전, Spring Cluod Data Flow 2.2.0.RELEASE 기준 https://dataflow.spring.io/docs/installation/local/docker/ Spring Cloud Data Flow는 사용하려면 다음과 같은 제품이 있어야 한다고 한다. Spring Cloud Data Flow Server Spring Cloud Skipper Server MySQL Apache Kafka Prometheus Grafana 해당 Docker Compose File을 다운로드하고 해당 디렉터리에서 docker-compose up 명령을 실행한다. (주의! co..

Docker compose 사용하기
Study/Docker & Kubernetes 2019. 8. 1. 03:35

https://docs.docker.com/compose/ 개요 Docker compose는 여러 개의 container를 정의하고 실행하기 위한 도구이다. compose를 사용하면 yaml 파일을 사용해서 서비스를 구성할 수 있다. compose는 모든 환경 (production, staging, development, test, CI workflow)에서 동작한다. compose 사용은 기본적으로 3단계 프로세스이다. 모든 환경에서 재생산할 수 있게 Dockerfile을 정의 격리된 환경에서 함께 실행할 수 있도록 docker-compose.yml로 앱을 구성하는 서비스를 정의 docker-compose up 명령으로 전체 앱을 시작 docker-compose.yml의 모양은 다음과 같다. versi..

article thumbnail
SonarQube 사용하기
Study/CI&CD 2019. 7. 31. 02:00

SonarQube 7.9.1 기준으로 작성함 개인 공부용으로 사용하는 것이라 windows 기준으로 설명함 SonarQube는 코드에서 버그, 취약점 및 code smell을 감지하는 자동 code review tool이다. 기존 workflow와 통합하여 프로젝트 branches와 pull request 간 지속적인 코드 검사를 가능하게 한다. https://www.sonarqube.org/ Community, Developer, Enterprise, Data Center 4종류가 있고 이 중 Community 에디션이 free & opensource이다. 현재 25개 언어를 대상으로 code review를 할 수 있다. SonarQube 설치하기 (Docker 기준) SonarQube만 사용하면 로컬..

Spring Data JDBC로 Spring Data Jpa를 대체할 수 있을까?
Study/Java 2019. 7. 28. 11:37

Spring Boot 2.1.6.RELEASE , Spring Data JDBC 1.0.9.RELEASE 기준 작성된 글 Spring Data JDBC는 Data Jpa가 가진 단점(? 또는 복잡성?)을 해결하기 위해 나온 라이브러리이다. https://www.slideshare.net/SpringCentral/the-new-kid-on-the-block-spring-data-jdbc Data Jpa가 domain mapping과 repository 연계만큼은 편하기 때문에 쓰고 있지만 사실 대다수의 기능을 잘 쓰지 않는다. 딱 거기까지만 쓰기 좋고 관계형 DB를 Java Object로 맵핑하기 위한 다양한 방법들은 복잡하고 영속성이라던가 그밖에 제공하는 다양한 개념들도 그렇게 까지 깊이 있게 쓰지 않았..

Docker network 사용하기
Study/Docker & Kubernetes 2019. 7. 26. 10:21

개인 공부하는 관점에서 사용하는 것을 정리한 내용이기 때문에 실무랑 상관없는 내용입니다. Docker network 소개 Docker를 설치하면 host의 network interface에 docker0이 추가된다. (리눅스는 ifconfig로 확인, 윈도우는 ipconfig로 확인) docker0은 컨테이너와 통신하기 위한 가상 ethernet bridge이고 L2 통신 기반이라고 한다. 컨테이너를 만들면 컨테이너 내부에 eth0이란 이름으로 pair interface가 생성이 되고 host의 docker0에 vethX~ 이름의 bridge가 생성이 되어 연결된다. 우분투의 경우 brctl 명령어로 bridge를 확인할 수 있다. brctl show docker0 또는 ip 명령어로도 확인할 수 있다...

JDK 12 New Features
Study/Java 2019. 7. 18. 14:48

JDK의 버전별 변경 사항은 이곳을 참고하세요. Spec Java SE 12 Platform JSR (386)에 정의된 바와 같이 JSR 386 구현이 목표 실제 Spec은 Final Release Specification 문서를 참고해야 함 Final Release Specification Feature summary 전체 JEP Feature 목록은 OpenJDK의 JDK 12 문서로 확인할 수 있다. Component Feature core-libs / java.lang.invoke JVM Constants API specification / language Switch Expressions (Preview) Switch Expressions (Preview) 해당 기능은 preview 기능이기 때..

반응형