전체 글

전체 글

    Java 스레드(Thread), 동기화(synchronized), 스레드풀(ThreadPool) 완벽 이해하기

    Java 스레드(Thread), 동기화(synchronized), 스레드풀(ThreadPool) 완벽 이해하기

    프로그램 / 프로세스 / 스레드프로그램(Program)은 컴퓨터에 저장된 실행파일이고, 프로세스는 컴퓨터에서 실행 중인(CPU에 올라간) 프로그램입니다. 이런 프로세스 작업을 스레드 단위로 작업을 할 수 있습니다. 즉, 스레드를 사용함으로써 하나의 프로세스에서 두 가지 이상의 작업을 동시에 실행할 수 있습니다. 이를 멀티 스레드라고 합니다. 멀티 프로세스와 멀티 스레드의 차이는 무엇일까요? 1. 멀티 프로세스이름 그대로 여러 프로세스를 사용하여 처리하는 방식입니다. 여러 개의 프로세스들은 동시에 실행되는 거처럼 보이지만 사실은 매우 빠르게 돌아가면서 실행되고 있습니다. 하나의 프로세스가 CPU 위에서 돌고 있고, 다른 프로세스가 실행된다면, 기존에 실행되던 프로세스는 준비 상태가 됩니다. 마찬가지로 다른..

    Java Enum 완벽 이해하기: 상수 관리를 위한 도구

    Java Enum 완벽 이해하기: 상수 관리를 위한 도구

    Enum이란?제목에 Enum은 상수 관리를 위한 도구라고 지었습니다. 사실 Enum은 단순한 상수를 관리하는 도구를 넘어서, 타입 안정성과 가독성을 보장하는 방식으로 객체 지향적으로 상수를 관리하는 해결책입니다. 이에 관한 설명을 하기 위해서 Enum이 도입되기 전 상수가 어떻게 정의되었었는지 알아보겠습니다. 과거에는 어떻게 상수를 정의했을까?1. final 키워드를 이용한 상수자바에서 상수를 정의하는 가장 전통적인 방법은 final 키워드를 사용하는 것입니다. 이는 변수를 상수로 만들어 한 번 초기화되면 변경되지 않도록 보장하는 방식입니다. 여기에 static을 함께 사용하여 클래스 로드 시 한 번만 메모리에 할당되게 만들어 효율성을 높일 수 있습니다.public class Constants { ..

    Java 제네릭(Generic) & 와일드카드 완벽 이해하기

    Java 제네릭(Generic) & 와일드카드 완벽 이해하기

    제네릭이란?제네릭이란 클래스나 메서드 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법입니다. 제네릭을 통해 다양한 타입을 처리할 수 있습니다. 제네릭을 사용하면 컴파일 타임에 타입을 지정할 수 있어, 타입 안정성이 보장되고, 형변환에 대한 부담이 줄어듭니다. 예시: 제네릭을 사용하지 않은 경우와 제네릭을 사용하는 경우 비교// 제네릭스를 사용하지 않은 경우List list = new ArrayList();list.add("Hello");list.add(123); // 문자열과 정수를 동시에 저장 가능, 타입 안정성 없음String str = (String) list.get(0); // 형변환 필요// 제네릭스를 사용하는 경우List list = new ArrayList();list.add("..

    Java 멀티스레드 환경에서 Collection 사용: 동기화된 컬렉션과 Concurrent 컬렉션

    Java 멀티스레드 환경에서 Collection 사용: 동기화된 컬렉션과 Concurrent 컬렉션

    동기화된 컬렉션자바의 기본적인 컬렉션 클래스들은(ArrayList, HashSet, HashMap 등) 싱글 스레드 환경에서 사용할 수 있도록 설계되었습니다. 때문에 이런 컬렉션 클래스들은 멀티 스레드 환경에서 안전하지 않기 때문에, 여러 스레드가 동시에 접근할 때 데이터 불일치나 비정상적인 동작이 발생할 수 있습니다. 이를 방지하기 위해 동기화된 컬렉션을 사용합니다. Java에서는 Collections 유틸리티 클래스에서 동기화된 컬렉션을 쉽게 생성할 수 있도록 여러 메서드를 제공합니다.Collections.synchronizedList() Collections.synchronizedSet() Collections.synchronizedMap()// 동기화된 ListList syncList = Coll..

    Java 컬렉션 프레임워크 완벽 이해하기

    Java 컬렉션 프레임워크 완벽 이해하기

    Java 컬렉션 프레임워크는 데이터를 효율적으로 저장하고 관리하기 위한 구조와 인터페이스의 집합입니다. 여러 데이터 구조를 제공하여 데이터를 다루기 쉽게 만들어주기 때문에 Java 개발 시 알아두어야 합니다. 컬렉션 프레임워크 계층도Iterable 인터페이스Iterable은 Java에서 반복 가능한 객체를 나타내는 최상위 인터페이스로, 컬렉션이 요소들을 순차적으로 탐색할 수 있도록 정의한 인터페이스입니다. 컬렉션을 foreach로 사용할 수 있게 하는 것이 바로 이 인터페이스 덕분입니다.List fruits = Arrays.asList("Apple", "Banana", "Cherry");for (String fruit : fruits) { System.out.println(fruit); // App..

    Java 날짜 및 시간 포맷 다루기. SimpleDateFormat, DateTimeFormatter, FastDateFormat

    Java 날짜 및 시간 포맷 다루기. SimpleDateFormat, DateTimeFormatter, FastDateFormat

    날짜와 시간을 문자열로 변환하거나, 문자열을 날짜와 시간 객체로 변환할 때 포맷을 지정해 줍니다. 이를 위해 Java에서는 여러 가지 포맷 클래스가 제공됩니다. 각 클래스는 기능, 성능, 스레드 안전성 등에 차이가 있기 때문에 적절하게 선택해주어야 합니다. 클래스스레드 안전성포맷팅파싱Java 버전SimpleDateFormatXOOJava 7 이하DateTimeFormatterOOOJava 8 이상FastDateFormatOOX모든 버전 SimpleDateFormat (Java 7 이하)simpleDateFormat은 Java 7 이하에서 많이 사용되던 날짜/시간 포맷 클래스입니다. 이는 스레드 안전하지 않다는 단점이 있어서, 멀티스레드 환경에서 사용할 때 주의가 필요합니다. Java 8에서 더 좋은 대안..

    Java 날짜 시간 다루기: LocalDateTime, Instant, OffsetDateTime, ZonedDateTime의 차이. Duration, Period

    Java 날짜 시간 다루기: LocalDateTime, Instant, OffsetDateTime, ZonedDateTime의 차이. Duration, Period

    Date와 Calendar를 사용하지 않는 이유?Java에서 날짜와 시간을 다룰 때, Calendar와 Date 대신 LocalDateTime을 사용합니다. LocalDateTime은 Java 8에서 도입된 java.time 패키지에 포함된 클래스로, Java 8 이전의 Date와 Calendar 클래스는 몇 가지 단점이 있었습니다.불변성 부족: Date와 Calendar는 setter가 존재하여 mutable(변경 가능) 하기 때문에, 날짜 객체를 공유할 때 상태가 변할 수 있어 멀티스레드 환경에서 오류가 발생할 가능성이 큽니다.복잡한 API, 가독성 문제:Date와 Calendar 클래스에서 1월을 0부터 표기하고, 요일을 지정할 때도 일관성이 없습니다. 또한 Date와 Calendar의 API는 복..

    Java 예외 처리 완벽 이해하기

    Java 예외 처리 완벽 이해하기

    Java 예외 처리Java 프로그램이 실행 중 에러 또는 오류가 발생하면 프로그램이 예기치 않게 종료될 수 있습니다. 이러한 문제를 방지하기 위해 Java 프로그래밍에선 예외 처리를 해주는 것이 매우 중요합니다. 예외 처리를 통해 코드가 실행 중에 발생할 수 있는 오류를 처리함으로써, 애플리케이션이 갑작스럽게 종료되는 것을 방지하고 프로그램의 안정성을 높일 수 있습니다. 예외 계층 구조Java에서는 실행 시 발생할 수 있는 에러(error)와 예외(exception)를 클래스로 정의하였습니다. Java에서 에러(error)와 예외(exception)는 Throwable 클래스를 상속받는 객체입니다. 즉 Throwable 클래스를 상속받는 자식 클래스로 Error와 Exception 클래스가 있습니다.Er..

    Java JVM 메모리 구조와 메모리 저장 방식

    Java JVM 메모리 구조와 메모리 저장 방식

    JVM의 메모리 구조Java 프로그램이 실행될 때, JVM은 OS(운영 체제)로부터 해당 프로그램을 수행할 수 있도록 필요한 메모리를 할당받습니다. 할당받은 메모리를 JVM은 메모리 공간 효율성을 높이기 위해 용도에 따라 여러 영역으로 구분하여 관리합니다.method area / static area이 영역은 자바 프로그램에서 사용되는 클래스 정보와 클래스 변수(static), 상수가 저장되는 영역입니다. 클래스 로딩 시 이 영역에 저장되며, 모든 스레드에서 공유됩니다. JVM은 특정 클래스가 사용되면 해당 클래스 즉, 자바 바이트 코드인 클래스 파일(*.class)를 읽어 들인 클래스와 인터페이스에 대한 런타임 상수 풀, 멤버 변수(필드), 클래스 변수(static 변수), 생성자와 메소드를 메소드 영..

    Java 상속(Inheritance), 인터페이스(Interface), 추상 클래스(Abstract Class) 차이점

    Java 상속(Inheritance), 인터페이스(Interface), 추상 클래스(Abstract Class) 차이점

    1. 상속(Inheritance)상속은 기존 클래스의 속성과 메소드를 재사용하고, 새로운 기능을 추가하여 확장하는 기능입니다. 한 클래스가 다른 클래스를 상속하면 자식 클래스(서브 클래스)가 부모 클래스(슈퍼 클래스)의 모든 속성과 메소드를 물려받게 됩니다.코드 재사용성: 부모 클래스의 코드를 자식 클래스에서 재사용할 수 있습니다.확장성: 자식 클래스는 부모 클래스의 기능을 확장하거나 오버라이딩(재정의)할 수 있습니다.단일 상속: Java에서는 하나의 클래스만 상속받을 수 있습니다.class Animal { void sleep() { System.out.println("잠듭니다."); }}class Dog extends Animal { void bark() { S..

    Java 생성자, this()와 super()

    Java 생성자, this()와 super()

    생성자생성자는 객체가 생성될 때 호출되는 특수한 메소드입니다. 생성자의 주된 역할은 객체의 초기화로, 인스턴스 변수에 적절한 값을 할당하거나 객체를 초기 상태로 세팅하는 데 사용됩니다. 생성자 종류1. 기본 생성자Java에서 생성자를 명시하지 않으면, 컴파일러가 자동으로 기본 생성자를 추가합니다. 기본 생성자는 매개변수가 없는 생성자로, 클래스가 객체화될 때 아무런 초기화 작업을 하지 않고 객체를 생성하는 역할을 합니다.class User { String name; // 생성자가 없으므로 컴파일러가 기본 생성자를 자동으로 추가}public class Main { public static void main(String[] args) { User user = new User(); ..

    Java 객체지향 프로그래밍의 특징과 개념 이해

    Java 객체지향 프로그래밍의 특징과 개념 이해

    객체지향 프로그래밍: OOPJava는 객체지향 프로그래밍(OOP)의 대표적인 언어로, 현실에 존재하는 사물(객체)을 속성과 기능으로 정의하고 이를 코드로 구현하는 방식입니다. 객체지향 프로그래밍의 핵심은 클래스와 객체, 그리고 이를 통해 프로그램을 설계하고 구조화하는 방법에 있습니다. 이번 포스팅에서, 객체지향에 대한 설명과 Java에서 이를 어떻게 구현하는지에 대해 설명하도록 하겠습니다. 객체지향 프로그래밍의 장점코드 재사용성이미 정의된 클래스와 객체를 여러 프로그램에서 재사용할 수 있어 개발 효율이 높아집니다.유지보수성클래스와 객체를 이용해 코드를 모듈화할 수 있어 수정과 유지보수가 용이합니다.확장성새로운 기능을 추가하거나 변경할 때 기존 코드를 최소한으로 수정하고 확장할 수 있습니다.캡슐화데이터를 ..

    Java 조건문과 반복문: if, switch, for, while 그리고 break와 continue

    Java 조건문과 반복문: if, switch, for, while 그리고 break와 continue

    프로그래밍에서 조건문과 반복문은 논리적 흐름을 제어하는 문법입니다. 조건문으로 if, switch, 반복문으로 for, while, do-while 가 있습니다. 조건문1. if문if문은 주어진 조건이 true일 때만 실행되는 가장 기본적인 조건문입니다.int age = 20;if (age >= 18) { System.out.println("성인입니다.");} 2. if-else문if문과 함께 else를 사용하면, 조건이 false일 때 실행할 코드도 지정할 수 있습니다.int age = 10;if (age >= 18) { System.out.println("성인입니다.");} else { System.out.println("미성년자입니다.");} 3. if-else if문if-else if문..

    Java 변수, 데이터 타입, 리터럴과 상수 차이

    Java 변수, 데이터 타입, 리터럴과 상수 차이

    변수(variable)란?변수란 데이터를 저장하는 메모리 공간입니다. Java에서 변수를 사용하려면 선언하고, 필요에 따라 초기화해야 합니다. 변수 선언과 초기화변수 선언은 데이터 타입과 변수명을 지정하여 이루어집니다. 데이터 타입은 저장하고자 하는 값의 종류에 맞게 지정해주면 됩니다. 이렇게 타입을 지정하면 메모리의 빈 공간에 데이터 타입 크기 만큼의 저장공간이 생기게 됩니다. 변수명은 이 저장공간에 이름을 붙여 사용할 수 있게 해줍니다.int x; // 정수형(int) 변수 선언x = 10; // 변수 초기화 (값 할당)int x = 10; // 선언과 초기화 변수 네이밍 규칙컴파일러에서 제한되는 네이밍 규칙영어와 숫자, _, $만 사용 가능합니다.대소문자는 구분됩니다.숫자로 시..

    Java란 무엇인가?

    Java란 무엇인가?

    Java란 무엇인가요?Java는 1990년대 중반에 등장한, 웹 어플리케이션 코딩에 사용되는 객체지향 프로그래밍 언어입니다. Java를 사용하는 이유는 많지만, 그 중에서도 운영체제 독립성, 객체지향 설계 등이 장점이라 볼 수 있습니다.📌전자정부표준프레임워크한국 정부에서 Java/Spring을 표준(전자정부표준프레임워크)으로 정하였습니다. 이로인해 Java/Spring 기반인 정부 과제들도 많고, 높은 일자리 점유율을 갖기 때문에 사실 국내 웹 백엔드 개발에 있어서 Java/Spring은 사실 표준으로 사용되고 있습니다. Java 특징1. 운영체제 독립성운영체제 독립성 덕분에 하나의 코드로 다양한 플랫폼에서 애플리케이션을 배포할 수 있습니다. 이 기능을 가능하게 하는 것은 바로 JVM (Java Vir..

    React Hooks 이해하기

    React Hooks 이해하기

    React Hooks란?React Component는 클래스형 컴포넌트와 함수형 컴포넌트 두 가지가 존재합니다. 함수형 컴포넌트는 클래스형 컴포넌트보다 코드도 간결하고, 더 빠른 성능이 나옵니다. 그럼에도 예전엔 클래스형 컴포넌트를 더 많이 사용했었습니다. 그 이유는 상태 관리와 라이프사이클 메소드를 클래스형 컴포넌트에서만 사용할 수 있었기 때문입니다.하지만 React 16.8부터 리액트 Hooks가 발표되고 함수형 컴포넌트에서 Hooks를 사용하여 상태 관리와 사이트 이펙트를 처리할 수 있게 되어, 현재는 함수형 컴포넌트를 대다수가 사용합니다.  React 라이프 사이클  주요 React HooksuseStateuseEffectuseContextuseReduceruseCallbackuseMemouseR..

    React Props와 State를 통한 데이터 관리

    React Props와 State를 통한 데이터 관리

    React는 컴포넌트 기반 라이브러리로, 데이터를 전달하는 두 가지 주요 방법인 Props와 State가 있습니다. Props (Properties)props는 부모 컴포넌트에서 자식 컴포넌트로 데이터를 전달하는 방법입니다. props는 읽기 전용이기 때문에, 전달받은 자자식 컴포넌트는 props를 수정할 수 없습니다. (값을 수정하고 싶으면, 부모 컴포넌트에서 state를 변경시켜줘야 합니다.) props 기본 사용법부모 컴포넌트function ParentComponent() { const name = "yeo"; return } 자식 컴포넌트function ChildComponent(props) { return Hello, {props.name}!}  여러개의 props부모 컴포넌트funct..

    React 리액트에서 UI를 정의할 때 사용하는 JSX: JavaScript XML

    React 리액트에서 UI를 정의할 때 사용하는 JSX: JavaScript XML

    JSX: JavaScript XMLJSX(JavaScript XML)는 React에서만 사용하는 JavaScript 확장 문법입니다. JSX를 사용하면 JavaScript 코드 안에 HTML과 유사한 코드를 작성할 수 있습니다. 즉, JSX는 React 컴포넌트를 만들 때 UI를 정의하는데 사용합니다. JavaScript로 UI 표현`React.createElement`를 사용하여 React 요소를 생성할 수 있습니다.아래 코드는 type: h1이고, props: {className: 'hello'} 을 갖고, 자식: 'Hello, React!' 문자열을 갖는 React 요소를 생성합니다.// createElement(type, props, ...children)const element = React.c..

    React 기본 구조 완벽 정리, SPA(Single Page Application) 이해하기

    React 기본 구조 완벽 정리, SPA(Single Page Application) 이해하기

    React 애플리케이션 구조아래는 `create-react-app`을 사용하여 생성된 기본 React 애플리케이션의 구조 예시입니다.my-app/├── node_modules/├── public/│ ├── index.html│ ├── favicon.ico│ └── ...├── src/│ ├── App.css│ ├── App.js│ ├── App.test.js│ ├── index.css│ ├── index.js│ ├── logo.svg│ └── ...├── .gitignore├── package-lock.json├── package.json└── README.mdnode_modules/프로젝트에서 사용하는 모든 외부 라이브러리와 모듈을 저장합니다.`npm install`..

    React 리액트란? 기본 개념, 컴포넌트, 가상 DOM, 설치까지 한눈에 보기

    React 리액트란? 기본 개념, 컴포넌트, 가상 DOM, 설치까지 한눈에 보기

    리액트(React)란?React는 Facebook에서 개발한 사용자 인터페이스를 만들기 위한 JavaScript 라이브러리입니다. 리액트와 같이 웹 개발을 위한 Tool로 Vue나 Angular도 많이 사용되지만, 최근 React의 수요가 더욱 증가하고 있습니다. 라이브러리인 ReactReact와 Vue, Angular의 가장 큰 차이점은 React는 라이브러리이고, Angular와 Vue는 프레임워크라는 점입니다. 라이브러리:  개발하는데 필요한 기능을 모듈화 해놓고, 개발자는 필요한 기능을 호출하여 사용하면 됩니다.프레임워크: 어플리케이션을 만들기 위한 기본적인 틀은 제공되어 있고, 개발자는 필요한코드를 규칙에 따라 작성해주어 사용하면 됩니다. (프레임워크에 라이브러리도 포함되어 있습니다. 프레임워크..

    Spring Boot 로그(Log) 남기기, log4j2을 사용한 로깅 전략

    Spring Boot 로그(Log) 남기기, log4j2을 사용한 로깅 전략

    로그(Log)란? 로그(Log) 남기기 어플리케이션을 운영할 때 작동 정보인 로그(Log)를 기록하는 행위를 해주어야 합니다. 로그를 기록하면 어플리케이션의 상태를 추적하고, 오류 인지 및 잠재적인 문제를 진단할 수 있습니다. 즉 로깅을 통해 로직의 흐름을 파악함으로써 서비스의 품질을 관리할 수 있기 때문에 로깅은 개발자들에게 필수적입니다. 그러나 로그를 무분별하게 기록하면 로그 파일의 볼륨이 너무 커져 문제를 야기할 수 있습니다. 따라서 예외가 발생하는 곳이나, 중요 기능이 실행되는 부분에 적절한 로깅을 남겨 효율적으로 처리하는 것이 중요합니다. 로그 레벨 로그 레벨은 로그 메시지의 중요도를 나타냅니다. 로그 레벨에는 총 6가지의 레벨이 있습니다. 로깅 레벨을 올바르게 선택하면 적절한 정보만 로그로 남..

    RSA를 이용하여 페이로드(ex. 비밀번호) 암호화하기 (Vue.js / Spring Boot)

    RSA를 이용하여 페이로드(ex. 비밀번호) 암호화하기 (Vue.js / Spring Boot)

    0. 상황 Vue.js에서 아이디(userId)와 비밀번호(userPassword)를 입력하여 로그인을 해봅니다. 개발자 모드(F12)를 켜서 페이로드를 살펴보면 다음과 같이 사용자가 입력한 아이디와 비밀번호를 바로 확인할 수 있습니다. 보안을 위해 비밀번호(userPassword)를 암호화하여 요청하고 싶습니다. 이때 우리는 바로 전 포스팅에서 생성한 비대칭 키 RSA를 사용할 것입니다. 1. Vue.js에서 RSA 공개키로 암호화 JavaScript 라이브러리인 jsencrypt를 사용하여 암호화를 수행할 것입니다. 이를 위해 먼저 jsencrypt를 설치해줍니다. npm install jsencrypt 그런 다음, Vue.js 컴포넌트에서 RSA 공개키로 암호화를 수행하는 코드를 작성합니다. 저는 ..

    OpenSSL을 통해 RSA 공개키, 개인키 생성하기

    OpenSSL을 통해 RSA 공개키, 개인키 생성하기

    1. OpenSSL 설치하기 Windows: https://slproweb.com/products/Win32OpenSSL.html 혹은 https://code.google.com/archive/p/openssl-for-windows/downloads 등에서 OpenSSL을 다운로드하여 설치하면 됩니다. Mac: brew install openssl 2. openssl.exe 파일 위치로 이동하기 openssl-0.9.8k_X64\bin\openssl.exe 위치로 이동해줍니다. 3. private_key 생성 1) private_key.pem 생성 openssl-0.9.8k_X64\bin> openssl genrsa -out private_key.pem 1024 생성된 private_key.pem (PK..

    Git 초보자도 쉽게 이해할 수 있는 Git (2) 문법 정리 (feat. Github)

    Git 초보자도 쉽게 이해할 수 있는 Git (2) 문법 정리 (feat. Github)

    Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리 Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리 Git은 VCS(버전 관리 시스템)으로 협업 및 관리를 위한 강력한 도구입니다. 그럼 VCS는 무엇일까요? VCS VCS(버전 관리 시스템)는 소스 코드의 변경 이력을 관리하는 도구로, 개발자들이 소스 코드를 yeo-computerclass.tistory.com 1. Git 설치하기 먼저 Git을 사용하기 앞서 설치부터 해주어야 합니다. Git은 공식 웹사이트(https://git-scm.com/)에서 다운로드할 수 있습니다. 2. Git 설정 문법 git config --list: 해당 Git 저장소의 설정 확인 git config [설정할 키] [설정할 값]:..

    Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리

    Git 초보자도 쉽게 이해할 수 있는 Git (1) 개념 및 용어 정리

    Git은 VCS(버전 관리 시스템)으로 협업 및 관리를 위한 강력한 도구입니다. 그럼 VCS는 무엇일까요? VCS VCS(버전 관리 시스템)는 소스 코드의 변경 이력을 관리하는 도구로, 개발자들이 소스 코드를 효율적으로 관리하고 협업할 수 있도록 돕습니다. VCS는 소스 코드가 변경될 때마다 변경 된 소스 코드 파일의 변화를 기록 (변경점 관리)합니다. 이렇게 기록한 변경점으로 소스 코드를 복구하거나 특정 시점의 파일을 가져올 수 있습니다. 또한 특정 시점에 수정한 파일을 가져와 수정된 내용을 비교하는 것이 가능하고, 해당 파일을 누가 변경했는지, 또 어떻게 파일이 변경되어 왔는지를 추적할 수 있습니다. VCS를 통해 소스 코드의 이력을 추적할 수 있고, 여러 명의 개발자들이 분산 개발을 하며 협업할 수..

    Kafka Spring Boot 3으로 간단하게 Producer, Consumer 구현해보기

    Kafka Spring Boot 3으로 간단하게 Producer, Consumer 구현해보기

    JSON 형태인 데이터(메시지)를 Producer가 보내고 Consumer가 읽는 코드를 간단하게 구현해보도록 하겠습니다. 아래 코드를 작성해보시고 실행해보시면 정상작동합니다. 예제 코드가 정상 작동하기 위해서는 당연히 예제 쓰일 topic이 생성되어야 하고, zookeeper와 kafka를 실행시켜주셔야합니다. (zookeeper는 지양되지만 현 예제에서는 zookeeper를 사용하도록 하겠습니다) 1. zookeeper 실행 D:\tool\kafka> .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties 2. (broker) 서버 실행 D:\tool\kafka> .\bin\windows\kafka-server-start.bat ..

    Kafka Kafka명령어, local 환경에 Kafka Cluster 구축

    Kafka Kafka명령어, local 환경에 Kafka Cluster 구축

    Kafka 설치 아래 링크에 들어가 Binary downloads를 하면됩니다. Version은 자신의 환경 및 학습하고자 하는 버전에 맞게 다운받으시면 됩니다. (저는 기존에 깔아둔 2.8.2 version 입니다.) https://kafka.apache.org/downloads Apache Kafka Apache Kafka: A Distributed Streaming Platform. kafka.apache.org Broker 3대 실행하기 Broker를 실행해주기 위해 설정파일을 작성해줍니다. 설치한 Kafka 폴더안에 config 폴더로 이동하여 server.properties 설정파일을 작성해줍니다. 설정 파일 작성 server.properties는 Broker에 대한 설정 파일입니다. 우리는 ..

    Kafka 카프카(Kafka)란?

    Kafka 카프카(Kafka)란?

    아파치 카프카 (Apache Kafka)란? 정의 Apache Kafka는 실시간 데이터 스트리밍을 처리하기 위한 오픈 소스 분산형 Pub/Sub 메시징 플랫폼입니다. 주로 대규모 데이터 처리, 실시간 데이터 파이프라인 구축, 스트리밍 분석, 데이터 통합 등에 사용됩니다. 탄생 배경 Kafka는 LinkedIn에서 개발했습니다. LinkedIn은 사용자들의 활동, 컨텐츠 등 대량의 데이터를 실시간으로 추적하고 처리하려했습니다. 기존 데이터 처리 시스템으로 해결할 수 있었습니다. 하지만 서비스가 커지면서 처리해야할 데이터도 많아지고 노드도 많아졌습니다. 이에 따라 데이터 파이프라인은 매우 복잡해졌고, 대규모 데이터를 처리하는데 한계를 느끼게되었습니다. 이에 LinkedIn은 대용량의 데이터를 효율적으로 처..

    Redis redis를 이용하여 랭킹 리더보드 구현하기

    Redis redis를 이용하여 랭킹 리더보드 구현하기

    redis 이용한 리더보드 Redis를 사용하여 랭킹 리더보드를 구현 했을 때 장점 Redis는 In-Memory 저장소로 매우 빠른 액세스 속도를 갖습니다. 또한 자료구조(Key-Value) 특성으로 읽기 및 작업 속도를 제공합니다. 때문에 랭킹을 실시간으로 업데이트 할 수 있습니다. Redis는 Sorted Set이라는 데이터 구조를 제공하여 요소를 정렬된 상태로 저장할 수 있습니다. 이 데이터 구조는 랭킹을 구현하는 데 유용합니다. Sorted Set 데이터 구조 이용하기 Redis의 Soted Set 데이터 구조를 조작하기 위해 Spring Data Redis에서 제공하는 인터페이스인 ZSetOperations를 이용해주면 됩니다. ZSetOperations 인터페이스를 통해 다음과 같은 기능을 ..

    Spring Boot 캐시 Cache 구현하기 (spring-context-support? redis?)

    Spring Boot 캐시 Cache 구현하기 (spring-context-support? redis?)

    캐싱: Caching cache는 데이터나 값을 복사해놓는 임시 기억 장치입니다. cache에 값을 복사해놓음으로서 속도가 느린 장치로의 접근 횟수를 줄일 수 있습니다. 예를 들어, 속도가 느린 장치인 DB에 접근하기 전에 속도가 빠른 redis를 먼저 읽음으로 성능 향상을 꾀할 수 있습니다. 캐싱 전략 Cache-Aside (Lazy Loading) 가장 일반적으로 많이 사용하는 캐싱 전략으로 항상 cache를 먼저 체크하고, 없으면 원본에서 데이터를 읽고 cache에 저장합니다. 캐싱이 필요한 데이터를 지정하여 해당 데이터들만 캐싱할 수 있고, 원본 데이터가 있기 때문에 Cache Miss가 있어도 치명적이지 않습니다. 항상 cache를 먼저 체크하기 때문에 최초 접근이 느립니다. 또한 cache에 ..