2025/03 31

MySQL 인덱스를 활용한 성능 최적화

MySQL에서 인덱스(Index)를 사용한 성능 최적화란? MySQL에서 인덱스(Index)를 사용한 성능 최적화란, 데이터베이스가 특정 데이터를 빠르게 찾을 수 있도록 데이터의 위치를 미리 정리하여 보관하는 방법임. 인덱스는 흔히 도서관의 책 색인에 비유할 수 있음. 예를 들어, 도서관에서 특정 주제의 책을 찾으려면, 책 전체를 하나씩 확인하는 대신 색인을 보고 원하는 책을 바로 찾는 것과 같음.인덱스를 설정하면 MySQL 역시 데이터를 빠르게 검색할 수 있게 됨. 인덱스가 없을 때의 문제점 (성능 저하) 먼저, 인덱스가 없을 경우의 문제를 알아보겠음. 예를 들어, 다음과 같은 테이블이 있다고 가정함: 예시 테이블 (user):idusernameageemail1kim25kim@test.com2lee28..

Infra/Performance 2025.03.21

성능 최적화

성능 최적화(Performance Optimization)의 개념과 방법 성능 최적화란 프로그램이나 시스템이 사용하는 자원을 최소화하면서 최대의 효율로 작동하도록 만드는 작업임. 즉, 같은 자원을 사용해서 더 빠르게 동작하거나, 같은 작업을 더 적은 자원으로 처리하는 것이 목표임. 특히 백엔드 개발 시, 성능 최적화는 매우 중요하며, 빠른 응답속도와 안정적인 서비스 운영을 위해 필수적인 작업임. 성능 최적화가 중요한 이유 성능 최적화를 하면 다음과 같은 효과를 얻을 수 있음. • 사용자 경험(UX) 개선: 응답 시간이 짧아져 사용자 만족도가 올라감 • 비용 절감: 서버 리소스 낭비가 줄어들어 운영 비용이 감소함 • 안정성 증가: 부하 시 시스템이 안정적으로 운영됨 • 확장성 향상: 같은 자원으로 더 많은..

Infra/Performance 2025.03.20

[Spring Boot] 스프링의 생성자 주입

스프링(Spring)의 생성자(Constructor) 주입이란? 스프링(Spring)에서 생성자 주입(Constructor Injection)이란, 객체를 생성할 때 스프링이 필요한 의존성(변수)을 생성자의 매개변수(parameter)를 통해 주입해주는 것을 의미함. 즉, 클래스가 의존하는 객체를 클래스 스스로 생성하는 것이 아니라, 스프링 컨테이너가 대신 생성하여 클래스의 생성자를 통해 전달하는 방식임. 💡 의존성 주입(DI, Dependency Injection)이란? 생성자 주입을 제대로 이해하려면 우선 의존성 주입(DI)의 개념을 알아야 함. 의존성 주입이란 객체가 직접 의존하는 다른 객체를 생성하지 않고, 외부(스프링 컨테이너)로부터 제공받는 방법임. 스프링에서는 의존성을 다음과 같은 방법으로..

[Java] File I/O

1. File I/O란? File I/O는 파일 입출력(File Input/Output) 의 줄임말임. 쉽게 말해 프로그램이 파일에서 데이터를 읽거나, 처리된 데이터를 파일로 저장하는 작업을 의미함. • Input(입력)파일 → 프로그램 방향으로 데이터를 읽음. • Output(출력)프로그램 → 파일 방향으로 데이터를 저장함. 즉, 파일에 데이터를 영구적으로 저장하거나 외부 데이터를 읽어오는 용도로 사용됨. 예를 들어, 메모장에 일기를 쓰는 행위는 Output이고, 작성된 일기를 나중에 읽어보는 행위는 Input임. 2. Java에서의 File I/O 처리 방법 Java에서는 파일 데이터를 처리할 때 크게 두 가지 스트림(Stream)을 제공함. ① 바이트 기반 스트림(Byte Stream) • 데이터를..

BE/Java 2025.03.18

[Java] BufferedReader

✅ BufferedReader의 모든 요소 (메서드 및 기능) BufferedReader는 입력을 효율적으로 처리하는 Java 클래스로, 버퍼를 사용하여 빠르게 문자열을 읽을 수 있는 기능을 제공합니다. ✅ 1. BufferedReader 생성자BufferedReader는 다음과 같은 생성자를 제공합니다.public BufferedReader(Reader in) // 기본 생성자 (Reader 객체 필요)public BufferedReader(Reader in, int bufferSize) // 버퍼 크기 지정 가능📌 Reader 객체 (InputStreamReader, FileReader 등)를 전달해야 함📌 기본 버퍼 크기는 8192 bytes (8KB) 📌 예제im..

