전체 글
-
AssertJ 오픈소스 컨트리뷰트 하기Spring 2024. 8. 5. 02:37
서론여러 프로젝트를 진행하면서 테스트코드의 중요성에 대해서 느낄 수 있었다. 소형테스트와 중형테스트 그리고 대형테스트를 엄격하게 분리하여 코드를 작성해보며, 각 단계들의 테스트들이 단계에 맞는 역할을 하도록 만들었다. 이를 통해, 각 단계의 테스트코드들의 가독성을 높일 수 있었고 더하여 소형테스트와 Embedded DB를 분리함으로써 성능또한 높일 수 있었다. Spring에서는 일반적으로 AssertJ를 이용하여 테스트코드를 작성한다. AssertJ는 테스트코드 작성을 도와주는 Java Libary이다. Spring 개발자로서 본인도 AssertJ를 밥먹듯이 사용하여 테스트코드를 작성하고 있다. AssertJ를 사용해보며 문득, AssertJ가 어떻게 만들어졌는지에 대해 궁금하여 AssertJ 오픈소스..
-
지연로딩 , 즉시로딩 JPA 최적화Spring 2024. 7. 1. 17:17
서론프로젝트를 진행하며 RDB를 이용해서 많은 테이블들을 JOIN하는 상황이 생겼다. 이전에 JPA의 Annotation(One-to-Many, Many-to-One)을 사용해서 다중관계를 처리한적이 있기 때문에 이를 적용하면 된다고 생각하였다. 하지만, 이를 적용해나가는 과정에서 여러 문제들에 직면하게 되었다. 여러 종류들의 JOIN들을 분석하고 프로젝트에서 최적의 JOIN을 하는 법을 알아보려고 한다.현재 프로젝트에 적용된 EntityLab Entity@Data@Entity@Table(name = "labs")public class LabEntity { @Id @Column(name = "lab_id") private String id;// private enum school;/..
-
Try with Resources / Try Finally스터디 2024. 6. 10. 01:44
도입최근 이펙티브 자바 책을 읽으며, 객체 생성과 파괴 파트에서 try-with-resources 관련 내용을 볼 수 있었다. 저자는 try-finally 보다는 try-with-resources를 사용을 권장한다.InputStream, OutputStream, java.sql.Connection 등 close 메서드를 직접 닫아줘야하는 자원에 대해서 이러한 내용을 제시하였다.저자는 다양한 자원들이 finalizer, cleaner를 안전망으로 활용하고 있으나, 이에 대한 문제점을 제기한다.닫아야할 자원이 여러 개인 경우 try-finally는 중첩으로 인해 지저분한 구조를 갖게 된다.finally 블록에서도 예외가 발생할 수 있으므로 finally 블록에서 발생한 예외가 다른 예외를 삼켜버려 close..
-
Spring Annotation 의 내부구조 동작원리스터디 2024. 6. 9. 03:44
Spring Annotation 이란 ?Annotation은 Java 5부터 추가된 문법 요소로, 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술Annotation 의 용도컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공소프트웨어 개발툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보 제공실행시(런타임시)특정 기능을 실행하도록 정보를 제공 → 이걸 젤 많이 사용함Myannotation interfacepackage myannotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import ..
-
JAVA 병렬 프로그래밍스터디 2024. 6. 9. 03:40
Spring Webflux란?Spring Webflux는 리액티브 웹 애플리케이션 구현을 위해 Spring 5.0부터 지원되는 Reactive Web Framework이다.Event-Driven 방식Async Non-Blocking즉, 이벤트 루프가 돌아서 요청이 발생할 경우, 그것에 맞는 핸들러에게 처리를 위임하고 처리가 완료되면 callback 메소드 등을 통해 응답을 반환 받는다.이 방식의 경우 요청이 처리될 때까지 기다리지 않기 때문에 Spring MVC에 비해 사용자의 요청을 대량으로 받아낼 수 있다는 장점이 있다.(CPU, Thread, Memory에 자원을 낭비하지 않고 효율적으로 동작, 서비스 간 호출이 많은 마이크로 서비스 아키텍처에 적합하다.)Spring Webflux 탄생 배경Spri..
-
Spring Transactional 뜯어보기스터디 2024. 5. 15. 19:16
Transaction 이란 ?데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위데이터베이스의 상태를 변경시킨다는 말 은 SELECT, UPDATE, INSERT, DELETE 와 같은 행동을 뜻한다.Transaction의 특징원자성(Atomicity)원자성은 트랜잭션이 DB에 모두 반영되거나, 전혀 반영되지 않거나를 뜻한다.일관성(Consistency)일관성은 트랜잭션 작업 처리의 결과가 항상 일관되어야 한다를 뜻한다.데이터 타입이 변경 전후가 같아야 한다독립성(Isolation)어떤 하나의 트랙잭션의 다른 트랙젹션의 연산에 끼어들 수 없다지속성트랙잭션이 완료된 후에, 결과가 데이터베이스에 영구적으로 반영되어야 한다Commit과 RollbackCommit이란 하나의 트랜잭션이 성공적으로 끝났고, ..
-
Spring Tomcat 분석스터디 2024. 5. 1. 17:54
Tomcat이란 ?Servlet Container 를 통해 Servlet을 제공하는 WAS (Web Application Server)이다.서블릿 처리, 서블릿의 수명 주기 관리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등을 처리를 한다Servlet Container란 ?Servlet Container란 Servlet의 creation / execution / destruction을 관리하는 container이다.그럼 Servlet은 ??Servlet이란 WAS위에서 동작하는 JAVA 객체(클래스)이다. Servlet 동작과정사용자 요청이 들어옴HTTP요청을 처리하기 위핸 Request, Response 생성web.xml을 바탕으로 어떤 Servlet에 대한 요..
-
Spring - gRPC 적용 성능 최적화Spring 2024. 5. 1. 17:50
서론 Spring MSA 서버를 제작하며 서버 간 통신을 RestTemplate을 기반으로 하였다.RestTemplate은 단순하게 HTTP 기반으로 통신을 하여 데이터를 주고 받는다. RestTemplate은 가장 일반적으로 서버 간에 통신에서 사용되는 방법이라고 생각한다. Jmeter를 이용하여 부하테스트를 하였을 경우, TPS가 32.0/sec 정도로 생각보다 많이 낮게 나왔다. 하나의 서비스에서 TPS가 낮게 나오는 데에는 많은 이유가 있겠지만, 서버간 통신을 진행할때 유독 낮게 나와서 RestTemplate을 기반으로한 HTTP 통신의 근본적인 문제로 인해서 낮게 나오지 않을까 생각하였다. 서버간 통신기법에는 다양한 방법이 있지만, 빠른 직렬화를 바탕으로 데이터를 빠르게 전달할 수 있는 gRP..