colevelup의 등록된 링크

 colevelup로 등록된 티스토리 포스트 수는 52건입니다.

[Gradle] Jib Build 에 대해서 알아보자 [내부링크]

Gradle Jib Build를 활용한 Image Build를 Jenkins를 활용해서 사용하고 있다. Jib을 활용한 Image Build가 갖는 장점과 속도점 이점에 대해서 한번도 확인해 본 적이 없어서 이번 기회해 한번 정리하면서 확인해 보았다. Jib 이란? Jib은 Docker 데몬 없이 Java 애플리케이션을 컨테이너화하여 Docker Hub, Google Container Registry 등 원하는 레지스트리로 직접 푸시할 수 있는 Gradle 및 Maven 플러그인. 애플리케이션을 빌드함과 동시에 컨테이너 이미지를 생성하고 푸시까지 할 수 있게 하여, 빌드와 Dockerfile 작성 과정을 단일화하는 파이프라인을 제공. 간략하게 미리 보는 Jib 의 주요 장점 1. 간편함(Simple an..

[회고] 늦었어도 돌아보자! 2023 회고 [내부링크]

2023년 12월 꽉 찬 3년 차 개발자 그리고 2024년 이제 4년 차 개발자가 돼버린 지금 작년을 돌아보지 않고 올해를 맞이할 수는 없다. 2023년 나는 무었을 했고 어떤 것을 느꼈으며 나는 앞으로 무엇을 하고 싶은지 알아보자. (남들이 다하는 2023 회고 나도 한다!) 개발자로서 2023년 한 해 한 일 2023년 개발자로서 한 일은 세 가지로 정리가 가능할 것 같다. 1. MSA 제품을 Monolithic으로 전환하기 2. Monolithic 제품 내에 있던 MSA 화된 DB 구조를 Monolithic 하게 변환하기 3. 이직(참고로 필자는 보라색을 좋아한다) MSA 제품을 Monolithic으로 전환하기. 이전 회사의 솔루션은 MSA 환경을 가정하고 확장을 고려해서 만든 솔루션이 었다. 문제..

[Cipher] AES(Advanced Encryption Standard), Block Cipher Mode [내부링크]

평소에 AES128, AES192, AES256을 구별해서 사용하지 않고 Java Private Key를 활용해서 자주 암호화 로직에 사용하고 있었다. AES에서 ECB를 사용하는 것은 권장되지 않고 initialization vector 즉 IV를 활용한 CBC를 활용해야 한다 정도만 알고 있었고 보통 CBC Mode에서 AES를 활용해 왔던 것 같다. 하지만 Block Cipher 모드가 많고 각각 모드별로 취약점과 장단점이 존재하기 때문에 정리를 하게 되었고 그 과정에서 고려사항들을 다시 한번 잘 확인하는 계기가 된 것 같다. AES 란? AES (Advanced Encryption Standard)는 대칭 키 암호화 알고리즘으로, 데이터를 안전하게 암호화하고 복호화하는 데 사용됨. AES는 ISO..

[책 리뷰] 육각형 개발자 리뷰 [내부링크]

최근 트위터에서 많은 개발자 분들이 보시기도 하고 리디 북스 내에서 책 순위도 높았던 육각형 개발자라는 책을 보게 되었다. 해당 책을 보면서 느꼈던 점들에 대해서 리뷰 글로 남겨보려고 한다. 10가지 역량 시니어 개발자로 성장하기 위한 10가지 핵심 역량 위 책은 훌륭한 시니어가 되기 위해서 10가지 핵심 역량을 갖춰야 한다는 것으로 시작한다. 그중에서 공감이 됐고 좋았던 챕터들만 간단 요약하며 해당 책에 대한 마지막 리뷰 문장을 작성하면서 끝맺음하려고 한다. 유지 비용 낮추기 결국 개발자라면 유지보수를 피해 갈 수는 없다. 유지보수 비용이 아에 발생하지 않을 수는 없으며 해당 비용을 최대한 줄이는 방식으로 개발을 진행해야 한다. 결국 유지보수 비용이 적게 들려면 코어는 두가지라고 생각한다. 1. 변경으..

[Minikube] Minikube Stop And Start 시 helm 배포 Pod 유지 않되는 현상 [내부링크]

Minikube 재시작 시 자원 삭제 문제가 있었고 그에 따른 해결 방법을 혹시나 같은 이슈로 방안을 못 찾는 분들을 위해서 글을 짤막하게나마 남겨두려고 합니다. 상황 M1 Mac 환경에서 Minikube와 helm 을 이용해서 개인 프로젝트 용으로 postgresql, mongodb, redis를 배포하여 Local Cluster를 구축하고 있었습니다. k9s를 통해서 보면 위와 같이 정상 배포된 것들을 확인할 수 있습니다. 문제점 helm 차트도 잘 관리되고 배포도 잘되고 실제로 떠있는것도 잘 떠있는데 문제는 Minikube Stop 후 Start를 하면 Pod들이 유지가 되지를 않았습니다. Minikube를 Stop 하고 Start 만 하면 K9s에서 helm 으로 배포된 Pod들을 확인할 수가 없..

[Java] Jstack 을 활용한 스레드(Thread) 덤프, 리소스 모니터링 [내부링크]

Spring boot 기반 프로젝트 내에서 Java Thread를 활용한 로직을 활용 도중 특정 스레드 에서의 병목현상이 발생하였고 해당 병목 현상을 해결하는 과정에서의 스레드 덤프를 활용하였고 많은 도움이 되었습니다. 스레드 덤프를 뜨기 위한 Jstack에 대한 기본 사용법과 활용법을 공유하고자 합니다. Jstack?? Jstack이란 JDK와 함께 제공되는 유틸리티로 Java Thread Dump를 생성하는 데 사용됩니다. Windows와 Linux에서 jstack.exe로 Thread Dump 생성하기 ${jdk설치경로}\bin target 경로에서 jstack.exe를 활용해서 전체 Thread Dump를 추출합니다. 사전 시나리오 EndPoint @RestController public clas..

[Java] ImmutableList vs Collections.unmodifiableList 무엇이 다를까? [내부링크]

Java로 개발을 하다 보면 Immutable 한 Collection을 다뤄야 하는 상황이 종종 발생한다. 그렇다면 Google Guava의 ImmutableList와 java.util.Collections의 unmodifiableList()를 각각 비교하며 각각 사용 시나리오와 장단점에 대해서 알아보자. 1. 각각의 자료구조를 사용하는 차이점 ImmutableList Guava 라이브러리의 일부로 제공되며, 불변 리스트를 생성하고자 할 때 사용합니다. ImmutableList 객체는 생성 시점부터 불변이며, 원본 리스트로부터 변경되지 않습니다. ImmutableList는 다양한 정적 팩토리 메서드를 제공하여 객체 생성을 용이하게 합니다. (of(), copyOf() 등) @Test(expected = ..

[PostgreSQL] PostgreSQL 데이터 추출 - CSV, JSON 및 스키마 덤프 뜨는법. [내부링크]

PostgreSQL를 사용하다 보면 데이터를 특정 형식에 맞춰서 파일로 추출해야 하는 경우가 생기기도 하고, 데이터 덤프가 아닌 스키마를 덤프 떠야 하는 상황도 생깁니다. PostgreSQL 데이터베이스에서 테이블 데이터를 CSV와 JSON 형식으로 추출하고, 테이블 스키마를 덤프 하는 방법을 알아보도록 하겠습니다. 테이블 데이터를 CSV 형식으로 추출하기 PostgreSQL에서 테이블 데이터를 CSV 형식으로 추출하려면 COPY 명령어를 사용할 수 있습니다. 예를 들어, 테이블 이름이 your_table이고, 조건, 정렬 값, 파일 경로를 지정하여 데이터를 추출하려면 다음과 같이 작성합니다. COPY (select * from your_table where your_condition = your_con..

[MongoDB] MongoDB란? 특징과 장단점을 예제로 확인해보자. [내부링크]

몽고디비는 대용량 데이터를 처리할 때 우수한 성능을 발휘하는 NoSQL 데이터베이스입니다. 그러나 트랜잭션 처리의 엄격성이 상대적으로 떨어지며, 네이티브 조인을 지원하지 않는 등 모든 용도에 적합하지 않을 수 있습니다. 이 글에서는 몽고디비의 장단점과 함께 자세한 예시로 확인해보도록 하겠습니다. MongoDB MongoDB는 고성능, 고가용성 및 쉬운 확장성을 제공하는 NoSQL, Document 지향 데이터베이스입니다. 데이터를 배열 및 중첩 Document와 같은 복잡한 데이터 유형을 효율적으로 저장할 수 있는 유연한 JSON과 유사한 형식인 BSON(Binary JSON)으로 저장합니다. Database, Collection 및 Document Document MongoDB에서의 기본 데이터 단위로..

[JPA] JPA 상속 관계 매핑 전략 : 조인, 단일 테이블, 구현 클래스별 테이블 비교 및 주요 어노테이션 사용법 [내부링크]

JPA 상속 관계 매핑 전략과 주요 어노테이션에 대해 알아보고, 조인 전략, 단일 테이블 전략, 구현 클래스별 테이블 전략을 비교하여 각각의 장단점을 설명확인해 보도록 합니다. 더 자세한 정보는 https://www.inflearn.com/course/ORM-JPA-Basic 김영한님 강의나 http://www.yes24.com/Product/Goods/19040233 책을 확인하시는 것이 좋습니다. 상속 관계 매핑 관계형 데이터베이스는 상속 관계가 없다. 관계형 디비 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 왼쪽 논리모델 공통적인 속성 공통적인 데이터는 물품으로 두고 각각 음반 영화 책으로 서브타입으로 두는 ..

[Docker] Docker Image와 Image 생성하기, Tag 붙이기, 점진적 빌드하기 [내부링크]

Docker Image는 코드, 런타임, 시스템 도구, 라이브러리, 설정 등 소프트웨어를 실행하는 데 필요한 모든 것을 포함하는 경량의 독립 실행형 소프트웨어 패키지입니다. Docker 이미지를 효율적으로 생성하고 관리하는 방법을 알아봅니다. Base Image, Layers, Dependencies, Hexadecimal IDs, Dockerfile 작성법과 Image 관리등을 살펴봅시다!!. Docker Image Base Image Base Image는 Docker 이미지를 만들기 위한 시작점입니다. Base Image는 특정 소프트웨어 패키지가 설치된 최소한의 pre-configured os입니다. Base Image는 소프트웨어 공급업체에서 제공하는 official 이미지 또는 커뮤니티에서 유지..

[PostgreSQL] PostgreSQL로 보는 Database 실행 계획 & Explain Option [내부링크]

데이터베이스 실행 계획(Database Execution Plan) 또는 쿼리 실행 계획(Query Execution Plan)은 가능한 가장 효율적인 방법으로 데이터를 검색하거나 조작하기 위해 database management system's (DBMS) query optimizer에서 생성하는 일련의 단계입니다. 데이터베이스 실행 계획과 Explain 명령어에 대해서 알아보도록 하겠습니다. PostgreSQL 데이터베이스 실행 계획 PostgreSQL의 맥락에서 실행 계획은 쿼리 처리 파이프라인의 중요한 구성 요소로, 시스템이 쿼리를 빠르고 효율적으로 수행할 수 있도록 도와줍니다. PostgreSQL 쿼리 실행 프로세스는 여러 단계로 구성됩니다. PostgreSQL Query Process Pipe..

[Spring] SpringWebFlux에서의 효과적 Error처리와 백프레셔(BackPressure) [내부링크]

Reactive Programming에서 백프레셔(Backpressure) 처리 전략을 이해하고, Spring WebFlux를 활용하여 구현하는 방법을 알아보도록 합니다. Project Reactor의 예제 코드를 활용하여 Publisher 와 Consumer 측에서의 백프레셔(Backpressure) 전략을 확인해 봅니다. traditional try-catch traditional 한 명령형 프로그래밍에서 오류 처리는 일반적으로 try-catch 블록을 통해 처리됩니다. try { // 예외를 발생시킬 수 있는 작업 수행 int result = performOperation(); System.out.println("Result: " + result); } catch (ArithmeticExceptio..

[Spring] Tomcat VS Netty Connector - NIO(non-blocking I/O) or BIO(Blocking I/O) [내부링크]

Tomcat과 Netty의 차이점을 클라이언트의 요청과 응답을 처리하는 Server Connect의 측면에서 우선 적으로 살펴보도록 하겠습니다. BIO (Blocking I/O) 및 NIO (Non-blocking I/O) 커넥터의 작동 원리에 대해서 알아보겠습니다. Connector Spring에서 커넥터는 클라이언트 요청을 수신 및 처리하고, 추가 처리를 위해 애플리케이션으로 전달하고, 응답을 클라이언트로 다시 보내는 역할을 하는 필수 구성 요소입니다. 커넥터의 주요 역할 1. 연결을 설정하고 관리하여 클라이언트와 서버 간의 통신을 활성화합니다. 2. 클라이언트 요청을 애플리케이션이 처리할 수 있는 형식으로 변환하고, 응답의 경우 그 반대로 변환합니다. 3. 동시 클라이언트 요청을 효율적으로 처리하기..

[Spring] Project Reactor EventLoop와 Flux와 Mono. [내부링크]

Project Reactor는 JVM(Java Virtual Machine)에서 비동기 및 반응형 애플리케이션을 구축하기 위해 Reactive Streams를 활용하는 라이브러리입니다. 주요 publisher인 Mono와 Flux와 함께 다양한 연산자들을 제공하여 개발자들이 비동기 이벤트 시퀀스를 효율적으로 처리할 수 있도록 지원합니다. 이러한 기능 덕분에 Reactor는 Spring WebFlux와 같은 반응형 라이브러리 및 프레임워크의 기반으로 널리 사용되고 있습니다. Reactive Programing과 Reactive Stream에 대해서는 이전 포스팅을 참조해 주시면 감사하겠습니다. [Spring] Reactive Programming 개요 [Spring] Reactive Programming ..

[Spring] Reactive Programming 개요 [내부링크]

Spring Webflux를 학습하기 이전에 Reactive Programming에 대해서 명령형 프로그래맹, 선언적 프로그래밍 그리고 Data Stream 과 주요 특징들, Reactive Stream 과 주요 요소들에 대해서 자세하게 알아보도록 하겠습니다. 서론 사실 Reactive Programming을 spring에 작성해야 할까 고민을 좀 했다. Rxjava도 있고 Rxjs도 있는 만큼 Reactive X를 활용하는 곳에 사용해도 되기 때문이다. WebFlux에 대한 포스팅을 하기전 Programming 패러다임부터 하나하나 전부 작성할 것 이기 때문에 Spring 카테고리에 작성하도록 하겠습니다. Reactive Programing ? In computing, reactive programm..

GPT-4 의 등장 [내부링크]

GPT-4 가 드디어 발표 되었습니다!! GPT-4에 대해서 Open-ai에서 제공한 정보들을 바탕으로 GPT-4에서는 어떤것이 추가되었고 GPT-4의 성능 벤치마크 점수는 어떤지 GPT-4를 활용한 서비스는 무엇이 있고 GPT-4를 사용하려면 어떻게 해야 하는지 자세하게 살펴보도록 하겠습니다. GPT-4 란? GPT Model 들의 진화와 Key Feature들 GPT-4에 대해 자세히 알아보기 전에 이전 GPT 모델에 대한 몇 가지 배경 지식을 알아볼 필요가 있습니다. OpenAI의 Generative Pre-trained Transformer(GPT) 모델은 지난 몇 년 동안 급속도로 발전해 왔습니다. what is gpt? OpenAI의 GPT(Generative Pre-trained Transf..

[Spring] @Transactional 어노테이션 이해하기(2) 롤백(rollback) 규칙, 시간 제한(Timeout), readOnly Flag [내부링크]

Spring Boot @Transactional 어노테이션을 이해하기 위해 @Transactional 어노테이션이 무엇이며 제공하는 설정은 무엇인지 알아보겠습니다. 1편에 이어서 2편에서는 @Transactional 어노테이션이 제공해 주는 트랜잭션 롤백(Transaction Rollback) 규칙과 , 시간제한(Transaction Timeout), readOnly Flag와 JPA에서의 ReadOnly Flag에 특징들에 대해서 이어서 살펴보도록 하겠습니다. 1편을 아직 못 보신 분들은 아래 링크를 참조해주시면 감사합니다. https://colevelup.tistory.com/34 [Spring boot] @Transactional 어노테이션 이해하기(1) 전파유형(Propagation) 과 격리수준..

[Spring] @Transactional 어노테이션 이해하기(1) 전파유형(Propagation) 과 격리수준(Isolation) [내부링크]

Spring Boot @Transactional 어노테이션을 이해하기 위해 @Transactional 어노테이션이 무엇이며 제공하는 설정은 무엇인지 알아보겠습니다. 1편에서는 @Transactional 어노테이션이 제공하는 트랜잭션 전파(Transaction Propagation) 및 격리(Transaction Isolation)에 대해서 어떻게 적용되며 어떻게 선언하는지 등 우선적으로 자세하게 알아보도록 하겠습니다. 트랜잭션(Transacntion)과 ACID 들어가기 앞서 데이터베이스 트랜잭션은 단일 작업 단위로 실행되는 하나 이상의 데이터베이스 작업 시퀀스입니다. 트랜잭션은 ACID 원칙을 적용하여 데이터 일관성과 무결성을 보장합니다. ACID는 원자성, 일관성, 격리성, 내구성을 의미합니다. 원자..

[Java] ExecutorService, ScheduledExecutorService, and Future [내부링크]

Java에서 ExecutorService는 스레드를 사용하여 작업을 비동기적으로 실행하는 방법을 제공합니다. ExecutorService를 상속하는 ScheduledExecutorService는 지정된 시간, 고정된 속도 또는 고정된 지연으로 실행되도록 작업을 예약하는 메서드를 제공합니다. Future는 비동기 작업의 결과를 나타내며 작업의 상태를 확인하거나 필요한 경우 취소할 수 있습니다. 요 세 녀석을 자세하게 살펴보도록 하겠습니다. ExecutorService Java에서 스레드는 운영 체제의 리소스인 시스템 수준 스레드에 매핑됩니다. 스레드를 제어할 수 없을 정도로 많이 생성하면 이러한 리소스가 빠르게 부족해질 수 있습니다. Java에서는 Executor framework가 thread pool을..

[회고] 한 달간의 TIL(Today I Learnd) 회고 [내부링크]

TIL(Today I Learnd) 첫 회고, 블로그와 git을 통해서 개발자들이 하루하루 배운것을 기록하고 올리는 TIL(Today I Learnd)것이 있다는것을 알고 잇었지만 실천할 생각이 없었다. 하지만 2월 5일 첫 커밋을 시작으로 한 달간 평일 20일 동안의 20개의 학습한 것을 올리는 것을 목표로 크고 작은 학습한 것들을 git repository에 올리는 TIL(Today I learnd)을 시작해보았다. 한 달 하고 무슨 회고냐! 라고 할 수도 있지만.. 한 달이 반년이 되고 반년이 일 년이 되기 때문에 우선 첫 한 달 정도 TIL을 지속한 회고 및 후기를 남겨보려고 한다. https://github.com/christopher3810/TIL GitHub - christopher3810/..

[Java] Thread 라이프 사이클과 스레드 우선순위로 보는 데몬스레드와 비데몬 스레드 [내부링크]

Java Thread(스레드) 라이프사이클(life cycle)을 간단하게 확인하고, Thread(스레드) 우선순위로 데몬스레드(Demon Thread)와 비데몬 스레드(non demon thread or user thread)에 대해서 알아보는 시간을 갖도록 하겠습니다. Concurrent Programming Concurrent Programming은 여러 작업이 동시에 실행되는 환경에서 프로그램이 제대로 동작하도록 하는 프로그래밍 기법입니다. 이러한 환경에서는 다른 작업들과 자원들과의 경합이 발생할 수 있으며, 이를 해결하기 위해 스레드 동기화와 같은 기술이 사용됩니다. Thread Java에서 프로세스는 컴퓨터 시스템에서 실행되는 프로그램의 인스턴스입니다. 각 프로세스에는 고유한 메모리 공간, 시..

[Docker] 그래서 도커(Docker)랑 컨테이너(Container)가 뭐냐구요 [내부링크]

도커(Docker), 컨테이너(Container)는 무엇일까요? 도커(Docker) 등장 배경과 컨테이너(Container) 환경의 발달 과정 그리고 기존 가상화 방식과 컨테이너(Container) 기반 가상화 방식의 차이점과 운영방식등을 알아보도록 하겠습니다. Docker의 배경 Docker는 2013년에 dotCloud의 Solomon Hykes와 그의 팀에 의해 그의 팀에 의해 2013년 PyCon에서 (The future of Linux Containers) 처음 데모 되었습니다. 출시 전 오클랜드 항구에 들어오는 모든 컨테이너 선박을 볼 수 있었고 “한 서버에서 다른 서버로 앱을 옮기는 것보다 지구 반대편에서 자동차를 배송하는 것이 더 쉽다” 는 사실이 해결해야 할 문제처럼 보였다고 합니다. 이..

[Git]Merge vs Rebase Rebase를 중점으로 봐보자 [내부링크]

git base ci/cd tool 들은 커밋 또는 브랜치의 변경 사항을 다른 브랜치나 커밋에 반영할 수 있도록 지원하는데 이를 보통 Merge와 Rebase라고 한다. 여기서 한가지 의문점이 생길 수 있는데 왜 굳이 Merge와 Rebase 2개의 방법을 제공하는 걸까? Merge와 Rebase를 Rebase를 중점으로 알아보도록 하자. 하지만 짤은 Conflict 나는 개판 Merge 짤이다 Merge 전제 main 브랜치로 부터 Feature 브랜치를 따고 3가지 커밋이 이루어져 있다 main 브랜치는 Feature 브랜치가 따진 이후 2번의 커밋이 이루어져 있는 상황이다. git checkout feature git merge maian //or git merge feature..

[Java] Java14 레코드(Record)를 알아보자 [내부링크]

Java 8 , 11 버전만 사용하다 보니 이후 버전에 추가된 것들에 대해서 학습을 하려고 합니다. Java 14에서 추가된 레코드(Record)에 대해서 레코드의 목적, 자동생성 항목 등 레코드의 기본 사항에 대해 살펴보고 제약사항은 또 어떤 부분이 있는지 알아보도록 하겠습니다. baeldung에 상당 부분 잘 정리가 되어있기 때문에 해당글을 대부분 참조하였으며 추가적인 정보를 더해 글을 작성했습니다. 객체 간에 변경 불가능한 데이터를 전달 시 Java 14 이전에는 boilerplate field와 메서드가 포함된 클래스를 생성해야 했기 때문에 사소한 실수가 발생하거나, 의도가 혼동되기 쉬웠습니다. Java 14가 출시되면서 이제 레코드를 사용하여 이러한 문제를 해결할 수 있습니다. 레코드는 Java..

[Elastic Search] 엘라스틱 서치(Elastic Search)와 Node 종류, Replica, Segment [내부링크]

엘라스틱 서치(Elastic Search)가 무엇인지, 엘라스틱 클러스터(Elastic Cluster)에서 제공하는 엘라스틱 노드(Elastic Node)들의 종류, 엘라스틱 서치 레플리카(ElasticSearch Replica), 세그먼트(Segment), 그리고 node 간 발생할 수 있는 SplitBranProblem에 대해서까지 확인해 보도록 하겠습니다. 엘라스틱 서치(Elastic Search)? Elastic Search는 기본적으로 데이터 저장소 입니다. 엘라스틱 서치(Elastic Search) 특징 NoSQL JSON 기반 저장소. Cluster 구성. Schemaless 구조이다. Rest API 기반 쉬운 인터페이스를 제공 Cluster ElasticSearch도 Cluster와 No..

SSL, TLS, SSL Certification(SSL 인증서), Cipher suite, HTTPS, SSL/TLS HandShake 이게 다 뭐람? [내부링크]

SSL/TLS 와 SSL Certification(SSL인증서), Cipher suite에 대해서 자세히 알아보고, 이들을 활용하여 HTTPS에서 SSL/TLS HandShake를 통한 SSL인증 과정이 어떻게 거쳐지는지 확인해보도록 하겠습니다. 안정적인 네트워크 서비스를 제공하는데 도움을 줄 것입니다 SSL(secure sockets layer) SSL은 넷스케이프에 의해 작성된 프로토콜입니다. SSL은 Netscape사에서 만든 계층, 프로토콜로 웹서버와 브라우저 사이의 보안을 담당하는 역할을 맡고 있습니다. 그리고 Certificate Authority(CA)라고 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용됩니다.. 이후 IETF(Internet Engineering Task Fo..

[JPA] 엔티티(Entity)매핑(객체-테이블, 필드-컬럼) [내부링크]

엔티티(Entity) 객체와 데이터 베이스 테이블 간 매핑, 엔티티(Entity) 필드와 컬럼간 매핑에서 사용하는 속성값들과 활용법들에 대해서 알아보도록 하겠습니다. 해당 글은 김영한님 ORM 책과 강의를 참고하여 정리하고 몇몇 내용을 추가하여 만들었습니다. 객체와 테이블 매핑 @Entity @Entity 가 붙은 클래스는 JPA 가 관리, 엔티티라고 하며 EntityClass를 DataBase Table과 Mapping 해줍니다. 주의할 점 기본 생성자 필수(파라미터 없는 public or protected) final 클래스, enum, interface, inner 클래스 사용 금지 저장할 필드에 final 필드 사용 x c왜? 기본 생성자가 필요할까? hibernatesStartGuid 를 보면..

[Kafka] 카프카(kafka) 프로듀서(Producer)의 파티셔너 (Partitionor), 배치(Batch) 그리고 메시지 전송 방식 [내부링크]

카프카(kafka)에서 프로듀서(Producer)의 기본 역할은 메시지들을 Kafka Topic으로 전송하는 것입니다. 메시지 전송 방식에는 적어도 한번 전송(at-least-once), 최대 한 번 전송(at-most-once), 정확히 한번 전송(exactly-once)이 있으며 전송방식들의 차이들을 확인해 보도록 하겠습니다. Producer가 전송하려는 메시지들은 Producer의 send() 메서드를 통해 시리얼라이저, 파티셔너를 거쳐 kafka로 전송됩니다. 마지막에 실습이 있는데 실습 환경을 미구성하셨다면 이전 포스팅을 참조해 주시면 감사합니다. https://colevelup.tistory.com/17 [Kafka] kafka cluster 실습 환경 구축 kafka 관련 포스팅을 하기 이전..

[Kafka] Kafka와 zero-copy [내부링크]

이전 카프카 도입 사례에서 Twitter가 내부에서 활용하는 In-House-Event-Bus에서 kafka로 전환하계 되는 이유들 중 하나가 kafka가 zero-copy를 제공한다라는 말이 있었습니다. zero-copy에 대해서 자세하게 알아보도록 하겠습니다. https://colevelup.tistory.com/16 [Kafka] Kafka 도입 사례로 보는 Kafka 사용의 당위성과 이점 사내에서 실전 카프카 개발부터 운영까지 라는 책을 선정하여 스터디를 진행하고 있습니다. 책 첫 장에서 카프카 적용 사례(kafka use case)로 트위터와 잘란도 등을 통해서 Apache 카프카를 쓰는 이 colevelup.tistory.com Twitter의 In-House-Event-Bus 이전 Twtit..

[JPA] 엔티티(Entity) 생명주기, 1차캐시, 변경 감지(Dirty-Checking) [내부링크]

JPA에서 엔티티(Entity)의 생명주기와 , 1차 캐시(First-Level-Cache)와 1차 캐시가 갖는 장점들, 변경감지(Dirty-Checking)와 플러시(Flush())가 내부적으로 어떻게 동작하는지에 대해서 알아보도록 하겠습니다. 엔티티의 생명 주기 비영속(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태입니다. Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); //객체만 생성한 상태 jpa와 아에 관계가 없음 영속(managed) 영속성 컨텍스트에 관리되는 상태 //상단 세줄은 비영속 상태. Member member = new Member(); member.setId..

[JPA] Persistence context(영속성 컨텍스트)와 EntityManager [내부링크]

JPA와 ORM에 대한 간략한 정의와 JPA에서 중요한 영속성 컨텍스트(Persistence Context)와 엔티티 매니저(Entity Manager), 영속성 컨텍스트 타입(Persistence Context type), 영속성 컨텍스트(Persistence Context)의 장점등에 대해서 알아보도록 하겠습니다. JPA, ORM JPA는 ORM(Object–relational mapping)이며 객체 지향과 Database간 발생하는 차이를 매핑해줍니다. 즉 객체는 객체대로 설계하고 DB와의 차이점에 대해서는 ORM통해서 매핑하게됩니다. SQL중심적 개발에서 객체 중심으로 개발할 수 있게 되며 데이터베이스에 종속적이지 않게 됩니다. JPA는 JDBC API를 통해서 DB에 접근하며 java appl..

[Kafka] Leader Epoch(리더 에포크)을 활용한 카프카 브로커(kafka broker) 복구 [내부링크]

카프카(kafka)가 리더 에포크(Leader Epoch)를 활용하여 카프카 브로커(kafka broker)를 복구 하는 과정에 대한 정리와, 실습 환경 내에서 브로커 복구 진행 과정을 살펴보는 것을 포스팅해보도록 하겠습니다. 실전 카프카 개발부터 운영까지 도서에 정보를 추가하고 자체적인 실습환경 내에서 진행 했습니다. 실습 환경에대해서는 아래 환경 구축을 참조해 주시면 감사합니다. https://colevelup.tistory.com/17 [Kafka] kafka cluster 실습 환경 구축 서론 kafka 관련 포스팅을 하기 이전 실습 환경에 대해서 먼저 구성해 보도록 하겠습니다. container 환경에서 실습환경은 진행됩니다. 가상화 기술과 Docker, 대량의 Container를 효율적으로 띄..

[Kafka] Replication(리플리케이션)과 Leader(리더)와 Follower(팔로워)를 알아보자 [내부링크]

카프카(Kafka)를 안정적이게 사용할 수 있도록 가용성 측면에서 활용되는 리플리케이션(Replication)과 리플리케이션(Replication)들중 리더(Leader)와 팔로워(Follower)에 대해서, ISR(InSyncReplica), 동작 방식에 대해서 알아보도록 하겠습니다. 리플리케이션(Replication) 데이터 파이프라인에 메인 허브 역할을 하는 카프카 클러스터가 정상적으로 동작하지 못한다거나 연결된 데이터 파이프라인에 영향을 미친다면 심각한 문제가 생길 수 있기 때문에 안정적인 서비스를 제공하기 위해 리플리케이션이라는 동작을 하도록 구상됐습니다. 리플리케이션이란 메시지들을 여러 개로 복제해서 카프카 클러스터 내 브로커들에 분산시키는 동작입니다. 카프카의 replication 동작을 위..

[Kafka] Topic, Partition, Segment, Segment 관리, Offset [내부링크]

카프카(kafka)에서 다뤄지는 주요 개념들인 토픽(Topic), 파티션(partition), 세그먼트(Segment), 오프셋(Offset)에대해서 그리고 세그먼트(segment)의 경우 관리하는 법 까지 알아보도록 하겠습니다. 토픽(Topic) Topic Event는 무엇인가 발생한 사실에 대한 record이며 record 또는 message라고 공식 document에서는 말합니다. Events are organized and durably stored in topics. Very simplified, a topic is similar to a folder in a filesystem, and the events are the files in that folder. 이 Event가 구조화되어 topi..

[Kafka] kafka cluster 실습 환경 구축 [내부링크]

kafka 관련 포스팅을 하기 이전 kafka cluster(카프카 클러스터) 를 구축 하여에 실습환경을 구성해보도록 하겠습니다. 컨테이너(container) 환경에서 실습환경은 진행됩니다. 가상화 기술과 Docker, 대량의 Container를 효율적으로 띄우고 관리하기 위해 나온 Docker Compose, Container 오케스트레이션을 위한 Kubernates등에 대해서는 추후 자세히 포스팅하겠습니다. kafka cluster(카프카 클러스터) 구축 container 환경에서 1~3대의 zookeeper 와 1~3대의 kafka를 만들어 실습환경을 구성해 보도록 하겠습니다. Docker-Desktop설치 후 container를 여러 대 띄우는데 활용하기 유용한 docker-compose를 활용하..

[Kafka] Kafka 도입 사례로 보는 Kafka 사용의 당위성과 이점 [내부링크]

사내에서 실전 카프카 개발부터 운영까지 라는 책을 선정하여 스터디를 진행하고 있습니다. 책 첫 장에서 카프카 적용 사례(kafka use case)로 트위터와 잘란도 등을 통해서 Apache 카프카를 쓰는 이점과 사용했을 때 유용한 면들을 유익하게 소개하고 있습니다. 책 내용과 개인적으로 추가적으로 정보전달하는 부분을 넣고, 해석한 부분들도 추가해서 글을 작성했습니다. 카프카를 사용하는 이점에 어떤 것들이 있는지 봐주시면 감사합니다. Message Queue에서의 Producer, Consumer, Topic들과 같은 개념이 생소하시다면 이전 포스팅을 봐주시고 와주시면 도움이 됩니다. https://colevelup.tistory.com/3 Message Queue란? 서론 Apache Kafka나 Ra..

[Effective Java] 반환 타입으로는 Stream 보다 Collection이 낫다. (item 47) [내부링크]

Stream에서는 반복을 지원하지 않기 때문에 API에서 Stream만 반환하도록 한다면 반복과 stream을 잘 시기적절하게 사용하기를 원하는 사용자는 불만을 토로할 수 있다. Stream을 사용할 수도 반복을 사용할 수도 있게 지원해야 한다. Stream과 iterator Stream 인터페이스는 Iterable 인터페이스가 정의한 추상 메서드를 전부 포함하고 정의한 방식대로 동작하나 for-each로 stream을 반복할 수 없는 이유는 Stream이 Iterable을 extend 하지 않아서 이다. 실제로 BaseStream을 열어보면 iterator메서드가 들어있다. 하지만 반복문에서 활용하면 컴파일 에러가 발생한다. 메서드 참조를 매개변수화된 Iterable로 적절히 형변환 해줘야 한다. St..

[Effective Java] Stream에서는 부작용 없는 함수를 사용하라. (item 46) [내부링크]

Effective Java item 46 스트림(Stream)에서는 부작용 없는 함수를 사용하라에서의 부작용 없는 함수와 어떤 함수를 사용하기를 권장하는지 확인해보도록 하겠습니다. stream과 부작용 없는 함수 stream은 새로 추가된 또 하나의 API가 아닌 함수형 프로그래밍에 기초한 패러다임이기 때문에 장점이 무엇인지 쉽게 와닿지 않을 수도 있습니다. Stream 패러다임에 핵심은 계산 로직을 일련의 변환(transformation)으로 재구성하는 부분입니다. 각 변환 단계는 가변 상태를 참조하지 않고 오로지 입력값에만 영향을 받는 순수함수로 이루어져 이전 단계의 결과를 받아 처리해야 합니다. 이 핵심을 지키려면 stream 연산 내에 건네는 함수 객체는 모두 함수가 결과값 이외에 다른 상태를 변..

[Effective Java] Stream은 주의해서 사용해라(Item 45) [내부링크]

Effective Java에서 말하는 Stream 사용시 주의 사항에 대해서 확인해보도록 하겠습니다. Stream과 관련된 Effective Java Item 45~48까지 학습한 것에 대한 포스팅을 이어서 하겠습니다. Stream을 과용하는 것을 피하자 프로그램이 읽거나 유지 보수하기 어려워진다 아나그램 예시 아나그램(anagram) : 알파벳이 같고 순서만 다른 단어를 말한다. ex) staple , aelpst, petals, aelpst → 아나그램 그룹 스트림을 과용하여 코드 가독성을 떨어트리고 유지 보수 비용을 늘리는 케이스 예시 public class StreamAnagrams { public static void main(String[] args) throws IOException { ..

[Java] Stream (Stream이 밀려온다) [내부링크]

Java8 에서 추가된 스트림(Stream)에 대해서 스트림(stream), 스트림 파이프라인(stream pipe line), 스트림 연산자(stream operator), 스트림 병렬 처리 (parall stream)등을 특징들과 함게 살펴보도록 하겠습니다. Stream API Stream API는 순차적 or 병렬적으로 다량의 데이터 처리 작업을 돕고자 Java8에 추가되었습니다. 이 Stream API가 제공하는 추상 개념 중 핵심적인 것은 두 가지입니다. 1. 스트림(Stream) 데이터의 유한 혹은 무한한 일련의 시퀀스를 의미합니다. Stream으로 넘어온 데이터를 Stream으로 이어받아서 유한하게 처리하거나 무제한으로 처리가 가능합니다. 2. 스트림 파이프라인(Stream Pipe Line..

[Java] 람다(Lambda)를 소화시켜 보자 [내부링크]

서론 저번 함수형인터페이스(functional interface)에 이어서 Lambda Expression(람다식)에 대해서 학습한 것에 대해 포스팅을 하려고 합니다. 람다식, 함수형 프로그래밍, 람다 이전 익명클래스, 변수 캡처에 따른 쉐도잉, 메서드 래퍼런스 순으로 알아보도록 하겠습니다. Lambda Expression 람다식(Lambda Expression)이란? 메서드를 하나의 식(expression)으로 표현한 것. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로 람다식을 익명 함수(anonymous function)라고도 한다. 람다 형식. (인자리스트) -> 바디 단 단일 실행문일 경우 {} 함수 몸체 괄호를 생략할 수 있습니다. 예시 Supplier get10 = () ->..

[Java] Functional Interface(함수형 인터페이스) [내부링크]

Java - Lambda Expression에 관하여 블로그 글을 작성하려고 보니 함수형 인터페이스(functional interface)도 긴밀하게 엮여있어 하나의 글로 작성을 하기엔 너무 길고 가독성도 떨어질 것 같아 lambda 이전에 functional interface에 관한 글을 선행하여 작성하려고 합니다. Java8에서 추가된 Functional Interface에 대해서 알아봅시다 c예제를 최대한 많이 넣으려고 했습니다!. Functional Interface란? Functional Interface란 Object Class의 메서드를 제외하고 '구현해야 할 추상 메서드가 하나만 정의된 인터페이스'를 의미합니다. 예시 코드 //Functional Interface인 경우: 메서드가 하나만 ..

[JPA] JPA 연관관계 매핑 - 단방향, 양방향, 주인 설정 및 mappedBy 속성 활용하기 [내부링크]

JPA에서 연관관계 매핑의 중요 개념들, 단방향 및 양방향 연관관계, 양방향 연관관계에서의 주인 설정, mappedBy 속성, 객체 지향과 관계형 디비 두 가지 다른 패러다임 간에 오는 차이점등을 살펴봅니다. 그리고 그를 통해서 JPA를 사용한 객체 관계 매핑에 대해 효율적으로 접근해보도록 하겠습니다. 연관관계가 필요한 이유 ‘객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.’ 조영호(객체지향의 사실과 오해) teamId → 외래키를 그대로 가져와버림 Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new Member(); member.setUsername("memeber1"); memb..

[Java] Equals vs Hashcode 그리고 재정의 [내부링크]

Java에서 equals()와 hashcode() 없이는 상당히 많은 if 문을 객체의 모든 field를 비교하기 위해서 사용해야 한다. Java에서 equals()와 hashcode()를 언제 재정의 해야 하는지 그리고 재정의 하는 것과 하지 않는 것에 는 어떤 차이가 존재하는지 확인하허며 Java에서 객체 비교를 효율적이고 쉽게 해주는 equals와 hashcode()에 대해서 공부해 보자. equals()와 hashcode()에 대해서 Overrding equals() and hashcode() in Java equals()와 hashcode()는 모든 Java 객체의 상위 클래스인 Object Class에 정의되어 있다. 모든 java class는 equals()와 hashcode()를 포함하..

cash말고! 데이터 베이스 캐시(Database Cache) 활용 전략(2) [내부링크]

이전 포스팅에 이어서 오늘 공부할 것은 다양한 캐싱 전략 중 WriteBack, WriteThrough, Write Around에 대해서 알아보도록 하겠습니다. https://colevelup.tistory.com/7 cash말고! 데이터 베이스 캐시(Database Cache) 활용 전략(1) 데이터 베이스 캐싱 전략은 데이터 및 데이터 액세스 패턴에 따라 달라집니다. 오늘 공부할 것은 다양한 캐싱 전략중 Look aside Cache와 Read Through에 대해서 알아보도록 하겠습니다. https://colevelup.tis colevelup.tistory.com 캐싱 전략 Wirte Back(Write Behind) 모든 데이터를 Cache Store에 저장한 뒤 일정 시간 후 Data Stor..

cash말고! 데이터 베이스 캐시(Database Cache) 활용 전략(1) [내부링크]

데이터 베이스 캐싱 전략은 데이터 및 데이터 액세스 패턴에 따라 달라집니다. 오늘 공부할 것은 다양한 캐싱 전략중 Look aside Cache와 Read Through에 대해서 알아보도록 하겠습니다. https://colevelup.tistory.com/6 캐싱이란? 캐싱이란 컴퓨팅에서 캐시는 일반적으로 일시적인 특징이 있는 데이터 하위 집합을 저장하는 고속 데이터 스토리지 계층 이다. 이후에 해당 데이터에 대한 요청이 있을 경우 데이터의 기본 스 colevelup.tistory.com 캐싱 전략 Look aside Cache(Cache aside) Data에 접근하는 Client는 우선 Cache에 원하는 Data가 있는지 체크한다 Cache에 원하는 Data가 있다면 Cache hit이고 Cache..

캐싱이란? [내부링크]

캐싱이란 컴퓨팅에서 캐시는 일반적으로 일시적인 특징이 있는 데이터 하위 집합을 저장하는 고속 데이터 스토리지 계층이다. 이후에 해당 데이터에 대한 요청이 있을 경우 데이터의 기본 스토리지 위치에 액세스할 때보다 더 빠르게 요청을 처리할 수 있다. 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다. 보통 In-Memory Computing 즉 애플리케이션 운영을 위한 데이터를 SSD 가아닌 RAM에서 수행하는 것을 말함. 속도를 위해 용량을 절충하는 캐시는 일반적으로 데이터의 하위 집합을 일시적으로 저장 한다. 보통 완전하고 영구적인 데이터가 있는 데이터베이스와는 대조적이다. 캐싱의 이점 애플리케이션 성능 개선 메모리는 디스크(마그네틱 또는 SSD) 보다 훨씬 속도가 빠르기 때..

[EffectiveJava] 정적 팩터리 메서드(Static Factory Method) 장단점 [내부링크]

정적 팩터리 매서드(Static Factory Method)는 Java 서적에 바이블이라고 할 수 있는 effective java를 읽은 개발자라면 생성자 대신 정적 팩토리 메서드를 고려하라 라는 첫 장에서 많이 보았을 겁니다. 정적 팩토리 메서드에 장단점에 대해서 알아봅시다. 인스턴스 전달 수단 과 정적 팩토리 메서드 클라이언트가 클래스의 인스턴스를 얻는 일반적인 수단은 Public 생성자이다. 클래스의 생성자와 별도로 static factory method를 제공할 수 있다. static factory method는 인스턴스를 반환하는 정적 메서드를 말한다. public static Boolean valueOf(boolean b){ return b ? Boolean.TRUE : Boolean.FALS..

[Java] Interface(인터페이스)와 Abstract Class(추상클래스)를 비교해보자 [내부링크]

서론 많이 유사하지만 다른. Interface와 abstract class의 차이에 대해서 알아보자. extend, implement 등의 기본적인 사용법은 쓰지 않겠습니다. Interface 구현에 의존적 interface는 특정 기능을 수행하자는 일종의 contract 즉 사전 합의가 주된 목적이기 때문에 interface를 사용하는 의도를 만족시키기 위해서는 implementation 죽 구현에 의존한다 즉 concrete class로 반드시 구현되어야 하는 일종의 contract인 것. 상태를 갖지 못한다 인터페이스는 state 즉 상태를 갖지 못한다. interface에서의 variable은 전부 static final 이다. 변경 가능한 인스턴스 변수를 사용할 수 없으며 오직 final 변수 ..

Message Queue(메시지 큐)란 무엇이며 어떤 특징들이 있을까? [내부링크]

서론 Apache Kafka나 RabbitMQ와 같이 MessageQueue를 활용하는 방법들이 있다. MessageQueue란 무엇이고 어떤 패턴들이 존재할까? 알아보도록 하자 Message Queue Message Message란 무엇일까? 한 시스템에서 또 다른 시스템으로 process 되는 게 예상되어지는 information의 한 조각이다. ex) Data payload, file, meta data 등등 Queue Queue란? FIFO(First in First Out)형식의 자료구조를 의미한다. 순차적으로 진행되는 Process에 사용 Message는 순차적으로 Queue에 들어오게 되고, Queue는 순차적으로 들어오는 Message를 받아서 갖고 있다가 하나하나 순서에 맞게 전달한다. ..

[Java] 상속 vs 컴포지션 [내부링크]

상속(inheritance)과 컴포지션(composition) effective java item 18장을 보면 상속보다는 컴포지션을 사용하기를 권장한다. 왜 그럴까? 이번 장에서의 상속은 클래스가 다른 클래스를 확장하는 구현 상속을 의미한다. 인터페이스가 다른 인터페이스를 확장하는 인터페이스 상속과는 무관하다. class와 object들의 관계를 설정하는 데 사용되는 두가지에대해서 알아보자. 상속은 한 클래스를 다른 클래스에서 derive 즉 파생 시킨다. ex) extend 받은 확장된 클래스가 파생됨 컴포지션은 parts 즉 클래스를 구성하는 부분의 합으로 정의한다 ex) 클래스 필드 내에 private or public 필드로 클래스의 인스턴스를 참조하게 하고 해당 클래스를 구성하는 부분의 합으로..