전체 글 163

@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

CORS 개요 및 동작 방식

CORS(교차 출처 리소스 공유, Cross-Origin Resource Sharing)는 웹 애플리케이션이 다른 출처의 리소스에 접근할 때 보안을 유지하면서 이를 허용할 수 있도록 해주는 중요한 웹 표준이다. 주로 동일 출처 정책(SOP, Same-Origin Policy)과 함께 설명된다.  동일 출처 정책(SOP, Same-Origin Policy)동일 출처 정책은 웹 보안 모델로 웹 페이지가 자신과 동일한 출처(origin)의 리소스에만 접근할 수 있도록 제한하는 방식이다. "출처"는 URL의 프로토콜, 도메인, 그리고 포트 번호로 정의되며 이 세 가지가 모두 동일해야만 "동일 출처"로 간주된다. SOP는 악의적인 사이트가 다른 출처의 중요한 데이터를 무단으로 가져가지 못하도록 하는 강력한 보안 ..

개발이론/Web 2024.10.16

JVM Stack & Heap

자바와 C/C++의 차이점C/C++은 네이티브 코드로 컴파일되며, 운영체제(OS)와 CPU 아키텍처에 맞게 컴파일된 코드만 특정 플랫폼에서 실행된다. 예를 들어 리눅스에서 컴파일된 C/C++ 프로그램은 윈도우에서 바로 실행되지 않는다. 따라서 각 플랫폼에 맞는 컴파일 과정이 필요하며 이를 "타겟 플랫폼 컴파일"이라고 한다.반면, 자바는 자바 소스 코드를 자바 컴파일러(javac)로 컴파일하면 운영체제에 의존하지 않는 바이트코드(Bytecode)가 생성된다. 이 바이트코드는 다양한 운영체제에서 실행될 수 있다. 이처럼 자바는 JVM(Java Virtual Machine)을 통해 플랫폼 독립성을 갖추게 된다.  JVM(Java Virtual Machine)의 역할자바 바이트코드는 JVM이라는 가상 머신에서 ..

개발이론/JAVA 2024.10.14

언젠가 우리가 같은 별을 바라본다면

언젠가 우리가 같은 별을 바라본다면차인표 지음 최근 딱딱한 프로그래밍 개발서적이나 자기계발서만 읽다보니 잠깐 한 권 정도는 편하게 읽을 만한 책을 고민하게 되었다.마침 베스트셀러로 계속 눈에 띄어 궁금했었고 저자가 "차인표" 배우라는 부분에서 흥미가 생겨 읽어 보게 되었다. 소설이라 천천히 여유있게 읽어볼 생각이었는데 읽기도 쉽고 몰입이 되어 거의 3시간만에 다 읽게 되었다.처음에는 잔잔하고 여유로운 배경과 등장인물의 묘사가 이루어졌고중간부터는 사건이 진행되면서 긴장감이 느껴졌고 마지막에는 안타까움으로 마무리 되었다. 이 책은 역사적 사실을 바탕으로 한 아름답고 안타까운 영화 같은 소설이다.결코 잊지 말아야할 역사에 대해 다시 되새기게 해주었고 용서라는 의미에 대해 다시 생각하게 해주었다. "용서를 빌지..

2024.10.12

원씽 (The One Thing)

"원씽" 은 우리가 삶과 일에서 진정으로 중요한 '한 가지'에 집중할 때 최고의 성과를 낼 수 있다는 메시지를 전달하고 있다. 시간 관리와 생산성에 대해 기존의 접근 방식에서 근본적인 변화가 필요함을 이야기하고 있으며 우리의 주의가 분산되는 현대 사회에서 무엇에 집중해야 할지를 고민하게 만드는 책이다. 핵심 메시지책에서 가장 중요한 주제는 '목적의식'과 '우선순위' 이다. 많은 일들을 조금씩 하는 것이 아니라 가장 중요한 한 가지에 집중해서 그 일에 아주 큰 성과, 결과를 얻는 것이 성공하는 방법이라고 표현하고 있다. 이 과정에서 도미노 효과 라는 개념을 소개하면서 집중해서 만든 하나의 성과가 다른 일들을 수월하고 또는 필요하지 않게 만들 것이며 이런 것들이 쌓여 결국 큰 목표를 이룰 수 있다는 점을 설..

2024.10.06

요즘 우아한 개발

요즘 우아한 개발 이란 책은 우아한형제들(배달의민족)의 실무 경험을 바탕으로 한 인사이트를 담은 책이다. 이 책은 주니어 및 중급까지 폭넓은 범위의 개발자들을 대상으로 하고 있으며 실제 업무에서 겪는 다양한 문제 상황과 이를 해결하기 위한 경험 등을 상세하게 이야기 하고 있다. 주요 포인트실무 중심의 내용 : 단순한 이론서가 아닌 실무에서 겪을 수 있는 다양한 경험을 기반으로 한 내용이라 실제 프로젝트에서 적용할 수 있는 팁과 노하우가 많이 작성되어 있고 그동안 우아한형제들에서 있었던 경험을 생생하게 엿볼 수 있었다.개발 문화와 협업 관련 내용 : 기술적인 내용뿐만 아니라 개발자 간의 협업, 코드리뷰, 테스트 작성 등 개발 문화에 대한 이야기도 깊이 다루고 있다. 다양한 개발 문화를 이해하고 싶은 사람들..

