분류 전체보기 158

분산 락(Distributed Lock)

분산 락은 분산 시스템에서 리소스나 데이터를 여러 노드가 동시에 접근하거나 변경하지 못하도록 동기화하는 기법이다. 분산 환경에서는 여러 프로세스나 노드가 동시에 같은 리소스에 접근하려는 상황이 빈번히 발생하므로 데이터 정합성을 보장하기 위해 분산 락이 필요하다.  특징동시성 제어 : 여러 프로세스가 동시에 특정 리소스를 사용하지 못하게 막음데이터 정합성 보장 : 리소스가 여러 노드에서 동시에 변경되지 않도록 방지Failover 처리 : 노드가 실패했을 때도 락을 안정적으로 관리해야 함 분산 락 구현의 주요 과제상호 배제 (Mutual Exclusion) : 한 번에 하나의 클라이언트만 리소스에 접근 가능데드락 방지 (Deadlock Prevention) : 락을 얻은 클라이언트가 실패하거나 느려지더라도 ..

개발이론/Spring 2024.11.21

LLM의 할루시네이션이란?

LLM(대규모 언어 모델, Large Language Model)의 할루시네이션(hallucination)이란 모델이 자신감 있게 사실처럼 보이는 응답을 생성하지만 실제로는 틀리거나 허구적인 정보를 생성하는 현상을 의미한다. 이는 LLM의 대표적인 한계 중 하나로 주어진 질문이나 문맥에 대해 신뢰할 수 없는 내용을 제공할 가능성을 나타낸다. 왜 할루시네이션이 발생할까?훈련 데이터의 한계LLM은 대규모 텍스트 데이터를 기반으로 학습되지만 데이터가 항상 정확하거나 최신 정보만 포함하지는 않는다. 잘못된 정보가 포함된 데이터를 학습한 경우 이를 기반으로 할루시네이션이 발생할 수 있다.지식과 추론의 경계모델은 학습한 데이터 기반으로 추론을 수행하지만 이를 "이해"하거나 "지식"으로 판단하지 못한다. 따라서, 문..

개발이론/AI 2024.11.18

AOP - Advice, Target, Pointcut

AOP(Aspect-Oriented Programming)란 무엇인가?AOP는 소프트웨어 개발에서 핵심 비즈니스 로직과는 별개로 반복적으로 사용되는 부가기능(공통 관심사)을 분리하여 코드의 중복을 제거하고 유지보수성을 향상시키기 위한 프로그래밍 패러다임이다.AOP의 대표적인 부가기능로깅 (Logging)성능 측정 (Performance Monitoring)트랜잭션 관리 (Transaction Management)인증 및 권한 관리 (Authentication & Authorization) AOP가 필요한 이유예를 들어, 시간 측정 기능이 필요하다고 가정한다면기존 방식에서는 각 컨트롤러 메서드마다 시간을 측정하는 코드를 추가해야 함결과적으로 코드 중복, 가독성 저하, 핵심 비즈니스 로직과 부가기능 혼합 문..

개발이론/Spring 2024.11.18

소년이 온다

한강 작가의 『소년이 온다』는 1980년 광주 민주화 운동을 배경으로 인간의 고통과 기억그리고 역사적 상처에 대해 깊이 있게 나타낸 작품이다. 이 소설은 단순히 역사적 사건을 나열하는 것을 넘어그 사건 속에 존재했던 개인의 삶과 감정을 세밀하게 표현하여 읽는 동안 몰입하게 만들었다. 작품은 여러 인물의 시점을 통해 전개된다.각 장마다 이야기를 이끌어가는 인물이 달라진다.주인공 동호를 중심으로 그의 친구와 가족 그리고 그들을 둘러싼다양한 인물들의 관점을 통해 사건의 진실이 조금씩 밝혀진다.  이야기의 표현 부분에서도 폭력과 죽음, 상실의 순간을 직접적으로 묘사하면서그 안에서 피어나는 인간의 연대와 사랑을 담담하게 그려내고 있다.이 부분이 읽는 이에게 광주에서 벌어진 참혹한 현실과 그것이 개인과 공동체에 남..

