Virtual Thread

기존 Thread는 실제 OS의 Thread와 1대1 대응됩니다. 여기서 너무 많은 Thread를 생성하면 오버헤드가 발생해 성능 저하가 발생되는데요 Java 17부터 추가된 Virtual Thread는 실제 스레드에 비해 경량화되어 있으며, 수백만 개의 스레드를 생성하더라도 소프트웨어적인 부하를 크게 줄일 수 있습니다. 사용하면 하나의 Thread에 여러 Vitrual thread가 대응됩니다.

Java템플릿 엔진 성능

템플릿 엔진은 동적 콘텐츠(HTML)을 생성하는데에 쓰입니다. 대표적으로 Spring에서 사용되는 thymeleaf와 Apache Freemarker, Velocity 등이 있네요 github에서 벤치마킹을 한 결과가 있어서 가져왔습니다. 역시 JSP가 가장 빠르네요 https://github.com/jreijn/spring-comparing-template-engines

java 성능 향상 팁 (String.split, SimeDateFormat)

java 기본 클래스 중에 단순한 기능에 비하여 성능이 떨어지는 것들이 있다. 이따금 호출되는 정도라면 크게 상관 없지만, 아주 많이 반복적으로 호출되는 코드에 아래 클래스를 사용하면 성능이 떨어진다. String.split 대신에 StringTokenizer를 사용할 수 있는데 아래 조건에서는 StringTokenizer가 더 빠르다. SimeDateFormat 함수는 일단 Thread Safe가 아니다. Multi Thread 환경에서는 의도했던 결과가 나오지 않을 수도 있음. 대신에 더 … Read more

디자인패턴 책 추천

자바 개발자라면, 특히 초급이 아니려면, 반드시 읽어봐야할 유명한 책을 소개한다 ^^ Head First Design Patterns 디자인패턴 입문에 제일 좋은 책 같다. 나도 집에 디자인패턴 책이 2권이나 있었는데, 다 재미없어서(…) 읽다가 말았는데, 이 책은 다른 책과는 달리 이해하기 쉬운 순서로 패턴을 소개한다.내 기억에 제일 첫번째로 소개한 패턴은 “상속이 아닌 컴포지션을 사용하라!” 였다. 또 슷비슷하면서 다른 패턴이 … Read more

개발자용 폰트 비교체험!

(코딩 발로 하면서 이런 것만 따진다;;) 난 Clear Type 이라 하더라도 미묘한 흐릿함이 싫어서 Anti-aliasing 용 폰트는 싫어한다. 그저 검은색과 흰색으로도 충분히 잘 보이는 폰트가 좋다. # 프로그래밍용 폰트의 조건 : source-code-pro D2 Coding Ubuntu Monospace

[java spring] Swagger 적용하기

Swagger 설정하기 위해서는 먼저 Spring Boot 프로젝트에 springfox-swagger2와 springfox-swagger-ui 라이브러리를 추가해야 합니다. 그리고 설정 클래스를 만들어 Swagger를 활성화해야 합니다. @Configurationpublic class SwaggerConfig {

gradle vs maven

프로젝트 빌드는 소프트웨어 개발 과정에서 핵심 단계 중 하나입니다. 이 단계를 효과적으로 관리하고 자동화하기 위해 다양한 빌드 도구가 등장했습니다. 그 중에서도 Java 개발자들 사이에서 널리 사용되는 Maven과 Gradle은 각각의 독특한 특징을 가지고 있습니다. Maven Apache Maven은 Apache Software Foundation에서 개발한 빌드 도구로, XML 기반의 프로젝트 관리 도구입니다. Maven은 프로젝트의 라이프사이클 관리, 의존성 관리, 라이브러리 관리를 … Read more

[Spring] DB 컨넥션 풀 이용하여 접속하기

pom.xml에 JPA와 Hibernate을 사용하기 위해 의존성 추가 application.properties에 DB 설정 추가 Spring에서는 보통 Bean을 이용해 DataSource를 생성하지만 직접 생성할 수도 있습니다. HikariCP를 이용해 Connection Pool을 관리하게 되는데, 따로 코드는 필요없습니다.

[Spring] DAO, DTO, VO 정리

특성 DAO (Data Access Object) DTO (Data Transfer Object) VO (Value Object) 목적 데이터베이스와의 상호작용, 영속성 계층 구현 계층 간 데이터 전송 도메인 객체의 불변성 유지 기능 데이터베이스에 대한 CRUD 작업 수행 계층 간 데이터 전송 및 캡슐화 도메인 객체의 상태 저장 역할 영속성 계층의 역할을 수행 서비스 계층과 뷰 계층 간 데이터 전송 도메인 … Read more