Latest

데이터베이스 최적화

성능 병목 현상 분석하기 데이터베이스의 성능이 저하되는 것은 마치 교통 체증과 같다. 원인을 정확히 찾아서 이를 해결할 필요가 있다. 병목 현상이란? 시스템 전체의 성능이나 용량이 하나의 구성 요소로 인해 제한받는 현상. 데이터베이스에서는 주로 CPU, Memory, I/O, 네트워크에서 발생 * CPU Bound * 복잡한 연산, 정렬, 그룹핑을 처리하는 쿼리가 많을 때 발생

By 천명현

DB 비정규화, 인덱싱

비정규화 데이터베이스 비정규화는 데이터베이스의 성능 향상을 위해 데이터 모델에 의도적으로 중복을 허용하거나 통합하는 기법 💡아키텍처의 관점에서 일종의 성능과 안정성 사이의 Trade-Off로 볼 수 있다. 정규화를 통해 데이터의 일관성과 무결성을 높일 수 있지만, 분산된 데이터로 인해 조회 시 복잡한 Join연산이 필요할 수 있고, 성능이 저하될 수 있다. 비정규화를 고려해야 하는 경우

By 천명현

RDBMS와 데이터 모델링

RDBMS 관계형 데이터베이스(RDB)란 관계형 데이터 모델링에 기초를 둔 데이터베이스이다. 이러한 데이터베이스 시스템을 RDBMS라 부르고, 모든 데이터를 2차원 테이블 형태로 표현하는 데이터베이스이다. RDBMS는 테이블이라는 최소 단위로 구성이 되며, 테이블은 하나 이상의 열과 행으로 이루어져 있다. 엔티티 와 관계를 중심으로 데이터 모델링을 수행하는 관계형 데이터 모델을 2차원 테이블 형테의 데이터

By 천명현

동시성 제어 기법

현대의 데이터베이스 시스템은 여러 사용자가 동시에 데이터에 접근하고 수정하는 환경에서 활용됨. 이러한 다중 사용자 환경에서 데이터의 일관성과 무결성을 유지하기 위해서는 동시성 제어가 필수적임 백엔드의 동시성 문제들 * 경쟁 상태(Race Condition) * 둘 이상의 스레드나 프로세스가 공유 데이터에 동시에 접근하여 값을 변경하려고 할 때, 실행 순서에 따라 결과가 예상과 다르게 나타나는 현상

By 천명현

데이터 무결성과 트랜잭션 관리

이번주는 데이터 무결성과 이를 지키는 방법에 대하여 학습하였다. 왜 데이터 무결성이 중요한가? 우리가 매알 사용하는 서비스들의 핵심에는 데이터가 있다. 이 데이터들이 정확하지 않거나 일관성이 떨어진다면? 잘못된 상품이 배송되거나 계좌 잔액이 맞지 않는 끔찍한 상황이 발생할 수 있다. 데이터 무결성이란, 이처럼 데이터의 정확성, 일관성, 유효성을 유지하는 것을 의미한다. 무결성이 보장된 데이터는

By 천명현

스프링 트랜잭션

💡데이터베이스의 트랜잭션 관련 내용은 알고 있다고 가정하고, AOP와 관련하여 스프링의 트랜잭션 구현에 관한 내용을 설명합니다. 스프링에서는 어노테이션 방식으로 트랜잭션 처리를 지원한다. @Transactional을 선언하여 사용하는데, 클래스 또는 메서드 위에 해당 어노테이션을 붙이면, 트랜잭션 기능이 적용된 프록시 객체가 생성되며, 트랜잭션 성공 여부에 따라 Commit 또는 Rollback작업이 이루어진다. 만약 이러한 선언적 트랜잭션방식을 활용하지

By 천명현

AOP

관점 지향 프로그래밍 (Aspect Oriented Programming)은 횡단 관심사의 분리를 허용함으로써 모듈성을 증가시키는 것을 목적으로 두는 프로그래밍 패러다임이다. AOP는 완전히 새로운 프로그래밍 패러다임이 아닌, 기존의 객체 지향 프로그래밍 패러다임을 보완, 확장하기 위한 패러다임이다. 관심의 분리 애플리케이션을 개발하다 보면 로깅, 보안, 트랜잭션 관리, 예외 처리 등과 같이 여러 모듈이나 계층에서 반복적으로

By 천명현

의존성 주입과 BeanFactory

이번 주차에서 공부할 내용은 의존성 주입과 BeanFactory에 관련된 내용이다. 의존성 주입 의존성 주입에 대하여 먼저 의존성 주입에 대하여 알아보면, 하나의 객체가 다른 객체의 의존성을 외부로부터 제공받는 디자인 패턴을 말한다. DI(Dependency Injection) 패턴을 사용하는것에 대한 장점으로는 * 결합도 감소 * 코드 재사용성 향상 * 테스트 용이성 증가 * 유지보수성 향상 * 가독성 향상 등의 장점이

By 천명현

필터, 세션, 리스너

우리가 스프링으로 웹 어플리케이션을 구축할때, 어떻게 구현되어 있는지는 잘 모르지만 꽤 자주 가져다 쓰고, 많이 만나게 되는 요소들이 존재한다. 그들중 필터, 세션, 리스너는 스프링이 처리해주는 대표적인 기능들중 3개이다. 필터 필터는 요청을 실제로 서블릿이 받아 처리하기 전, 요청의 전처리과정을 수행하고, 해당 시점에 특정 기능을 수행하기 위해 존재한다. 그림으로 살펴보면 다음과 같다.

By 천명현

JVM 스레드 모델

지난 시간에는 서블릿의 세부 구현 사항을 확인하며 소켓 레벨의 Raw Message를 HTTP프로토콜로 해석하여 서블릿에게 요청의 처리를 위임하는 과정을 구현하여 보았다. 이번 시간에는 다음과 같은 사항을 다루어볼 것이다. 멀티쓰레드 모델 기존에 작성한 서블릿 코드의 경우 싱글쓰레드로 동작하며 요청을 listen하는 형태로 동작하였다. 한명이 접속하여 기능을 사용하는 경우 큰 문제가 발생하지 않지만, 문제는

By 천명현

서블릿 Deep Dive 해보기

서블릿은 웹 서비스환경에서 요청을 처리하는 중심이 되어 백엔드의 엔진과 도 같은 존재라고 할 수 있다. 본 포스트에서는 서블릿 컨테이너의 역사와 핵심 원리 그리고 Bottom-Level의 구현에 대해 알아보고, Spring Container와의 연관성과 Spring Web 환경에서 어떤 역할을 수행하는지를 탐색해볼 것이다. 서블릿의 소개 java EE와 서블릿 Servlet이라는 개념은 java EE(java enterprise edition)

By 천명현