전체 글
-
DB) 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)데이터베이스 2025. 1. 20. 23:43
개요데이터베이스에서 트랜잭션을 처리하는 과정에서 발생할 수 있는 동시성 문제를 해결하기 위한 방법으로 베타적락, 낙관적락, 비관적락이 있습니다. 이 세 가지 방법은 데이터의 일관성과 무결성을 유지하기 위해 사용됩니다. 각각의 락 방식의 특징과 사용 케이스에 대해 자세히 설명하겠습니다.문제상황두 번의 갱신 분실 문제(Second lost updates problem)두 번의 갱신 분실 문제(Second lost updates problem)는 동시성 제어에서 발생하는 특정한 문제로, 여러 트랜잭션이 동시에 같은 데이터를 갱신할 때 일어납니다. 이 문제는 특히 데이터베이스 시스템에서 여러 사용자가 동시에 같은 데이터를 수정하려고 할 때 중요하게 고려됩니다. 문제의 개념두 번의 갱신 분실 문제는 두 개 이상의..
-
Spring) @Transactional 과 Database 의 LockSpring 2025. 1. 14. 22:55
개요 Spring Boot 개발을 시작할 때, 많은 개발자들이 특정 어노테이션을 별다른 생각 없이 사용하는 경향이 있습니다. @Controller, @Service, @Component, @Data 같은 어노테이션들은 마치 마법처럼 애플리케이션의 다양한 부분을 자동으로 연결해 주기 때문에, 초기에는 그 내부 작동 원리를 깊이 이해하지 않고도 원하는 기능을 구현할 수 있습니다. 이러한 편리함은 곧 @Configuration, @NoArgsConstructor 등 더 다양한 어노테이션을 실험하게 만듭니다. 이들을 사용하면서 "그냥 갖다 쓰면 잘 되네?"라는 생각을 하게 되는 경우가 많습니다. 특히, 데이터베이스 트랜잭션 관리에서는 @Transactional 어노테이션이 그러한 경우입니다. 많은 개발자들이 이..
-
Java) 클래스 파일과 바이트 코드Spring 2024. 11. 14. 21:08
개요자바 초보 개발자라면 클래스 로딩 메커니즘이 어떻게 작동하는지 그 전반적인 과정이 잘 보이지 않을 수 있습니다. 일반적으로 개발자는 실행 가능한 JAR 파일이나 애플리케이션의 진입점 클래스 이름을 JVM에 제공하게 되고, JVM은 이 정보를 바탕으로 해당 클래스를 찾아 실행합니다. 이때 애플리케이션에 필요한 모든 의존성도 클래스패스에 존재해야 하며, JVM은 이러한 의존성들 역시 찾아서 로드합니다. 하지만 자바 사양은 이러한 로딩 작업을 애플리케이션 시작 시 모두 수행해야 하는지, 또는 필요할 때마다 동적으로 로드해야 하는지에 대해 구체적인 규정을 두고 있지는 않습니다. 이 글에서는 이러한 클래스 로딩 메커니즘과 클래스 객체의 개념에 대해 살펴보겠습니다. 클래스 로딩 JVM을 실행 컨테이너로 바라보는..
-
Java) 컴파일, 인터프리터 그리고 자바CS 2024. 11. 10. 23:37
개요우리가 흔히 사용하는 프로그래밍 언어로 작성된 코드는 컴퓨터에게 어떤 의미로 다가갈까요? 우리가 작성한 코드, 즉 고급 언어는 인간에게는 이해하기 쉬운 형태지만, 컴퓨터는 이를 바로 실행할 수 없습니다. 그렇다면 이 코드가 컴퓨터가 이해할 수 있는 언어로 변환되는 과정에는 어떤 방법이 있을까요? 바로 컴파일과 인터프리터라는 두 가지 주요 방식이 존재합니다. 이번 글에서는 컴파일과 인터프리터가 무엇인지, 그리고 각 방식의 특징과 차이점을 알아보겠습니다. 컴파일컴파일은 고급 언어로 작성된 프로그램 코드를 컴파일러를 사용하여 한 번에 기계어(또는 중간 형태의 바이트코드)로 번역하는 방식입니다. 컴파일러는 소스 코드를 분석하여 최적화하고, 전체 코드를 한 번에 변환해 실행 가능한 파일(executable f..
-
Spring) 아키텍처(3) 모노리스 VS MSASpring 2024. 11. 8. 22:20
Monolithic ArchitectureMonolithic Architecture(모노리스 아키텍처)는 애플리케이션을 하나의 큰 단위로 구성하는 아키텍처 스타일입니다. 이 구조에서는 모든 기능이 단일 코드베이스 내에서 하나의 애플리케이션으로 빌드되고 배포됩니다. 일반적으로 웹 애플리케이션에서는 프론트엔드, 비즈니스 로직, 데이터베이스 계층이 모두 하나의 애플리케이션으로 구성됩니다.설명은 어렵지만 그냥 단순하게 Spring boot 뿐만 아니라 서버를 처음 개발하면 가장 먼저 개발하는 아키텍처 방식입니다.서버하나를 만들어서 해당 서버에서 Database, Nosql, MQ 등등 여러 구성체에 중심해서 전계해주는 서버입니다. 모놀리식 애플리케이션은 보통 다음과 같은 구조로 이루어져 있습니다:사용자 인터페..
-
Spring) 아키텍처(2) 소프트웨어 아키텍처란?Spring 2024. 11. 4. 20:16
개요지난글에서 모듈과 멀티모듈에 대해 공부해보았습니다.이번 글에서는 소프트웨어 아키텍처에 대해 알아보고 지난번에 공부한 멀티모듈의 기본개념을 활용하여 어느 아키텍쳐에 반영할것인지에 대한 작성을 해볼 예정입니다. 소프트웨어 아키텍처를 이해하고 있어야 하는 이유 저같은 주니어 개발자같은경우 서버를 개발하면 보통 기능구현에 대해 중점적으로 생각하지, 트레픽에 대해 생각해본적이 없었을것입니다. (저만 그럴수도) 예를들어 단순 게시판 기능을 만들더라도 이 게시판에 1000만명이 몰린다면?이러한 단순한 질문 하나에도 굉장히 "많은 처리 기술"이 존재합니다. 주니어를 넘으려면 이러한 문제를 이해하고 극복해 나가야할것입니다.여기서 문제는 회사에 소속해있기때문에 "많은 처리 기술"에 대해 혼자서 적용하면 이미 서버는 터..
-
Spring) 아키텍처(1) 모듈, 멀티모듈Spring 2024. 11. 2. 16:23
개요회사의 여러 프로젝트를 통해 다양한 개발 방식을 접해보았지만, 현재 진행 중인 서비스의 프로젝트는 체계적인 아키텍처가 부족하고, 일관된 개발 철학도 마련되어 있지 않은 상태입니다. 특히 MSA(Microservices Architecture)를 지향하고 있음에도 불구하고, 진정한 MSA의 장점을 살리지 못한 채 일관성과 원칙이 부족한 방식으로 운영되고 있어 개선이 필요하다고 느끼고 있습니다. 이번 기회를 통해 현재 서비스의 아키텍처 상태를 철저히 분석하고, 앞으로 나아가야 할 아키텍처의 방향을 명확히 설정하려 합니다. 이를 위해 먼저 아키텍처와 설계 원칙에 대해 심도 있게 공부하고, 이를 바탕으로 현 프로젝트에 필요한 설계 방향과 개선 방안을 정립하려고 합니다. 이러한 학습과 분석 과정을 통해 서비스..
-
Java) Checked Exception, Unchecked Exception 그리고 ErrorSpring 2024. 9. 1. 15:51
에러(Error)와 예외(Exception)의 차이에러(Error): JVM에서 발생하는 심각한 문제로 인해 애플리케이션이 실행을 계속할 수 없는 경우입니다. 예를 들어, 메모리 부족, 스택 오버플로우, 클래스 로딩 실패 등이 있습니다. 이러한 문제는 일반적으로 프로그래머가 복구할 수 없습니다.예외(Exception): 프로그램의 논리적 흐름에서 발생할 수 있는 문제이며, 프로그래머가 예외 처리(try-catch 구문)를 통해 복구할 수 있는 문제입니다. 예를 들어, NullPointerException, IOException 등이 있습니다.에러의 종류우선 에러에 따라 어떤 예외처리를 해야할지 알기위해 에러에 대한 종류에 대해 먼저 알아야 합니다.1. 컴파일 에러 (Compile-Time Error)정의..