분류 전체보기

데이터베이스에서 사용되는 트랜잭션은 기본 동작의 단위가 되므로 중요한 개념이다. 트랜잭션에 대해 알아보자.트랜잭션 (Transaction)이란?단일한 논리적인 작업 단위, 즉 더이상 분할이 불가능한 업무처리 단위이다.데이터베이스에서 트랜잭션의 의미를 적용해본다면 한꺼번에 수행되어야 할 일련의 연산 모음집이라고 생각하면 되겠다. SQL문을 실행할 때, 일부의 쿼리만 성공한다면 DB에 실제로 반영되는 일은 일어나지 않는다. 하나의 SQL 쿼리문이 트랜잭션이기 때문이다. 커밋 (Commit)지금까지 작업한 내용을 DB에 영구적으로 저장한다.트랜잭션을 종료한다. 롤백 (Rollback)지금까지 작업들을 모두 취소하고 트랜잭션 이전 상태로 되돌린다.트랜잭선을 종료한다. 자동 커밋 (Autocommit)각각의 SQ..
데이터베이스에서 인덱스는 성능 향상의 열쇠라고 할 수 있을 정도로 핵심적인 요소 중 하나이다. 인덱스가 무엇이고, 어떻게 적용되어 있는지 알아보자.인덱스란?추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조 인덱스를 쓰는 이유만약 다음과 같은 기본적인 조회 쿼리문이 있다고 해보자.SELECT *FROM UESRSWHERE NAME = "GAMJA";WHERE문을 통해 NAME 열을 조회할 때, 만약 단순히 완전탐색(Full scan)을 한다면 데이터의 개수만큼의 시간이 걸릴 것이다. 즉 데이터의 개수가 N개라면 시간복잡도는 O(N)이 된다. 이는 데이터가 많아지게 되면 쉽게 부하가 올 수 있을 것이다. 이를 인덱스를 통해 좀 더 효율적인 방법으로 개선한다..
· PS
SQL 코딩테스트를 준비하며 학습한 내용들을 정리한 글이다.SQL 쿼리문 순서우선 쿼리 문법의 작성 순서와 실행 순서는 다음과 같다.작성 순서SELECT - FROM - WHERE - GROUP BY - HAVING - ORDER BY실행 순서반면 실제 실행 순서는 작성 순서와는 조금 다르다.FROM - WHERE - GROUP BY - HAVING - SELECT - ORDER BY 작성 순서와 실행 순서가 다름에 따라 주의해야 할 것은 ALIAS를 사용할 때다. 두 경우를 살펴봤을 때, 좌측 쿼리문은 문제 없이 정상적으로 동작한다. ORDER BY가 SELECT문 뒤에 실행되기 때문이다. 하지만 우측 쿼리문의 경우 오류가 발생한다. WHERE문이 SELECT문보다 먼저 실행되어 WHERE문이 실행될 ..
데이터베이스 정규화는 그 정도에 따라 같은 양의 데이터를 보다 적은 비용으로 관리할 수 있게 해준다. 정규화에 대해 알아보자.정규화란?정규화란 데이터 중복과 insertion, update, deletion anomaly를 최소화하기 위해 일련의 normal forms(NF)에 따라 relational DB를 구성하는 과정이다.  정규화의 목적1. 불필요한 데이터(data redundancy)를 제거하여 불필요한 중복을 최소화2. 삽입/갱신/삭제 시 발생할 수 있는 각종 이상 현상(Anomaly)를 방지하기 위해서 테이블의 구성을 논리적이고 직관적으로 한다.  정규화 과정정규화는 실제로 6NF까지 존재하지만, 보통 3NF까지 도달하면 '정규화 됐다'라고 표현하며 BCNF 이후의 단계는 실무에서는 많이 사..
2024.01.09 - [CS 지식/Operating System] - [OS] Process Scheduling (프로세스 스케줄링) 앞선 글에서 프로세스 스케줄링에 대해서 알아보았다. 여느 것들과 마찬가지로 프로세스 스케줄링에도 여러가지 기법들이 존재한다. 어떤 것들이 있고 각각의 장단점을 살펴보자. FCFS (First-Come-First-Service) scheduling Non-preemptive scheduling → time quantum X Scheduling criteria 도착 시간 (ready queue) 먼저 도착한 프로세스가 우선순위를 가진다. 높은 자원 이용률을 가진다. batch systems에 적합하지만, interactive systems엔 적합하지 않다. 단점 Convoy..
· Web/Spring
Spring Cloud Gateway는 애플리케이션 실행 시 스프링부트에 내장되어 있는 Tomcat이 아닌 Netty 기반의 비동기 통신을 지원하는 형태의 웹 애플리케이션으로 실행된다. 분명 Spring Cloud Gateway 의존성을 추가해줬기 때문에 Netty로 실행되어야 하는데 여전히 Tomcat으로 실행된다... 간단하게 문제를 해결해보자. 문제 상황 환경 Java 17 SpringBoot 3.2.1 Spring Cloud 2023.0.0 gradle 분명 위와 같이 스프링부트 프로젝트를 생성할 때 Gateway dependency를 추가해준 후 프로젝트를 실행했지만, 아래와 같이 Tomcat이 애플리케이션을 구동한다. 뿐만 아니라 아래와 같이 Spring Cloud Gateway 라이브러리에 ..
운영체제는 프로세스를 효율적으로 가동시켜 작업 효율을 늘리기 위해 스케줄링 기법을 사용한다. 스케줄링이 무엇인지 알아보자. 배경 Multiprogramming (멀티 프로그래밍) 시스템에는 소수의 프로세서에 다수의 프로세스가 존재한다. 시스템은 많은 양의 프로세스를 최대한 효율적으로 프로세서에 할당하려고 하고, 결국 프로세서의 사용률을 최대한 증가시켜야 한다. 2가지 자원을 관리하는 측면에서 이를 살펴보자. 자원 관리 시간 자원 공유 (Resources for time sharing) 다수의 프로세스가 프로세서를 시간을 할당 받아 사용한다. (이 할당 받은 시간 단위를 time quantum 또는 time slice라고 한다.) 프로세스 스케줄링의 핵심이다. 공간 자원 공유 (Resources for s..
· Project
프로젝트 목표 및 내용 임의의 프로그램을 코드 최적화를 통해 실행 시간을 단축시키는 등 효율을 증가시킨다. 선정한 프로그램을 대상으로 profiling 과정을 통해 다단계 program optimization을 수행하고 결과를 분석한다. 결과 분석(profiling)은 linux 환경에서 gprof툴을 사용하여 진행한다. 직접 최적화를 단계별로 진행하며 각 최적화에 따른 수치 변화의 정도를 직접 확인한다. 최적화 선정 프로그램 이전에 리눅스 수업에서 과제로 작성했던 Monte-Carlo 시뮬레이터를 활용하였다. 멀티 쓰레드를 이용한 프로그램으로, 쓰레드 개수와 반복 횟수를 인자값으로 받아 실행된다. 복잡도를 늘리기 위해 여기에 몇 가지 기초 정렬 알고리즘을 추가하여 프로그램을 구성하였다. 코드는 아래 저..
말도 못하는 감자
'분류 전체보기' 카테고리의 글 목록