Home
zz9z9
Cancel

자바로 엑셀을 만들기 위한 POI 라이브러리 살펴보기

회사 프로젝트에서 조회한 화면에 대해 엑셀 파일로 다운받게 만들어주는 기능을 구현해야 했다. 방법을 찾다보니 POI 라이브러리라는게 있었고 이를 활용해서 구현할 수 있었다. 하지만, 다른 파트에서 해당 라이브러리를 사용하다 OOM(Out Of Memory)에러가 발생했고, 구현체를 살펴보니 XSSF의 usermodel을 사용하고 있었다. 해당 파트에서...

자바 메모리 단면 분석하기

언제 메모리 단면을 분석해야할까 ? 메모리 단면인 ‘힙 덤프(Heap Dump)’는 생성하는데 비용이 비싸기 때문에, 메모리가 부족해지는 현상이 지속해서 발생하거나 OOM 에러가 발생했을 때 생성해야 한다. 여기서 말하는 비용이란 다음과 같다 덤프 파일을 생성하는 동안 서비스가 불가능한 상황이 된다. 덤프 생성시 많은 시간이 소요될 수 있...

자바 힙 메모리 사이즈와 OutOfMemoryError

지금까지 OutOfMemoryError(OOM)을 만나게 되면, 정확한 진단없이 그냥 성능 팀에서 하라는 대로 Xms, Xmx 옵션을 활용해서 힙 크기를 조절했던 것 같다. 내가 스스로 판단할 수 있게끔 지식을 갖추고 연습해보자. 힙 메모리 사이즈 기본값 공식 문서 에 보면 default로 세팅되는 초기 힙사이즈와 최대 힙사이즈에 대해 나와...

카프카의 전반적인 구성과 동작 방식 살펴보기

※ 해당 내용은 ‘실전 아파치 카프카(한빛미디어)’ 2장을 읽고 필요한 부분을 정리한 내용입니다. 분산 메세징 처리를 위한 시스템 구성 출처 : https://www.gavstech.com/all-about-apache-kafka-an-evolved-log/ 1. 파티션 브로커상의 데이터를 읽고 쓰는 것은 파티션이라는 단위로 ...

카프카 개요

※ 해당 내용은 ‘실전 아파치 카프카(한빛미디어)’ 1장을 읽고 필요한 부분을 정리한 내용입니다. Apache Kafka란? 카프카는 분산 메세징 시스템이다 분산 분산 시스템(distributed system, 또는 분산 컴퓨팅) 서로 다른 시스템에 위치한 구성 요소들간에 통신하고 협력하여 구성되는 시...

MSA 기반의 회사 프로젝트에 단위 테스트 코드 적용하기

들어가기 전 부끄러운 얘기지만 내가 회사에서 경험했던 프로젝트에는 테스트 코드가 없었다. 제작 당시 테스트 코드 작성에 대한 얘기가 아예 나오지 않았던 것은 아니지만, 당시 여론은 ‘제작 기간 맞추기도 쉽지 않은데 언제 그걸 하고 앉아있냐’라는 의견이 주를 이뤘다. 나 또한 테스트 코드의 중요성에 대해 잘 알지 못했고, 빡빡한 제작기간으로 인해 밥...

MSA 환경에서 테스트하기(2) - 통합 테스트

※ 해당 내용은 ‘마이크로서비스 패턴(크리스 리처드슨)’ 10장을 읽고 필요한 부분을 정리한 내용입니다. 서비스가 서로 올바르게 상호 작용하는지에 대해서는 단위 테스트만으로는 확인할 수 없다. 예를 들어, 실제 DB에 저장을 했는지, 커맨드 메세지를 올바른 포맷으로, 올바른 채널에 전송했는지 등에 대한 부분이다. 이를 위해, 서비스를 전부 띄워...

MSA 환경에서 테스트하기(1) - 단위 테스트

※ 해당 내용은 ‘마이크로서비스 패턴(크리스 리처드슨)’ 9장을 읽고 필요한 부분을 정리한 내용입니다. 테스트 개요 자동화 테스트 작성 설정 → 실행 → 확인 → 정리 설정 - SUT(System Under Test, 테스트할 대상)와 그 디펜던시로 구성된 테스트 픽스처(test fixture)를 초기화한다. 실행 - SUT 호...

엔티티에서 데이터베이스 키워드/예약어 사용시 발생하는 문제

상황 주문 테이블에 맵핑되는 엔티티를 만들기 위해 ‘Order’라는 클래스 생성 @Getter @Setter @Entity public class Order { @Id private Long id; private OrderStatus orderStatus; } 스프링 부트 실행하고 h2 db에 테이블 생성되...

엔티티에 있는 enum 타입 필드를 DB 컬럼에 어떻게 맵핑시킬 수 있을까 ?

예를 들어 주문 엔티티의 ‘주문 상태’와 같이 enum 타입으로 선언하기 적합한 필드들이 있다. 문자열, 숫자, 날짜 등도 아닌 enum 타입은 DB에 어떻게 저장시켜야할까 ? @Enumerated 1. EnumType.ORDINAL @Enumerated(EnumType.ORDINAL)을 사용하게되면 JPA는 ENUM 클래스의 ord...