본문 바로가기
728x90

츄Log/끄적끄적25

Hadoop 에코시스템 먹방 -3. MapReduce MapReduce?> 하둡에서 사용되는 분산 컴퓨팅 프레임워크> 입력 데이터를 정해진 크기로 나누어 여러 개의 작업을 생성하고 병렬로 수행함> 일부 작업이 실패하더라도 자동으로 다시 수행함> 그러므로 입력 데이터의 크기와 상관 없이 동일한 코드로 작업 가능함 MapReduce 작업 구조Map> 입력을 정해진 크기로 나눈 후 사용자가 정의한 함수를 실행함> 입력 데이터를 정렬하거나 분류함> key-value 형태의 데이터가 생성됨> Map 작업의 결과물은 작업이 수행된 장비의 로컬 디스크에 저장됨Reduce> Map의 결과를 최종적으로 병합하여, 사용자가 정의한 함수를 실행시킴> 결과를 로컬이 아닌 분산디비인 HDFS에 저장함Shuffle & Sort> Map작업의 결과를 Reduce작업으로 넘겨주기 전에.. 2024. 6. 11.
Hadoop 에코시스템 먹방 -2. HDFS HDFS> 하둡 클러스터의 데이터 저장소 역할을 하는 분산 파일 시스템임> 일반적인 상용 하드웨어로 클러스터 구성이 가능하며 대용량 파일을 다룰 수 있도록 설계됨> 내결함성과 확장성이 뛰어남HDFS 전제와 목표Hardware Failure> 상용 하드웨어를 사용할 수 있도록 설계됨사용 하드웨어는 쉽게 고장날 수 있기에 HDFS는 서버 장애가 발생하더라도 작업에 영향이 가지 않도록 데이터를 복제하여 저장하고빠르게 장애를 탐지하여 복구하는 것을 목표로함Large Data Sets> 파일을 블록 단위로 저장하여 단일 디스크의 크기보다 큰 파일을 저장할 수 있음Simple Coherency Model> 쓰기 연산보다 읽기 연산이 많다는 것을 전제로 함> HDFS에 저장된 것은 수정이 불가하여 데이터 일관성 문제.. 2024. 6. 11.
Hadoop 에코시스템 먹방 -1. Hadoop 개요 데이터에 대해 아무것도 모르는데 데이터 분석 요청 업무가 들어왔습니다. 주변에 자문을 구하더라도 개요에 대해서는 알아야 하므로 Hadoop 에코시스템에 대해 알아보았습니다. 시작~ Hadoop 등장배경> 데이터 급증 & 큰 데이터를 효과적으로 병렬처리하는 구조를 가진 프레임워크가 필요했음특징> 각 데이터에 대해 복제본을 생성한 후 안전하게 보관함 => HDFS> 큰 데이터를 나눠서 작업한 후 그 결과물을 합쳐줌 => MapReduce> 클러스터가 scalable해서 컴퓨터를 추가하거나 제거하여 자원을 유연하게 조절할 수 있음HDFS (Hadoop Distributed File System)> 하둡 클러스터에서 사용되는 저장소> 여러 서비스들이 이 저장소를 통해 파일을 공유할 수 있음> 일부 서버가 문제가.. 2024. 6. 11.
CompletableFuture runAsync/supplyAsync/get runAsync, supplyAsync, get 코드리딩 CompletableFuture는 exceptionally로 예외를 핸들링 할 수 있고 그렇지 않으면 get()을 통해 캐치할 수 있음을 외워도 되지만, 급할 때는 코드를 읽어봐도 됩니다! runAsync, supplyAsync get 2024. 3. 2.
CompletableFuture 코드 리뷰 기록 안녕하세요! 얼마 전에 저희 팀 성실천재쥬니어님의 PR에 코드 리뷰를 진행하였습니다. 하나의 서비스 흐름에서 모든 인터페이스의 리턴 타입이 CompletableFuture였습니다. 먼저 비즈니스를 살펴보고 코드를 읽다보니 Fire and Forget 패턴을 CompletableFuture + AsyncHttpClient를 통해 구현하신 것 같았습니다. (정확한 사유는 아직 여쭤보지 않아서 모릅니다. 그냥 코드 보고 추측했습니다.) 충분히 사용할 수 있는 기술들이지만 해당 PR에서는 몇가지 크리티컬한 문제가 있었고, 현재 구조에서는 불필요한 것 뿐만 아니라 코드의 복잡성을 올린다고 판단하여 CompletableFuture를 모두 걷어내고 AsyncHttpClient도 SyncHttpClient으로 변경하길.. 2024. 2. 10.
샤딩, 분산 데이터 스토리지에 대하여 데이터가 많아져 애플리케이션 속도에 영향을 끼치기 시작하면 샤딩을 고민합니다. 또는 데이터가 없더라도 분산 데이터 스토리지를 선택하곤 합니다. 하지만 수십억 개의 데이터가 있는 테이블이 있고, 이 테이블을 사용하는 유즈케이스가 단일 머신에 적합하다면 샤딩해야할 필요가 없습니다. 왜냐하면 샤딩은 무한한 확장이라는 장점이 있긴 하지만 운영 복잡성이 올라가고, 애플리케이션의 책임이 늘어나는 등 꽤 비싼 비용이 들기 때문입니다. 샤딩을 선택하기 전에 다음과 같은 해결책을 고민해봐야 합니다. 1. Scale Up 수직적 확장이라고 표현하는 스케일업은 머신의 리소스 자체를 업그레이드 하는 것입니다. 언젠가 하드웨어의 업그레이드 또한 한계에 도달할 수 있으나 그때까지는 애플리케이션과 데이터베이스의 아키텍처를 재설계 .. 2024. 1. 5.
SpringBoot의 Configuration(proxyBeanMethods) 스프링부트 @Configuration어노테이션에 proxyBeanMethods를 true/false로 on/off 할 수 있습니다. default는 true로 proxy객체를 생성합니다. false로 설정하고 Bean생성 팩토리 메소드를 호출했을 때 proxy객체 생성이 되지 않고 자바 팩토리 메소드를 사용하는 방식처럼 그대로 다른 객체가 만들어집니다. (즉 매번 같은 객체가 반환되는 것이 아니라, 새로운 객체가 만들어집니다) 이 부분은 좀 시간을 내서 살펴봐야 할 것 같습니다. 2024. 1. 4.
Nested Class 종류와 Nested Static Class 사용에 대한 고찰 안녕하세요. Java에서는 Class안에 있는 Class를 Nested Class(중첩클래스)라고 부릅니다. 그리고 이 중첩 클래스는 두 개로 나뉘어 집니다. static class inner class 두 개로 나뉘어지는 이 클래스들은 매우 다른 의미를 가지게 됩니다. 이 중에서 static class에 대해 저의 생각을 한 번 작성해보려고 합니다. 먼저 두 클래스의 차이를 간략하게 알아보겠습니다. nested static class는 outer class 안에 있긴 하지만, 독립적인 존재입니다. nested static class의 경우 그냥 클래스를 파일로 빼도 상관 없습니다. 그러므로 하나의 클래스 안에 있을 뿐이지 outer class의 프로퍼티를 nested static class에서 직접적으.. 2024. 1. 4.
NoSQL에서 다대일 관계, Join에 대한 지원이 약한 이유 중복된 데이터를 정규화하려면 다대일(many-to-one)관계가 필요합니다. 관계형 데이터베이스에서는 조인이 쉽기 때문에 ID로 다른 테이블의 로우를 참조하는 방식은 일반적이지만, 보통 문서 데이터베이스에서는 조인에 대한 지원이 약합니다. 그러므로 다대일 관계는 안타깝게도 문서 모델에 적합하지 않습니다. NoSQL에서 Join에 대한 지원이 약한 이유는 다음과 같습니다. 1. Schema Flexibility NoSQL 데이터베이스에서는 각 레코드(MongoDB의 경우 문서)가 레코드마다 다를 수 있는 자체 구조를 가질 수 있습니다. 이러한 유연성으로 인해 서로 다른 스키마를 가진 여러 테이블의 데이터를 결합해야 하는 기존 SQL 스타일 조인을 수행하기가 어렵습니다. 2. Distributed Archi.. 2024. 1. 3.
SDKMAN 꽤 괜찮은 툴을 발견했습니다. SDKMAN 이라는 툴인데요. 각종 유틸기능을 제공합니다. 1. sdk list java : java의 sdk 즉 jdk 구현체들 종류와 버전을 볼 수 있습니다. 2. sdk install java 11.0.21-amzn : list로 본 것 중 하나를 골라 설치합니다. 3. sdk use java 17.0.5-amzn : 특정 터미널 세션에서 java 버전을 변경합니다. 일시적 변경이므로 해당 세션이 종료되면 default 설정으로 돌아갑니다. 2024. 1. 2.
JVM runtime data area, GC 포인트 JVM 구조와 GC에 대해 다시 공부했습니다. 가끔 생각날 때마다 보긴 하는데 장기기억으로는 가지 않아서 이번에도 마치 처음 보는 녀석 같았습니다ㅎㅎ 이번에 배운 포인트 몇 가지만 정리해보려고 합니다. JVM의 runtime data area 관련 1. Metaspace영역은 java heap이 아닌 native 메모리 영역을 사용합니다. 리플렉션 클래스를 로드시 사용하므로, Spring을 사용하여 개발하는 사람들은 이 부분을 기억해둬야할 것 같습니다. (java heap이 아닌 native memory영역을 사용하므로 메모리 관리에 실패할 경우 OS수준까지 문제가 전파되기 때문입니다.) 2. Native Memory 영역이 있습니다. 여기에는 위에 이야기한 Metaspace, C heap, Thread.. 2023. 12. 31.
Spring Batch job_parameter 유무에 따른 예외 처리 차이 스프링 배치를 공부중입니다. 이런저런 테스트를 해보다가 다음과 같은 상황을 맞이했습니다. completed된 동일한 job instance를 재실행 하는 경우, 1. job parameter가 있는 경우에는 JobExecution을 만드는 과정에서 JobInstanceAlreadyCompleteException 발생합니다. 2. job parameter가 없는 경우에는 위 코드 조건문에 맞지 않아서 JobExecution이 생깁니다. Step Handler에서 Step이 모두 Completed상태이므로 Step already complete or not restartable, so no action to execute: StepExecution~ 로그가 찍힙니다. 생성된 JobExecution의 STAT.. 2023. 12. 29.
728x90