sagecode 57

[운영체제] 멀티스레딩 환경에서 발생하는 문제와 Deadlock을 피하는 방법

멀티스레딩은 CPU 자원을 효율적으로 활용하고 작업 성능을 높이는 데 유용한 기술이다. 하지만 여러 스레드가 동시에 자원에 접근할 수 있는 환경에서는 데이터 충돌, 교착 상태(Deadlock) 등 여러 문제가 발생할 수 있습니다.교착 상태의 조건과 이를 예방하기 위한 전략들을 정리해보자.멀티스레딩멀티스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다. 예를 들어 웹 요청을 처리할 때 새 프로세스를 생성하는 대신 스레드를 사용하는 웹 서버의 경우 훨씬 적은 리소스를 소비하며, 한 스레드가 중단되어도 다른 스레드는 실행 상태일 수 있기 때문에 중단되지 않은 빠른 처리가 가능하다.멀티스레딩 환경에서 발생할 수 있는 문제1. 동기화..

OS 2025.06.08

[Network] HTTP/1.1과 HTTP/2의 차이는 무엇일까?

HTTP/1.1HTTP/1.0에서 발전한 것이 바로 HTTP/1.1이다. 매번 TCP 연결을 하는 것이 아니라 한 번 TCP 초기화를 한 이후에 keep-alive라는 옵션으로 여러 개의 파일을 송수신할 수 있게 바뀌었다. 한 번 3-way-handshake가 발생하면 그다음부터 발생하지 않는다. 1.1의 헤더에는 쿠키 등 많은 메타데이터가 들어있고 압축이 되지 않아 무겁다. 또한 직렬처리로 인해 순차적으로 데이터를 보낼 때, 한 번에 하나씩 보내므로 HOL Blocking이 발생한다. 네트워크에서 같은 큐에 있는 패킷이 지연되는 현상을 말한다. HTTP/2HTTP/2는 지연시간을 줄이고 응답시간을 더 빠르게 할 수 있다. 멀티플렉싱, 헤더 압축, 서버 푸기, 요청의 우선순위 처리를 지원한다.멀티플렉싱멀..

Network 2025.06.08

[Spring] MVC, MVP, MVVM의 차이는 무엇일까?

Spring 프레임워크에서 주로 사용되는 MVC 구조는 익숙하지만, 프론트엔드나 모바일 개발 환경에서는 MVP, MVVM 구조도 자주 등장한다. 각 구조는 어떤 차이를 가지고 있고, 어떤 상황에서 각 구조를 사용하는걸까? 1. MVC (Model-View-Controller) 패턴애플리케이션의 구성요소를 Model, View, Controller 3가지 역할로 구분하여 개발 프로세스에서 각각의 구성 요소에만 집중해서 개발할 수 있다. 구성 요소(1) 모델(Model)모델은 애플리케이션의 데이터인 데이터베이스, 상수, 변수 등을 뜻한다. 뷰에서 데이터를 생성하거나 수정하면 컨트롤러를 통해 모델을 생성하거나 갱신한다. (2) 뷰(View)뷰는 사용자에게 보여지는 인터페이스 요소, 화면을 뜻한다. 모델이 가지..

SPRING 2025.06.07

[Shop Project] HTTP vs HTTPS, SSL인증서 생성하기(2)

HTTPS를 개발환경(Localhost)에서 적용하는 방법Self-signed SSL 인증서 만들기keytool -genkeypair -alias myshop -keyalg RSA -keystore keystore.p12 -storetype PKCS12 -storepass 123456 -validity 3650HTTPS 적용을 위해 테스트용 인증서를 만드는 명령어이다. Java의 keytool 명령어로 공개키와 개인키 쌍을 생성하고, 이를 keystore.p12라는 파일에 저장했다. 생성된 kestore.p12파일을 resource 폴더에 위치시키면 스프링 부트에서 HTTPS 설정에 사용된다.2. application.yml 설정 확인server: port: 8443 ssl: enabled: t..

[Shop Project] HTTP vs HTTPS, SSL인증서 생성하기 (1)