BE/Java 2025.03.17

[Java] StringTokenizer

✅ StringTokenizer의 모든 요소 (메서드 및 기능) StringTokenizer는 Java에서 문자열을 특정 구분자로 분리하는 클래스입니다.사용법이 간단하고 성능이 뛰어나며, split()과 유사하지만 재사용이 불가능한 단점이 있습니다. ✅ 1. StringTokenizer 생성자StringTokenizer는 총 3가지 생성자를 제공합니다.public StringTokenizer(String str) // 기본적으로 공백을 구분자로 사용public StringTokenizer(String str, String delim) // 사용자가 지정한 구분자(delim)를 사용public StringTokenizer(String str, String delim, boolean r..

BE/Java 2025.03.16

메시지 브로커(Message Broker)

⚡ 1. 메시지 브로커(Message Broker)란?메시지 브로커(Message Broker) 는 서로 다른 시스템 간의 메시지를 비동기적으로 송수신할 수 있도록 중간에서 관리하는 소프트웨어입니다. ✅ 메시지 브로커의 주요 역할 • 비동기 메시지 처리 → 발신자(Sender)와 수신자(Receiver)가 동시에 실행되지 않아도 메시지를 처리 가능 • 시스템 간 결합도(Dependency) 감소 → 직접 호출 대신 메시지 큐를 사용하여 서비스 간 느슨한 결합(Loosely Coupled) 가능 • 트래픽 관리 → 서비스가 과부하를 받지 않도록 메시지를 저장하고 순차적으로 전달 • 메시지 보장(Message Durability) → 메시지가 손실되지 않도록 안전하게 보관 • 확장성(Scalability) ..

Infra 2025.03.15

AI Agent

⚡ 1. AI Agent란?AI Agent(인공지능 에이전트) 는 특정 목표를 달성하기 위해 주어진 환경에서 데이터를 수집하고 분석하며, 자율적으로 행동하는 인공지능 시스템입니다. ✅ AI Agent의 주요 특징 • 자율적 의사 결정(Self-Governing) → 환경 데이터를 수집하고, 스스로 판단하여 행동 수행 • 학습 및 적응(Learning & Adaptation) → 데이터 기반으로 지속적인 성능 향상 가능 • 태스크 자동화(Task Automation) → 반복적인 작업을 자동화하여 효율성 극대화 • LLM(Large Language Model)과 결합 가능 → OpenAI GPT-4, Hugging Face, LangChain 등과 통합 ✅ AI Agent의 주요 활용 사례 • 자동화 챗봇..

AI 2025.03.14

[Spring Boot] Spring AI

⚡ 1. Spring AI란?Spring AI 는 Spring 생태계에서 AI 및 LLM(Large Language Model)을 쉽게 활용할 수 있도록 지원하는 프레임워크입니다.Spring Boot 기반의 애플리케이션에서 OpenAI, Hugging Face, LangChain 같은 AI 모델을 간편하게 통합할 수 있습니다. ✅ Spring AI의 주요 특징 • LLM (GPT-4, Gemini, LLaMA 등) 지원 • Prompt Management (프롬프트 관리) • RAG (Retrieval-Augmented Generation) 적용 가능 • Spring Boot와 자연스럽게 통합 • Vector DB (Pinecone, FAISS) 연동 가능 • 서버리스 AI API (OpenAI, Hug..

[RAG] RAG(Retrieval-Augmented Generation) & LangChain & Vector DB

⚡ 1. RAG (Retrieval-Augmented Generation)란?RAG(Retrieval-Augmented Generation) 는 LLM(대형 언어 모델)이 외부 지식을 검색(Retrieval)하여 응답을 생성(Generation)하는 기술입니다. ✅ RAG의 주요 특징: • LLM의 정보 한계를 보완 (실시간 검색 가능) • 정확한 응답(Fact-Based Generation) 제공 • LLM의 헛소리(Hallucination) 문제 완화 ✅ RAG 동작 과정:1️⃣ 사용자 질문 입력2️⃣ Vector DB에서 유사한 문서 검색3️⃣ 검색된 문서를 LLM에게 제공4️⃣ LLM이 문서를 기반으로 응답 생성 ⚡ 2. LangChain이란?LangChain 은 LLM과 외부 데이터(Vector..

AI 2025.03.12