Spring Cloud Stream으로 RabbitMQ 샘플 구축하기
2023. 4. 1. 19:57
Spring
🧨 RabbitMQ란 AMQP를 따르는 오픈 소스 메시지 브로커이다. 요청에 대한 처리 시간이 길 때, 해당 요청을 Queue에 위임하고 빠르게 응답할 때 사용한다. 또한, MQ를 사용하여 애플리케이션 간 결합도를 낮출 수 있다. 🧨 AMQP란 Advaced Message Queing Protocol의 약자로써, MQ의 표준 프로토콜이다. 이를 기반으로 나온 제품 중 하나가 RabbitMQ이다. 등장 배경 이전에는 각 플랫폼에 종속적인 제품들이었기 때문에 이기종 간 메시지 교환을 위해서 포맷 컨버전을 해야 했기 때문에 메시지 브릿지를 이용하거나(속도 저하 발생) 시스템 자체를 통일 시켜야 하는 불편함과 비효율성이 있었다.이러한 단점을 보완하기 위해 나온 표준 프로토컬이 AMQP이다. 즉, AMQP가 나온..
플라이 웨이트 패턴
2023. 2. 5. 15:27
카테고리 없음
객체를 가볍게 만들어서 메모리 사용을 줄이는 패턴이다. 플라이급의 플라이인 가벼운 것을 의미한다. 자주 변하는 속성(exstrinsit)과 변하지 않는 속성(instrinsit)을 분리하고 재사용하여 메모리 사용을 줄일 수 있다. 잘 변하지 않는 것들을 모아 놓은 것을 플라이 웨이트 패턴이라고 하는데 이 때 잘 변하지 않는 것들을 팩토리에 모아 놓고 캐싱하여 재사용하는 것이다. 🚗 편집기 예제로 패턴 적용 전 알아보기 해당 프로그램은 hello라는 글을 쓸 수 있는 편집기이다. hello라는 글자를 white 색상, 폰트는 Nanum, 폰트 크기는 12로 정해진 글자이다. public class Character { private char value; private String color; private..
# 아이템 3. private 생성자나 열거 타입으로 싱글턴임을 보증하라
2023. 2. 5. 15:26
카테고리 없음
🚗 싱글톤이란? 싱글톤은 인스턴스를 애플리케이션에서 오직 하나만 생성할 수 있는 클래스를 의미한다. 예로 스프링 기본 빈이 싱글톤이다. 스프링 빈을 싱글톤으로 사용함으로써 이점은 모든 클라이언트 별로 인스턴스를 생성할 이유가 없기 때문에 무의미한 메모리 낭비를 줄일 수 있다. 별개로 스프링에서의 빈 싱글톤은 애플리케이션 전반의 싱글톤이 아닌 스프링 ApplicationContext 내에서의 싱글톤을 의미한다. 즉, new XXXService();를 하면 새로운 객체가 Context 밖에 생성이 된다는 의미이다. 🚗 싱글톤의 주의점 싱글톤은 모든 클라이언트가 공유하는 자원이기 때문에 인스턴스 변수가 존재하면 안된다. 만약 인스턴스 변수를 의도치 않게 하나의 클라이언트에서 변경하게 되면 모든 클라이언트에게 ..
JPA의 캐시와 @Transactional(readOnly=true) OSIV의 관계
2022. 12. 29. 10:23
카테고리 없음
1차 캐시 와 스냅샷, 2차 캐시 스냅샷 영속성 컨텍스트가 생성될 때, 향후 변경 감지를 위해서 원본을 복사해서 만들어둔 객체 1차 캐시 단순히 엔티티를 캐싱해두고 같은 key이면 디비로 재요청하지 않기 위한 것이다. 그럼 디비에서 값이 바뀌면 어떻게하나? 라는 생각이 들 수 있지만, 오히려 디비가 변경되었어도 같은 key를 조회했을 때는 같은 값을 가져와야 혼란이 적기 때문에 전혀 문제가 되지 않는다. 즉, Repeatable read 등급의 트랜잭션 격리 수준을 디비가 아닌 애플리케이션 차원에서 제공한다는 장점이 있다. 이를 동일성(주소가 같은 것)이라고 한다. 2차 캐시 1차 캐시가 commit, flust를 하거나 osiv를 사용할때 까지 캐시를 유지한다면, 2차 캐시는 애플리케이션이 종료될 때까..
CORS와 SOP, XSS 그리고 CSRF
2022. 12. 24. 22:35
기타 IT
CORS(Cross Origin Resource Sharing)란? 브라우저가 A사이트에서 B사이트로 API 요청을 가능하다록 하는 정책이다. 브라우저의 보안과 관련해서 중요한 역할을 하는 것이다. CORS가 생겨난 이유 모든 사이트간에 요청이 자유롭게 되도록 허용하면 간단한 일인데 굳이 CORS라는 정책을 만든 이유를 알아보자. XSS(Cross Site Scripting) 사례로 알아보자. 착한 사이트에 로그인을 해서 토큰을 브라우저 쿠키에 저장한다. 자동 로그인을 위해서 현재 인증 정보가 쿠키에 저장되어 있는 것이다. 예로 jwt token 나쁜 사이트가 착한 사이트에 쿠키를 탈취하는 스크립트를 심은 게시글을 올린다. 사용자가 게시글을 본다. 게시글에서 이미지에 나쁜 사이트로 쿠키를 탈취하는 스크립..
JWT 개념 알기
2022. 12. 24. 20:57
카테고리 없음
인증과 인가란 인증 인증은 서비스에게 일정 권한을 받을 수 있는 상태를 만드는 것이다. 즉, 로그인이 인증이라고 볼 수 있다. 인가 인가는 인증이 되어야만 한다. 권한이라고 볼 수 있는데 로그인 후 글쓰기, 글수정과 같은 것들이 권한이고 이를 하기 위한것이 인가이다. JWT는 인가에 관련된 부분이다. 세션 요즘은 세션보다 JWT를 많이 쓰는데 간단한 이유는 로그인에 과련해서 알아보도록 하자. 세션을 쓸 경우 아래와 같은 단점이 있다. 메모리에 정보를 갖고 있어야 해서 메모리 낭비가 심하다. 메모리가 휘발성이기 때문에 서버를 끄면, 다 날아가서 재로그인 해야한다. 다중 서버의 경우 세션이 다르면 서버마다 재로그인을 하는 불상사가 발생한다. 그래서 세션을 다 맞춰줘야 한다. 그래서 캐시 서버, 데이터베이스에..
bigdecimal non terminating decimal expansion
2022. 12. 21. 22:07
카테고리 없음
발생하는 이유 BigDecimal은 정확한 소수 연산을 하기 위해서 존재한다. 컴퓨터는 모든 것을 이진으로 변환하여 작업을 하는데 0.1인 1/10을 이전으로 바꾸면 무한 소수가 된다. 컴퓨는 float, double인 소수를 부동 소수점으로 표현하는데 부동 소수점은 오차가 생긴다는 단점이 있지만, 수 많은 데이터를 메모리에 올려 놓고 효율적으로 메모리를 사용해야 하는 컴퓨터는 부동 소수점 방식을 택하게 되었다. 고정 소수점을 사용하면 정확한 계산이 가능하겠지만, 무한 소수는 메모리를 무한으로 사용해야 하기 때문에 불가능하다. 그래서 정확한 10진수 계산을 위해서 BigDecimal을 Java에서 제공한다. 그런데 소수를 계산하는데 있어서 소수 정밀도는 어떻게 할 것이고, 반올림은 어떻게 할 것인지를 알..
고정 소수점과 부동 소수점의 오차 알아보기
2022. 12. 21. 22:05
카테고리 없음
float, double, BigDecimal 정수 값의 크기와 범위 1비트당 정수는 0과 1로 2개를 표현할 수 있고, 4개이면 2^4로 16개이고, 8비트이면 1바이트로 2^8으로 256개이다. 그래서 실제로 8비트는 0 ~ 255의 숫자를 표현할 수 있다. 그렇다면, 음수를 표현하기 위해서는 아래 그림과 같이 가장 앞의 1비트는 부호 비트로 사용하고 나머지 7개 비트만 사용하게 된다. 결국 -2^7 ~ 2^7 - 1의 정수까지 표현이 가능하게 된다. 2^7은 128이므로 음수 128개 양수 128개를 표현할 수 있는 것이다. 즉 -128 ~ 127까지 표현이 가능하게 되는 것이고, 음수가 128이고 양수가 127인 이유는 간단하게 보면, 음수까지 -2^7 + 1로 시작하여 -127 ~ 0까지하면 양..