쇼핑몰 웹사이트를 개발하다 보면, 회원가입, 로그인, 결제 등 민감한 정보를 다루게 된다. 이 때 http://가 아닌 https://를 사용하는 것은 보안에 중요한 영향을 끼친다.HTTP와 HTTPS의 차이를 공부한 다음 쇼핑몰 프로젝트에 HTTPS를 적용해보도록 하겠다. HTTP란 무엇인가?HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버가 대화하는 방식을 정의한 규약이다. 브라우저가 서버에 요청(Request)을 보내고, 서버가 응답(Response)을 보내는 과정에서 사용된다. 처음에는 나도 '규약'이라는 단어가 너무 어색했다. 또한 실체가 없고 너무 추상적인 개념이라 조금 이해하기 어려웠다. 그래서 공부한 이후에 내가 이해한 방향으로 최대한 쉽게 설명해보도록..

[Shop Project] 전략 패턴(Strategy Pattern)을 활용한 결제 방식 구현

문제 정의 및 도입 배경쇼핑몰 프로젝트에서 Customer는 다양한 방식으로 결제할 수 있다.일반 카드 결제포인트 결제쿠폰 할인 결제이러한 다양한 결제 로직을 PaymentService 내부에서 모두 처리하게 되면조건문이 복잡해짐새로운 결제 방식 추가 시 기존 코드를 수정해야 함한 메소드에서 여러가지를 테스트하기 어려움따라서, 전략 패턴(Strategy Pattern)을 통해 결제 방식의 구현을 외부로 위임하여 결제 방식 구현에 확장성을 높이려고 한다.추후에 로그인 방식의 확장도 이 방법을 통해 활용할 수 있을 것 같다. Strategy Pattern을 이용한 다양한 결제 방식 구현public interface Payment { public void pay(int amount, Customer cu..

[Shop Project] 팩토리 메소드 패턴(Factory Method Pattern)을 활용한 주문 방식 분리

현재 상황 및 문제 정의쇼핑몰 프로젝트를 함에 있어 유저가 장바구니에 담아서 결제하는 경우, 상품 상세페이지 칸에서 직접 주문하는 경우 2가지로 방식을 나눌 수 있다. 모든 주문 방식을 하나로 처리하게 되면, 의존성이 커지게 된다. 또한, 결제 페이지까지 가게되면 공통된 부분들이 많으므로 팩토리 메소드 패턴을 이용해서 주문을 구현할 수 있다.장바구니 기본 주문즉시결제에 따른 개별 주문 Factory Method Pattern을 이용한 주문 방식 구현주문 방식에 맞는 Factory 구현public interface OrderFactory { Order createOrder(Customer customer, List products);}public class CartOrderFactory impleme..

[JAVA] 옵저버 패턴(Observer Pattern)이란?

옵저버 패턴이란?옵저버 패턴은 주체가 어떤 객체의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메소드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 주체(객체)와 옵저버public interface ISubject { public void registerObserver(IObserver observer); public void removeObserver(IObserver observer); public void notifyObservers(); public Object getUpdate(IObserver observer);}public interface IObserver { void update();}public class ConcreteSub..

JAVA 2025.05.23

[JAVA] 전략 패턴(Strategy Pattern)이란?

전략 패턴이란?전략 패턴(Strategy Pattern)은 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 '캡슐화된 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 예를 들면 유저가 결제방식을 결정할 때 '신용카드', '카카오페이', '현금' 등 여러가지 방법으로 결제를 하게된다.public interface Payment { void pay(int amount);}일단 amount만큼의 금액을 지불한다는 pay() 추상 메소드를 Payment 인터페이스에 구현한다. public class KakaoPayment implements Payment { @Override public void pay(int amount) { S..

JAVA 2025.05.23

[JAVA] 팩토리 패턴(Factory Pattern)이란?

팩토리 패턴이란?객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다. 팩토리 패턴 구현enum PhoneType { APPLE, SAMSUNG}abstract class Phone { String name; public String Phone() { return name; }}class ApplePhone extends Phone { public ApplePhone() { name = "apple"; }}class SamsungPhone extends Phone { public SamsungP..

JAVA 2025.05.22