본문 바로가기

전체 글98

EML 조회 시 이슈 회사에서 메일 서비스 운영 중 원문 조회 시 CPU가 급격하게 올라가고 조회하는데 오랜 시간이 걸리는 성능 문제가 발생하였다.AS-ISpublic InputStream getFileInputStream(MessageDto.Search search) { try { File file = getFile(search); return new FileInputStream(file); } catch (IOException e) { ... }} 애플리케이션에서 코드를 조회하는 로직을 확인했을 때, FileInputStream 으로 매번 직접 파일 시스템에 접근하여 파일을 읽어오고 있었다. TO-BE파일 시스템에 매번 접근하여 파일을 읽게되면 I/O 접근이 많아 CPU 사.. 2024. 11. 3.
FileInputStream vs BufferedInputStream FileInputStreamFileInputStream 은 파일을 읽을 때 버퍼링 없이 직접 파일에서 데이터를 읽는다. 파일 시스템에서 매번 직접 가져오기 때문에 I/O 접근이 많아 성능이 다소 느릴 수 있다.매번 파일에서 데이터를 읽기 위해 파일 시스템과의 통신이 필요하기 때문에 CPU가 더 많은 작업을 한다. 이 과정에서 불필요한 오버헤드가 발생하여 CPU 사용량이 높아 질 수 있다.InputStream inputStream = new InputStream(file);BufferedInputStreamBufferedInputStream 은 내부 버퍼를 사용하여 파일을 읽어 올 때 한번에 여러 바이트를 읽어온다. 읽어온 버퍼를 통해 데이터를 제공하며 파일 시스템에 대한 I/O 호출을 줄일 수 있다.버퍼.. 2024. 11. 3.
[Apache Kafka] Kafka Replication란? Kafka Replication은 Kafka에서 데이터의 고가용성을 보장하기 위한 방법으로 각 토픽의 파티션(Partition)을 복제를 통해 클러스터 내의 여러 브로커에 중복 저장하는 것이다.Kafka 브로커가 장애가 생기더라도 데이터 손실을 최소화하고, 클러스터의 가용성을 유지할 수 있다.Replication FactorReplication Factor는 각 파티션의 데이터를 몇 개의 복제본으로 저장할지 결정하는 값이다.예를 들어, 파티션(Partition)이 1개, Replication Factor가 2이면, 원본인 리더 파티션 1개와 복제본인 팔로우 파티션이 1개 존재한다.Replication Factor는 브로커의 수 보다 클 수 없다. Replication이 많아지면 브로커의 리소스 사용량도 .. 2024. 9. 18.
[Apache Kafka] 카프카란 무엇인가? Kafka는 대규모 실시간 데이터 스트리밍을 처리하는 데 사용되는 분산 이벤트 스트리밍 플랫폼분산 이벤트 스트리밍이란, 여러 대의 서버(노드)에 분산되어 저장된 이벤트(데이터)를 실시간으로 처리하는 방식카프카 용어클러스터(Cluster)브로커들의 모임으로 확장성과 고가용성을 위해 여러 개의 Broker가 클러스터로 구성되어 있다.브로커(Broker)카프카가 설치되어 있는 서버 단위를 말하며 보통 3개 이상의 Broker로 구성하는 것을 권장복제(Replication)Kafka Replication은 Kafka에서 데이터의 고가용성을 보장하기 위한 방법으로 각 토픽의 파티션(Partition)을 복제를 통해 클러스터 내의 여러 브로커에 중복 저장하는 것이다.토픽(Topic)메시지를 구분하는 단위로 프로듀서.. 2024. 9. 18.
[JPA] Persist와 Merge Spring Boot Data JPA에서 persist와 merge는 둘 다 엔티티 객체를 데이터베이스에 저장하거나 갱신하는 데 사용 되는 메서드 입니다.save 메서드를 실행하게 되면 Spring Boot Data JPA의 JpaRepository 인터페이스의 기본 구현체인 SimpleJpaRepository에서 신규 Entity 여부 확인 후 persist혹은 merge을 실행합니다.persist는 새로운 엔티티를 영속화 할 때 사용하며 EntityManager의 영속성 컨텍스트에 추가합니다.merge는 기존의 엔티티를 업데이트 하거나 데이터베이스에 없는 엔티티를 저장할 때 사용합니다. 만약 엔티티가 영속성 컨텍스트에 없으면 새로운 영속 상태를 생성하고, 존재하면 기존 엔티티를 갱신합니다.Simple.. 2024. 9. 3.
[JPA] 영속성 컨텍스트 영속성 컨텍스트란 엔티티를 영구 저장하는 환경으로 엔티티 객체들을 관리하는 일종의 메모리상의 공간을 의미한다. 영속성 컨텍스트는 데이터베이스와 자바 애플리케이션 사이에서 객체의 상태를 관리하고 동기화하는 역할을 한다.엔티티 생명주기비영속(new/transient) : 영속성 컨텍스트와 전혀 관계 없는 새로운 상태영속(managed) : 영속성 컨텍스트에 관리하는 상태준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태삭제(removed) : 삭제된 상테//영속성 컨텍스트 실습//비영속성Member member = new Member();member.setId((100L));member.setName("HelloJPA");//영속em.persist(member);//회원 엔티티를 영속성 .. 2024. 9. 1.