2024.10.01

육각형 개발자

최범균 저자의 육각형 개발자 라는 책은 소프트웨어 개발자가 어떻게 지속적으로 성장하고 자기계발을 할 수 있을지 고민에 대한 해답, 힌트를 얻을 수 있는 책이다.이 책에서 개발자는 기술적 역량뿐만 아니라 비기술적 역량, 인간관계, 커뮤니케이션 능력, 문제 해결 능력 등 다양한 측면에서 갖춰야할 역량을 육각형 이라는 도형으로 비유하여 설명하고 있다. 이 책에서 다루는 내용효율적으로 기술을 학습하고 적용하는 방법소프트웨어 가치를 이해하고 유지보수 비용을 낮추는 방법이해하기 좋은 코드를 작성하는 법높은 응집도와 낮은 결합도 원칙으로 설계하는 방법변경 비용을 낮추는 기본적인 리펙터링 기법테스트 코드의 중요성과 자동화된 테스트, TDD의 필요성아키텍처의 중요성과 패턴의 유용함업무 전반을 관리하기 위해 필요한 내용협..

2024.10.01

JVM의 Garbage Collector 정리

JVM과 Garbage Collector (GC) 개요JVM (Java Virtual Machine)자바 애플리케이션이 실행되는 가상 머신 환경메모리 관리와 GC를 통해 프로그램의 효율적 메모리 사용을 보장Garbage Collector (GC):힙(Heap) 메모리에서 더 이상 참조되지 않는 객체(가비지)를 자동으로 식별하고 제거하여 메모리 누수를 방지하고 메모리 자원을 재사용 가능하게 함GC는 수동 메모리 관리의 번거로움과 오류 가능성을 줄여줌   JVM 메모리 구조Heap 메모리 : 프로그램에서 생성된 객체가 저장되는 영역으로 크게 Young Generation과 Old Generation으로 나뉨Young GenerationEden 영역 : 새로운 객체가 최초로 생성되는 영역Survivor 영역 ..

개발이론/JAVA 2024.09.24

Latency와 Bandwidth의 정의 및 관계

Latency(지연 시간)와 Bandwidth(대역폭)는 네트워크 성능을 측정하는 데 중요한 두 가지 요소이다. 이 둘은 서로 밀접하게 관련되어 있지만 각각 다른 측면을 나타낸다.Latency (지연 시간)정의 : 데이터가 한 지점에서 다른 지점으로 전송되는 데 걸리는 시간이다. 단위는 일반적으로 밀리초(ms)로 표현된다.예시 : 웹사이트에서 버튼을 클릭했을 때 화면이 변화하거나 정보가 표시되기까지 걸리는 시간영향 요소 : 물리적인 거리, 네트워크 장비의 성능, 데이터 처리량, 네트워크 혼잡 등이 지연 시간에 영향을 미친다.Bandwidth (대역폭)정의 : 네트워크에서 일정 시간 동안 전송할 수 있는 최대 데이터 양을 의미한다. 보통 초당 메가비트(Mbps)나 기가비트(Gbps)로 표현된다.예시 : 가..

개발이론/CS 2024.09.20

TLS(Transport Layer Security)

TLS의 도입 배경네트워크 통신에서 TLS가 도입된 이유는 기존의 네트워크 프로토콜들이 다음과 같은 여러 가지 보안 문제를 가지고 있기 때문이다. 데이터 도청 (Eavesdropping)네트워크 상의 데이터를 전송하는 동안 그 데이터는 중간에 있는 라우터, 스위치, 네트워크 장비들을 거쳐간다. 이러한 장비들에서 데이터를 쉽게 볼 수 있으며 누구나 데이터를 훔쳐볼 수 있다예를 들어, 패킷을 중간에서 감청하여 사용자의 로그인 정보나 개인 정보를 얻을 수 있다위장 공격 (Man-in-the-Middle Attack)공격자가 중간에 위치하여 사용자와 서버 간의 통신을 가로채고 사용자가 원하는 대상 서버인 척하면서 데이터를 주고받는 공격이다이로 인해 사용자는 자신이 신뢰하는 서버와 통신한다고 생각하지만 실제로는 ..

개발이론/Web 2024.09.19

Forward Proxy와 Reverse Proxy의 차이

프록시(Proxy) 서버의 기본 개념프록시 서버는 클라이언트와 서버 사이에서 중계기 역할을 하며, 클라이언트의 요청을 받아 서버에 전달하고 서버의 응답을 다시 클라이언트에게 전달하는 역할을 한다.프록시 서버는 캐시를 통해 자원을 관리하고 클라이언트의 요청과 응답을 확인하여 데이터 조작이 가능하다.프록시 서버는 네트워크 트래픽을 줄이고 응답 속도를 향상시키며 보안성과 익명성을 제공한다.  포워드 프록시 (Forward Proxy)포워드 프록시는 클라이언트가 서버에 직접 연결하지 않고 프록시 서버를 통해 요청을 전달하는 방식주요 기능 및 특징클라이언트의 대리자 : 클라이언트의 요청을 대신 서버로 전달하고 서버의 응답을 받아 클라이언트에게 전달합니다. 클라이언트의 IP 주소를 숨기기 때문에 익명성이 보장된다캐..

개발이론/Web 2024.09.19
반응형