2024.11.16

Spring Cloud Config

Spring Cloud Config는 분산 시스템에서 구성 데이터를 중앙에서 관리하고 배포하기 위해 사용하는 Spring 프로젝트이다. 이를 통해 애플리케이션의 설정 정보를 중앙화하고 일관되게 관리할 수 있어 특히, 마이크로서비스 아키텍처에서 유용하게 사용된다. Spring Cloud Config는 클라이언트 애플리케이션들이 공통된 설정 정보에 쉽게 접근할 수 있도록 도와주며 설정 변경이 필요할 때 각 서비스를 수정하지 않고도 실시간으로 반영할 수 있게 한다. 주요 개념Spring Cloud Config Server : 구성 데이터를 저장하고 제공하는 서버이다. 서버는 일반적으로 Git, 파일 시스템, SVN과 같은 외부 저장소에 저장된 설정 파일을 읽어와 클라이언트 애플리케이션에 제공한다.Spring ..

개발이론/Spring 2024.11.12

JDK Dynamic Proxy vs CGLIB Proxy

프록시(Proxy) 패턴이란?프록시는 클라이언트가 특정 대상(타깃)에 접근할 때 그 접근을 제어하거나 부가 기능을 제공하기 위해 중간에 위치한 객체이다. 클라이언트는 실제 타깃이 아닌 프록시를 통해 작업을 수행하며 프록시는 타깃 객체에 메서드 호출을 위임한다.프록시 패턴은 주 기능 외 부가 기능(예: 로깅, 보안, 트랜잭션 관리)을 추가할 때 사용된다. JDK Dynamic Proxy와 CGLIB Proxy는 Java에서 프록시를 구현하는 두 가지 대표적인 방식이다. JDK Dynamic Proxy특징 : JDK Dynamic Proxy는 인터페이스 기반의 프록시를 생성한다. 런타임 시 인터페이스를 구현하는 프록시 객체를 동적으로 생성해 클라이언트와 타깃 객체 사이의 중간 역할을 한다.작동 방식 : ja..

개발이론/JAVA 2024.11.12

서블릿과 스프링의 개요 및 관계

서블릿(Servlet)과 스프링(Spring)은 Java 기반 웹 개발에서 중요한 요소이다. 두 기술은 서로 다른 목적과 특성을 가지고 있으며 특히 스프링 프레임워크는 서블릿을 기반으로 동작한다. 서블릿의 역할과 배경서블릿은 서버에서 웹 콘텐츠를 동적으로 생성하고 클라이언트(주로 브라우저)와의 요청과 응답을 처리하는 Java 기반 기술이다. 서블릿은 클라이언트 요청을 받아 처리하고 응답을 반환하는 역할을 하며 Java Enterprise Edition (Java EE) 환경에서 실행된다. 서블릿의 탄생 배경초기 웹 애플리케이션은 HTML로 작성된 정적인 페이지를 전달하는 방식이었지만 점차 동적 데이터 처리의 필요성이 생기면서 CGI(Common Gateway Interface) 기술이 도입되었다. 그러나..

개발이론/Spring 2024.11.05

Spring Boot와 AWS를 이용한 이미지 업로드 및 최적화

이미지 업로드 방식Multipart File 방식설명 : Spring MVC에서 제공하는 MultipartFile 인터페이스를 이용해 파일을 서버에 전달하고 이를 임시 디스크에 저장한 뒤 S3에 업로드하는 방식이다장점 : 일반적이고 구현이 간단하며 업로드 성공률이 높다단점 : 서버 디스크를 사용하여 대용량 파일 업로드 시 서버에 부하가 크며 제한된 디스크 용량으로 인해 오류가 발생할 수 있다. 대량 업로드 시 CPU 사용량과 Garbage Collection의 부하도 높아질 수 있다Stream 방식설명 : 클라이언트가 서버에 파일을 스트림 형태로 전달하면 서버가 S3에 바로 전송하는 방식이다. 이 방식은 파일을 저장하지 않고 바로 스트리밍하여 S3에 전송하기 때문에 디스크 사용을 줄인다장점 : 서버에 부..

