전체 글(46)
-
프로세스와 스레드
프로그램이란?프로그램이란 어떤 작업을 하기 위해 실행할 수 있는 파일(코드 덩어리)파일이 저장 장치에는 있지만 메모리에는 올라가 있지 않은 정적인 상태프로세스란? 실행 중인 프로그램을 의미. (같은 프로그램도 별도의 프로세스가 될수있다.) 커널에 등록되고 커널의 관리하에 있는 작업각종 자원을 요청하고 할당 받을 수 있는 개체PCB를 할당 받은 개체능동적인 개체 ( 실행 중 각종 자원을 요구, 할당, 반납하며 진행)예를 들어, 우리가 컴퓨터에서 웹 브라우저를 켜면, 그 브라우저가 프로세스로 실행되는데. 프로세스는 프로그램이 실제로 CPU에서 돌아가면서 작업을 수행하는 독립적인 단위프로세스 제어블록(PCB) - Process Controle Block프로세스 제어블록(PCB)는 운영체제가 각 프로세스를 관리..
2025.05.26 -
자바 실행과정과 JVM 이해
자바의 가장 큰 특징 중 하나는 바로 플랫폼에 독립적플랫폼 독립성이란?한 번 작성하고 컴파일한 자바 프로그램은 어떤 운영체제나 하드웨어 환경에서도 실행될 수 있다는 의미이는 C나 C++과 같은 전통적인 언어들과는 큰 차이를 보입니다.예를 들어, C 언어로 작성한 코드는 Windows에서는 .exe, Linux에서는 .out 등 운영체제에 맞게 각각 다르게 컴파일해야 합니다. 하지만 자바는 단 한 번의 컴파일로 .class라는 바이트코드 파일을 만들고, 이 파일은 어떤 운영체제에서도 JVM만 있으면 실행할 수 있습니다. 즉, JVM이 플랫폼에 따라 번역과 실행을 담당하기 때문에, 자바는 코드 수정 없이도 Windows, macOS, Linux 등에서 동일하게 실행됩니다. 아래에서 자바 실행과정부터 JVM에..
2025.04.18 -
Proxy 패턴
객체에 접근할 때 그 접근을 제어하기 위해 대리인 역할을 하는 객체를 제공하는 디자인 패턴 Proxy 패턴은 실제 객체에 대한 대리자 역할을 하여, 이를 통해 추가적인 기능(보안, 캐싱, 데이터 유효성 검사, 지연초기화, 로깅 등)을 제공한다.객체의 구조를 변경하지 않고도 기능을 추가하거나 수정할 수 있다.그냥 객체를 이용하지않고, 대리자를 이용하는 이유는?대상 클래스가 민감한 정보를 가지고 있거나, 인스턴스화 하기에 무겁거나 추가 기능을 가미하고 싶지만, 원복 객체를 수정할 수 없는 상황일때를 극복하기 위해서이다.등장인물1. Subject(본인) 역실제 객체와 프록시 객체가 구현해야 할 공통 인터페이스를 정의public interface Printable { void setPrinterName(S..
2025.04.17 -
Strategy 패턴
알고리즘을 캡슐화하여 필요에 따라 런타임에 알고리즘을 독립적으로 변경할 수 있도록 하는 전략 동일한 문제를 해결하기 위해 여러 알고리즘 중 하나를 선택해야 하는 상황에서 유용코드의 유연성과 재사용성을 높인다.등장인물Strategy(전략)역전략을 이용하기 위한 인터페이스를 결정한다.공통된 알고리즘을 캡슐화한 인터페이스로 모든 전략은 이 인터페이스를 구현한특정 작업을 수행하는 메서드를 정의interface SortingStrategy { void sort(int[] array);}ConcreateStrategy(구체적인 전략) 역`Strategy`역의 인터페이스를 실제로 구현한다.구체적인 전략(작전, 방한, 방법, 알고리즘 등)을 실제로 프로그래밍한다.class BubbleSortStrategy imp..
2025.04.15 -
Template Method 패턴
상위클래스에서 처리의 뼈대를 결정하고 하위 클래스에서 그 알고리즘의 구체적 내용을 결정하는 전략추상클래스를 상속으로 완성시킨다.알고리즘의 전체구조를 변경하지 않고 세부 단계를 구현하여, 재사용성과 확상성을 높인다.(OCP)등장인물AbstractClass(추상 클래스)역템플릿 메소드를 구현하며, 그 템플릿 메소드에서 사용할 추상 메소드를 선언한다.이 추상 메소드는 `ConcreateClass`에서 구현되며, 이를 `final`로 선언하여 서브클래스에서 변경할 수 없도록한다.(오버라이딩 불가)public abstract class AbstractDisplay { // open, print, close는 하위 클래스에 구현을 맡기는 추상 클래스 public abstract void open(); ..
2025.04.15 -
계층적 캐싱(Caffeine + Redis)을 도입하여 쿠폰 발급 시스템 성능 최적화하기
선착순 이벤트 쿠폰 발급 시스템을 구현하면서 Caffeine 로컬 캐시 + Redis 캐시를 활용한 계층적 캐싱 구조를 적용하여 성능 최적화 과정을 담고있습니다. 📌 캐시란? 자주 사용되는 데이터나 자원을 임시로 저장해두는 고속 저장 계층으로, 데이터 접근 속도 향상 및 시스템 부하 감소를 목표캐시는 반복적인 I/O 작업, 네트워크 지연, 계산 비용을 줄여 전반적인 성능을 최적화하는데 목적이 있습니다.캐시의 종류와 특징캐시는 크게 두 가지로 나눌 수 있습니다.종류저장위치 장점단점로컬 캐시 (Caffeine 등)서버 내 메모리빠른 속도, 네트워크 호출 없음다중 서버 환경에서 데이터 일관성 문제분산 캐시 (Redis 등)별도 독립 캐시 서버(글로벌)여러 서버가 같은 데이터를 공유 가능 (데이터 일관성 확..
2025.03.20