2025/10 11

[자료구조] B-Tree

B-Tree는 I/O에 효율적인 자료구조로 가장 많이 사용된다.왜 효율적인 자료구조인지 알아보자. B-Tree 계열을 알기 위해서는 (B+Tree, B*-Tree, ...)우선적으로 B-Tree의 기원인 BST를 알아야한다 BST(Binary Search Tree)이진 탐색 트리로이진트리의 특성은 자식을 0, 1, 2개 중 하나를 가진다는 것이다 하지만 이것의 최악의 구조에는 다음과 같은 경우가 존재한다위와같이 잇다고했을 때가장 밑단의 자식 노드에 접근하려고 하면,최악의 경우로 취급된다. ( O(N)만큼의 시간 복잡도 요구됨 ) 최악의 경우에는 위와 같이 접근을 해야한다. 내부적으로 BST를 스스로 정렬한 구조인 AVL이나 red black tree 등이 존재하는데,이것들 보다 더 많은 데이터를 포함하..

[CS/운영체제] 뮤텍스와 세마포어

하나의 CPU에서 여러 프로세스나 스레드가 동시 실행되는 환경에서는 공유 자원에 대한 동기 접근이 발생한다. 이러한 상황에서는 Race Condition과 같은 동시성 문제가 쉽게 발생하며, 시스템 오동작이나 데이터 불일치를 초래할 수 있다. 따라서 Critical Section(임계영역)에 대한 적절한 접근 제어는 필수적이며, 이를 위한 대표적인 기법이 바로 뮤텍스와 세마포어이다.뮤텍스(Mutext)Mutual Exclusiond -> Mutex 뮤텍스는 말 그대로 상호 배제(Mutual Exclusion)를 위한 동기화 원시(primitive)다. 공유 자원에 접근하려는 스레드는 반드시 락(lock)을 획득해야 하며, 락을 얻은 스레드만이 임계영역에 진입할 수 있다.락은 boolean 상태(locke..

CS/운영체제 2025.10.28

GitHub Actions로 정적 문서 사이트 배포 자동화

우리가 어떤 웹사이트에 접속하기 위해서는 웹 호스팅 서비스가 필요하다. Github Pages는 Github에서 제공하는 무료 정적 웹사이트 호스팅 서비스로,개인 레포지토리가 정적 파일로만 구성되어있다면, 사이트를 배포하기에 적합하다.범용성 높은 GitHub Pages 어떤 저장소든 정적 웹사이트로 호스팅할 수 있으며, GitHub Actions를 결합하면 코드 푸시만으로 배포가 자동화가 가능하다.그래서 이번 글에서는 이러한 자동 배포 파이프라인을 단계별로 구축해보았다. 설계 나는 document 폴더에 있는 작성 md 파일들을 github pages를 이용하여 하나의 게시글로 정리하는 작업을 하고자 다음과 같은 프로세스를 설계했다.┌─────────────────────────────────────┐..

카테고리 없음 2025.10.23

[CS/운영체제] CPU 스케줄링 알고리즘

일전에도 정리했었지만 우리의 CPU(중앙처리장치)는 프로세스를 하나씩 처리한다.동시에 처리하는 것 같아보이지만,실제로는 아주 빠른 속도로 특정 속도 별로 작업을 하기 때문에 동시에 일어나는 것처럼 보이는 것이다.그러면 이런 실행 순서에 대한 할당은 어떻게 결정하는 것인지 알아보자.CPU 스케줄링이란?CPU 스케줄링은 운영체제(OS) 의 핵심 기능 중 하나로,한정된 CPU 자원을 시스템 내의 여러 프로세스(또는 스레드) 들에게 공정하고 효율적으로 할당하는 정책 및 과정이다.이때 CPU 스케줄링은 실행 대기 중인 프로세스(준비 큐, Ready Queue) 중에서 다음에 어떤 프로세스에게 CPU를 할당할지를 결정한다. 목적앞서 언급했듯이 여러 프로세스들이 돌아가기 위해선 공정하고 효율적으로 할당하는 과정이 C..

CS/운영체제 2025.10.22

[CS/운영체제] 프로세스 관리와 통신

PCB(Process Control Block)우리의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다.하지만 사용자 입장에서는 CPU가 매우 많은 데이터를 동시에 빠르게 처리하는 것처럼 보인다.이는 CPU가 매우 빠른 속도로 여러 프로세스를 번갈아가며 실행하기 때문이다.즉, CPU가 짧은 시간 단위로 프로세스를 전환하면서 처리하기 때문에, 결과적으로 동시에 여러 작업이 수행되는 것처럼 보이는 것이다. 그렇다면 이러한 CPU에서 프로세스의 우선순위나 자원 배분 등을 어떻게 관리할 수 있을까?이를 위해 필요한 것이 바로 PCB(Process Control Block) 이다.운영체제는 빠르게 번갈아 수행되는 프로세스들의 실행 순서를 관리하고, 각 프로세스에 CPU 및 기타 자원을 효율적으로 배분한다.이때 ..

CS/운영체제 2025.10.14

[JPA] EntityManager와 트랜잭션의 관계

스프링 프레임워크에서 직접적으로 EntityManager를 조작하는 경우가 많지는 않다.일반적으로는 JpaRepository를 이용하기 때문에 직접적으로 데이터베이스에 대하여 작업하지는 않는다.그래도 @PersistenceContext 어노테이션을 통하여 EntityManager를 코드에 주입받아 사용을 하기도한다.EntityManager는 프록시스프링에서 @PersistenceContext 를 통해 주입받는 EntityManager는 실제의 EntityManager의 인스턴스가 아니라 프록시 객체이다.이 프록시 객체는 스레드 로컬(Thread Local)변수를 사용하여 각 트랜잭션 마다 서로 다른 EntityManager 인스턴스를 제공한다.@PersistenceContextprivate EntityM..

카테고리 없음 2025.10.14

[JPA/Hibernate] 매핑과 인덱스 테이블 설정하기

JPA를 통한 DB설계에서 최적화를 위해 다양한 설정을 하는 것을 확인할 수 있다. 이번에는 다양한 설정을 정리하기 위해 다음과 같은 시나리오를 가정한다. 이 서비스는 길드와 같이 특정 회원들이 모인 그룹이 존재하며,동일한 길드에 속한 회원들은 해당 길드 내 게시글을 자유롭게 조회할 수 있다. 또한 시스템은 각 회원이 특정 게시글을 읽었는지 여부를 확인할 수 있어야 한다.이를 기반으로 ERD를 설계하면 다음과 같이 작성할 수 있다. Entity 설계하기그리고 JPA를 통한 Entity를 설계해보자. 1. Post Entity@Entity@Table(name = "post")@Getter@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstruc..

카테고리 없음 2025.10.08

[SpringBoot] Spring MVC와 Spring WebFlux를 요청 처리 방식 비교해보기

Spring WebFlux에 대하여 알아보자 Spring WebFlux는 반응형 리액티브 시스템으로,스프링에서 나타난 리액티브 프레임 워크이다. Spring WebFlux에 대하여 알기 이전에, 우선적으로는Spring MVC에 대한 파악을 해야한다.Spring MVC의 기본기존의 Spring은 Web MVC 패턴을 기반으로 설계하여,개발자들이 POJO(Plain Old Java Object) 형태로 비즈니스 로직을 작성할 수 있도록 다양한 편의기능들을 제공해주었다.위의 대표적인 스프링 컨테이너에 대한 그림처럼,DispatcherServletContainer가 Spring의 가장 큰 핵심적인 요소이다.이 컴포넌트는 클라이언트의 모든 요청을 "중앙"에서 처리하고,적절한 컨트롤러로 위임하는 역할을 수행한다.즉..

[SpringBoot] 스프링에서의 Service 와 Bean의 차이점

스프링의 강점 중 가장 대표적인 것은,개발자가 모든 객체 생성을 일일이 관리하지 않아도 된다는 점이다. 스프링 컨테이너가 애플리케이션을 실행하면서 필요한 객체들을 알아서 생성해주고,서로 필요한 의존성을 연결해준다! 그렇다면 스프링이 객체를 인식하도록 만들어려면 어떻게하는 것인가? 대표적으로는 다음과 같은 두 가지 방식이 존재한다.명시적으로 등록하는 방법: @Configuration + @Bean자동으로 등록하는 방법: @Component, @Service, @Repository, @Controller 개발을 하다보면,1번의 기능도 자주 사용하고, 2번도 굉장히 편리하게 사용하지만,생각보다 별 의식 없이 기계적 학습으로만 사용하는 경우가 많다. 본격적으로 두 방식을 비교하기 이전에(사용해보기 이전에),먼..

[MsSQL] MsSQL의 기본 문법

MsSQLMsSQL이란 Microsoft에서 개발한 RDBMS(관계형 데이터베이스 관리 시스템)이다.데이터를 테이블(행과 열의 집합) 형태로 구성하고 관리하며,표준 SQL의 형식을 유지하기 때문에 MySQL과 큰 차이가 있지는 않다.주로 Windows OS에 최적화 (Linux와 docker에서도 동작 잘 됨)대규모 기업 환경에서 높은 성능과 안정성을 제공하며 복잡한 트랜잭션 처리에 강점을 보이기 때문에 특히 보안을 중시하는 기업에서 많이 사용하는 편SSMS(SQL Server Management Studio)라는 강력한 그래픽 관리 도구를 제공일반적으로 유료로 제공기본문법표준 SQL을 준수하기 때문에,MySQL과 굉장히 비슷하다MsSQL만의 문법이라기보다는,그냥 전반적으로 문법에 대하여 정리해보겠다WI..

백엔드/Database 2025.10.02