개발이론/Spring 2024.11.04

월급쟁이 재테크 상식사전

책 후기 : 월급쟁이 재테크 상식사전이 책은 월급을 받는 직장인으로서 재테크를 시작하려는 사람이게 딱 맞는 가이드라고 생각된다. 제목처럼 재테크에 대한 상식을 사전 형식으로 다루고 있어서 종종 필요하거나 궁금한 내용을 다시 찾아볼 수 있는 구조라서 좋은 것 같다. 재테크의 기본 개념부터 부동산, 주식, 연금, 세금 절약법까지 다양한 주제를 다루고 있다. 복잡한 용어나 이론 대신 쉽게 이해하기 쉬운 언어와 표현으로 설명하고 있으며 현실적인 예시와 사례를 들어서 이해를 돕고 있다. 그래서 초보자도 부담 없이 읽고 따라갈 수 있다. 추천 포인트실생활에서 실천 가능한 팁 : 거창한 투자보다는 현실적인 조언과 실천 가능한 방법을 소개한다.재테크 상식을 한눈에 : 자주 찾는 정보를 사전처럼 쉽게 다시 찾아볼 수 있..

2024.11.03

@Transactional 어노테이션 롤백 동작 방식

@Transactional 어노테이션은 Spring 프레임워크에서 트랜잭션 처리를 간소화하고 자동화하기 위해 사용된다. 이 어노테이션이 선언된 메서드에서 예외가 발생하면 트랜잭션을 롤백한다. 그러나 모든 예외가 롤백되는 것은 아니며 기본적으로 롤백 범위는 특정한 예외 유형에 따라 결정된다.   기본 롤백 정책Checked Exception (체크 예외)Exception을 상속하지만 RuntimeException을 상속하지 않은 예외는 기본적으로 롤백되지 않는다예) IOException, SQLException 등Unchecked Exception (언체크 예외)RuntimeException 및 그 하위 클래스들은 기본적으로 롤백된다예) NullPointerException, IllegalArgumentE..

개발이론/Spring 2024.10.30

@Transactional 어노테이션 롤백이 동작하지 않는 경우

업무를 진행하는 중 @Transactional 어노테이션이 예상대로 롤백되지 않는 경우가 발생하였다. 스프링에서 트랜잭션 매니저 미설정으로 발생한 이슈로 금방 해결하긴 했지만 겸사겸사 그 외 발생할 수 있는 상황에 대해 찾아보고 정리해본다. 프록시 메커니즘으로 인한 문제 (자기 호출)Spring은 기본적으로 프록시 패턴을 사용해 @Transactional을 적용한다. 즉, 트랜잭션 처리는 AOP 프록시 객체에서 관리된다.따라서, 클래스 내부에서 자기 자신의 메서드를 호출할 경우 프록시 객체가 아닌 직접 호출되므로 트랜잭션이 적용되지 않는다.해결책메서드를 다른 빈에서 호출하도록 리팩토링한다또는 AspectJ를 사용한 방식으로 트랜잭션을 설정한다인터페이스가 없는 클래스에서 호출하는 경우, proxy-targ..

개발이론/Spring 2024.10.29

트랜잭션의 메커니즘

