java (72) 썸네일형 리스트형 [Spring] 자바 웹 애플리케이션 & WAS 동작 원리 파이썬 웹 애플리케이션을 실행하기 위한 Gateway Interface 서버인 WSGI, ASGI 등에 대해 정리한 적이 있다. 이러한 Gateway Interface 서버는 파이썬으로 구현되어 있어서, Django와 같은 파이썬 웹 프레임워크로 개발된 애플리케이션을 파이썬 모듈로 import 하여 사용할 수 있다. 이는 인터페이스 서버가 동작하는 프로세스 안에서 해당 애플리케이션 코드를 직접 import하여 Python object 또는 callable 형태로 사용한다는 의미이다. 그렇다면 자바에서는 어떨까? 파이썬의 Gateway Interface 서버와 유사하게, 자바에도 Tomcat, Jetty 등의 웹 애플리케이션 서버 (WAS) 가 존재한다. 이들 서버 역시 요청을 받아 자바 애플리케이션을 .. [Java] Record 1. Record 란?Record 는 JDK 14 에서 preview feature 로 처음 추가된 기능으로 불변 데이터 전달을 위한 클래스 타입이다. Record 는 생성자와 getter, equals(), hashCode(), toString() 과 같이 일반적인 데이터 클래스가 가지게 되는 기능을 자동으로 가지게 되어 boilerplate 코드들을 제거해준다. Record 의 선언부의 헤더를 통해서 필드가 선언된다. 이때 Record 의 필드는 모두 불변이기 떄문에 내부적으로 final 로 선언된다. record Rectangle(double length, double width) { }public final class Rectangle { private final double length; .. [gRPC] gRPC - Java 이전의 글들에서는 gRPC 의 기본 개념과 gRPC 에서 사용하는 proto buffer 와 이를 정의하는 proto file 등에 대해서 정리했다. 이번에는 gRPC 를 실제 프로그래밍 언어에서 사용하는 방법을 정리해보려 한다.grpc 는 Java, Go, Kotlin, C++, Dart, Node, Python, Ruby 등등 다양한 언어를 지원한다. 그 중에서 Java 로 gRPC 를 사용하는 법, 그리고 Java 와 많이 사용되는 웹 프레임워크인 스프링에서 gRPC 서버를 같이 사용하는 법을 정리해본다.1. 자바 프로젝트 설정자바에서 gRPC 를 사용하기 위해서는 먼저 자바 프로젝트의 환경 설정부터 진행해줘야 한다. 자바 프로젝트는 gradle 기반으로 생성하였고 gRPC 를 사용하기 위해서 gr.. [JAVA] Virtual Thread 블로그 포스트 등을 통해서 Java21 에 대한 내용들을 접하게 되었다. 그중에서 virtual thread 에 대한 글들을 많이 접할 수 있었다. virtual thread 가 기존 thread 보다 가볍고 성능이 우수하다는 내용을 접하면서 흥미가 생겼고, 이전에 I/O 작업을 처리하기 위하여 사용했던 파이썬의 asyncio 와도 유사한 느낌이 들어서 virtual thread 와 관련 내용을 정리해보려고 한다.1. virtual thread 란?virtual thread 는 기존 자바의 동시성 모델을 개선하고자 하는 Project Room 에 의해 시작된 경량화 스레드 기술로 JDK21 에 정식 기능으로 추가되었다. 기존의 방식과 비교하여 많은 동시성 작업에 대해서 처리량이 많고 대기시간이 짧도록 개.. [JPA] LazyInitializationException 과 OSIV 테스트 코드를 작성하다가 LazyInitializationException 에러가 발생하였다. 이슈에 대해서 찾아보니 JPA 의 lazy loading 과 관련된 이슈였으며, @Transactional 등을 사용하여 해결할 수 있었다. 오늘은 해당 이슈가 발생하고 이를 해결하면서 가졌던 의문점과 이에 대한 설명을 정리해본다. 1. LazyInitializationException 에러 설명 및 발생 원인 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.msa.dataset.domain.entity.Project.categories: could not initialize proxy .. [JAVA] 람다식 (lambda expression) 자바의 람다식을 사용하던 중 "Local variable number defined in an enclosing scope must be final or effectively final" 라는 에러가 발생했다. 이 에러는 람다식에서 지역변수에 접근할때 발생하였는데, 찾아보니 메모리에서 람다식의 변수를 관리하는 방식과 관련된 문제였다. 해당 에러를 알아보면서 이번 기회에 람다식에 대해서도 한번 정리해보았다. 1. 람다식 (lambda expression) 람다식은 자바 1.8 버전부터 제공된 기능으로 함수를 하나의 식으로 표현한 것이다. 람다식은 메서드의 이름과 반환값이 필요없는 익명함수로 괄호와 화살표를 사용하여 식을 표현한다. (매개변수, ...) -> { 실행문 } 람다식을 사용하게 되면 보다 간결하.. [SpringBoot] Logging - 3 (log4j2) 이전에 springboot 의 로깅 프레임워크를 공부하면서 logback 까지만 공부하고 사용했었다. 보다 최신 로깅 프레임워크인 log4j2 를 한번 들여다보고 싶었는데 기회가 없다가 이번에 개인 공부를 하면서 로그 환경을 설정할 기회가 있어서 log4j2 에 대해서 알아보았다. 1. log4j2 log4j2 는 자바 로깅 프레임워크 중 하나로 log4j 의 최신버전이다. 비동기 로깅을 통해서 logback 이나 이전버전의 log4j 보다 성능을 향상시킨 버전이다. Log4j2 기능 Async Logger log4j2 는 비동기 로깅 기능이 추가되었다. 비동기 로깅은 I/O 작업을 별개의 스레드에서 실행하도록 하여 애플리케이션의 성능을 향상시킨다. 이를 통해서 logger 가 처리할 수 있는 처리량이 .. [Spring] JaCoCo 테스트 코드를 작성하다 보면 단순히 내가 작성한 테스트 코드의 성공 여부 외에도 얼마나 내가 테스트 코드를 잘 작성하고 있는지 확인할 필요가 있다. 이럴 때 사용하는 것이 코드 커버리지 툴인데, 이러한 툴들을 사용하면 내가 작성한 테스트 코드의 커버리지와 기준에 미치는지 여부 등을 리포트 형식으로 체계적으로 확인할 수 있다. 1. JaCoCo JaCoCo 는 Java 코드의 커버리지를 체크하는 라이브러리이다. 테스트 코드를 실행하고 그 결과로 html 이나 xml, csv 형식의 리포트를 생성한다. 이 리포트를 통해서 소스 코드 중에서 테스트 되어지는 라인과 분기들에 대해서 확인할 수 있다. 이 글에서는 spring 프로젝트에서 JaCoCo 를 사용하여 테스트 커버리지를 확인하는 방법을 설명할 것이다. .. 이전 1 2 3 4 ··· 9 다음