전체 글
-
웹브라우저의 캐시(Cache)카테고리 없음 2023. 5. 9. 14:32
웹브라우저는 서버와 HTTP 프로토콜을 통해 리소스를 서버에게 요청하여 가져오고 이를 사용자에게 화면으로 보여주거나 제공한다. 이러한 통신 과정을 거치면서 클라이언트는 네트워크를 거치는 시간이 소비되며, 서버는 요청을 처리하는데 시간이 소비된다. 클라이언트가 이전에 받은 데이터와 똑같은 데이터를 서버에 재요청을 할 때 똑같은 통신 과정을 거치게 된다면 이 과정은 낭비라고 할 수 있다. 해결책으로 캐시의 개념을 웹브라우저에 그대로 적용한 HTTP에서 제공하는 헤더(Headres)인 Cache-Control 이 있다. 웹브라우저의 캐시 기본 동작 캐시가 없을 경우 캐시가 없을 경우 똑같은 이미지를 요청한다면, 서버에서는 동일한 이미지를 매번 1.1M 용량의 데이터로 응답해야 한다. 용량이 작은 리소스일 경우..
-
캐시(Cache)와 RedisDB 2023. 5. 8. 17:51
캐시(Cache)의 개념 캐시란 나중에 요청할 결과를 미리 저장해둔 후 빠르게 서비스 해주는 것을 의미한다. 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결과값을 받을 수 있도록 도와주는 공간이다. 그래서, 같은 요청이 들어오는 경우에는 캐시서버에서 바로 결과값을 반환해주기 때문에 DB부하를 줄일 수 있음과 동시에 서비스의 개선도 이룰 수 있다. 캐시 서버 도입 서비스를 처음 운영할 때는 WEB-WAS-DB의 구조로 구축하지만, 사용자가 늘어나면 DB만으로는 부하를 견딜 수 없게 된다. 매 트랜잭션마다 디스크에 접근해야하므로 부하가 많아지면서 성능이 떨어지게 되어 캐시 서버 도입을 검토하게 된다. 캐시는 아래와 같은 경우에 사용을 고려하면 좋다. 접근 시간에 비해 원래 데이터를 ..
-
템플릿 메서드 패턴, 팩토리 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴Spring 2023. 5. 2. 20:46
템플릿 메서드 패턴(Template Method Pattern) 강아지와 고양이를 키운다고 상상해 보자. public class Dog{ public void playWithOwner(){ System.out.println("귀염둥이 이리온"); system.out.println("멍멍"); System.out.println("꼬리 살랑 살랑"); System.out.println("잘했어"); } } public class Cat{ public void playWithOwner(){ System.out.println("귀염둥이 이리온"); system.out.println("야옹야옹"); System.out.println("꼬리 살랑 살랑"); System.out.println("잘했어"); } } 위..
-
Spring의 주요 디자인 패턴Spring 2023. 4. 17. 20:18
디자인 패턴은 소프트웨어 개발의 필수적인 부분이다. 반복되는 문제를 해결해주며, 개발자로 하여금 자주 사용되는 패턴을 통해 프레임워크의 설계를 이해하도록 도움을 준다. Spring Framework에서는 여러 디자인 패턴을 적용하여 개발자의 부담을 덜어주고, 지루한 작업을 빠르게 수행할 수 있도록 도와준다. Spring Framework에서 가장 많이 사용되는 4가지 패턴 1. Singleton pattern 2. Factory Method pattern 3. Proxy pattern 4. Template pattern 1. Singleton pattern 싱글톤 패턴은 어플리케이션 당 오직 하나의 인스턴스만 존재하도록 보장해주는 패턴이다. 공유 자원을 관리하거나 cross-cutting services..
-
Thread와 RunnableJava 2023. 4. 11. 20:28
쓰레드와 자바의 멀티 쓰레드 쓰레드란 프로그램 실행의 가장 작은 단위이다. 자바 애플리케이션을 만들어 실행하면 1개의 메인 쓰레드에 의해 프로그램이 실행된다. 하지만 1개의 쓰레드 만으로는 동시에 여러가지 작업을 할 수 없다. 동시에 여러 작업을 처리하고 싶다면, 별도의 쓰레드를 만들어 실행시켜주어야 한다. 자바는 멀티 쓰레드 기반으로 동시성 프로그래밍을 지원하기 위한 방법들을 계속해서 발전시켜 왔다. 쓰레드를 생성하는 방법은 크게 두 가지로 나눌 수 있다. 1. Thread클래스를 상속받아 run() 메소드를 오버라이딩 2. Runnable 인터페이스 구현 객체를 생성한 후 Thread 생성자로 Runnable 객체 전달 2가지 방법 모두 run() 메서드를 재정의하고 있고, 결과적으로 Thread 객..
-
REST, REST API, RESTful카테고리 없음 2023. 4. 4. 20:52
REST, REST API, RESTful REST “Representational State Transfer”의 약자 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미한다. 자원(resource)의 표현(representation)에 의한 상태 전달 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍처 스타일이다. 네트워크 상에서 Client와 Server 사이의 통신 방식 중 하나이다. HTTP URI를 통해서 자원을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해서 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. CRUD Operation Create:..
-
Java 메모리 누수(Memory Leak), GC 튜닝Java 2023. 3. 30. 00:35
메모리 누수 자바에서 메모리 누수는 더 이상 사용되지 않는 객체들이 GC(가비지 컬렉션)에 의해 소멸되지 않고 누적되는 현상이다. 가비지 컬렉션의 소멸 대상이 되려면 다른 Reference 변수에서 참조하고 있지 않아야 한다. 예시 1. Static 변수가 객체를 참조하고 있다면, 해당 객체는 GC에 의해 소멸되지 않는다. - Static 변수는 프로그램 종료 시점에 메모리가 반환되고, 사용하지 않아도 메모리를 점유하고 있다. 이런 static 변수를 재사용한다면 이점이 있지만, 사용하지 않으면 메모리를 점유하고 있게 된다. 2. Stack에서 Heap에 있는 객체를 참조하고 있는 동안에는 해당 객체는 GC에 의해 소멸되지 않는다. 메모리 누수가 발생하는 패턴 1. 무의미한 Wrapper 객체를 생성하는..
-
Spring 빈 스코프(Bean Scope) - 싱글톤, 프로토타입Spring 2023. 3. 30. 00:23
빈 스코프란? 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻한다. 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서 스프링 컨테이너가 종료될 때 까지 유지될 수 있는 이유는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스프링은 다음과 같은 다양한 스코프를 지원한다. 싱글톤(Singleton): 기본 스코프. 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입(Prototype): 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관하고 더는 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코프 request: 웹 요청이 들어오고 나갈때 까지 유지되는 스코프 session: 웹 세션이 생성되고 종료될 때 까지 유지되는 스코프 applicati..