트랜잭션이 필요한 이유트랜잭션이 없다면 예를 들어 계좌이체와 같은 중요한 작업 도중 오류가 발생한다면 다음과 같은 문제들이 생길 수 있다.출금은 되었으나 입금이 안 된 경우입금은 되었으나 출금이 안 된 경우둘 다 처리되지 않은 경우 (데이터 불일치)트랜잭션은 이러한 중간 상태를 방지하고 작업을 원자성(Atomicity) 있게 처리한다. 즉, 모든 작업이 성공하거나 모두 실패하도록 보장해 데이터를 일관된 상태로 유지한다.트랜잭션의 동작 원리트랜잭션의 주요 속성 (ACID)Atomicity(원자성) : 모든 작업이 완료되거나 전혀 수행되지 않아야 한다Consistency(일관성) : 트랜잭션이 끝난 후에도 데이터는 항상 일관된 상태여야 한다Isolation(고립성) : 여러 트랜잭션이 동시에 수행될 때 서로..

Sharding, Clustering, Replication

클러스터링 (Clustering)클러스터링은 여러 서버를 하나의 그룹으로 묶어 동시에 운영함으로써 고가용성을 확보하는 기술이다. 이는 한 서버에 장애가 발생해도 서비스가 중단되지 않도록 하는 데 효과적이다.액티브-액티브 클러스터링여러 서버가 동시에 가동되어 모든 서버가 실제로 데이터를 처리한다장점서버 하나가 장애를 일으켜도 나머지 서버가 역할을 대신 수행해 서비스가 중단되지 않는다CPU와 메모리 자원을 효율적으로 활용하여 처리 성능이 향상된다단점모든 서버가 동일한 스토리지를 공유하므로 데이터 I/O에서 병목 현상이 발생할 수 있다여러 서버를 운영하므로 비용과 관리 부담이 증가한다액티브-스탠바이 클러스터링한 서버가 활성(액티브) 상태로 운영되고 다른 서버는 대기(스탠바이) 상태로 유지된다장점대기 서버가 평..

SQL Injection

SQL 인젝션(SQL Injection)의 개념SQL 인젝션은 웹 애플리케이션의 취약점을 이용하여 공격자가 SQL 쿼리문을 조작하는 기법이다. 웹사이트가 사용자 입력을 제대로 검증하지 않을 때 발생하며 이를 통해 공격자는 데이터베이스에 부적절한 접근을 시도할 수 있다. 대표적인 공격 결과는 데이터 유출, 권한 상승, 인증 우회 등이 있다. SQL 인젝션 공격 방식주로 로그인 폼, 검색창 등의 입력 필드에서 발생하며 의도치 않은 쿼리를 실행해 데이터를 탈취하거나 권한을 탈취하는 데 악용된다. SQL 인젝션의 피해 결과SQL 인젝션을 통해 공격자는 다음과 같은 결과를 유도할 수 있다데이터 유출 : 개인정보, 금융 정보 등 중요한 데이터에 접근권한 상승 : 일반 사용자가 관리자 권한을 획득데이터 변조 및 삭제..

개발이론/CS 2024.10.22

Scale-Up vs Scale-Out, SPOF 정리

스케일 업 (Scale-Up)정의 : 단일 서버나 하드웨어 장비의 성능을 향상시키는 방식이다. CPU, 메모리, 스토리지 등 기존 장비의 스펙을 업그레이드한다.장점설계 및 관리가 단순하여 기존 인프라에 쉽게 적용된다네트워크 비용이 적게 든다 (별도의 서버 간 연결이 필요 없음)물리적 공간과 전력 소모를 절약한다단점성능 확장의 한계 : 한 장비의 성능을 무한정 올릴 수는 없다비용 비효율성 : 업그레이드할수록 가격이 급등하지만 성능 향상은 비례하지 않는다단일 서버 장애 시 복구가 어렵고 서비스 중단 가능성이 증가한다사용 사례데이터 일관성이 중요한 데이터베이스 서버메모리 내 연산이 많은 애플리케이션 (예: ERP 시스템) 스케일 아웃(Scale-Out)정의 : 여러 대의 서버를 추가해 부하를 분산하는 방식이다..

개발이론/CS 2024.10.21
반응형