728x90 Spring/ETC25 RabbitMQ로 구현하는 비동기 메시지 큐(입문) 메시지 큐 : 시스템 간 데이터를 비동기적으로 전달하기 위한 중간 저장소. - 생산자(Producer)가 메시지를 보내고, 소비자(Consumer)가 받아 처리한다.- 비유: 우체국에서 편지를 보내는 것처럼, 발신자가 수신자를 기다리지 않고 우체통(큐)에 넣으면 배달원(소비자)가 가져가 처리하는 것. 동작원리- 생산자 : 데이터를 메시지로 만들어 큐에 전송- 큐 : 메시지를 순서대로 저장, 소비자가 준비될 때까지 보관- 소비자 : 큐에서 메시지를 꺼내 처리- 비동기성 : 생산자와 소비자가 서로를 기다리지 않음- 메시지보장 : 설정에 따라 메시지가 손실되지 않도록 보장 가능 장점- 비동기 : 생산자와 소비자가 독립적으로 동작- 부하분산 : 처리 속도 차이 완충- 확장성 : 다중 소비자로 작업 분산예로는.. 2025. 4. 5. Spring Boot와 Redis로 입문자용 구현 Redis(Remote Dictionary Server) : 인메모리 데이터 구조 저장소로, 키-값 쌍을 빠르게 저장하고 조회할 수 있는 오픈소스 NoSQL Redis 주요 특징- 메모리 기반 ㄴ디스크 기반 DB(MySQL)보다 훨씬 빠름 (수십만 QPS 처리 가능). ㄴ단점: RAM 크기에 따라 저장량 제한, 전원 끄면 데이터 손실 (설정으로 보완 가능). - 다양한 데이터 구조 지원 ㄴ문자열(String): 기본 키-값 (예: SET key value). ㄴ리스트(List): 순서 있는 데이터 (예: LPUSH, RPOP). ㄴ해시(Hash): 필드-값 쌍 (예: HSET user id 1 name 홍길동). ㄴ셋(Set): 중복 없는 집합 (예: SADD). ㄴ정렬된 셋(Sorte.. 2025. 4. 2. @Tsid 커스텀 생성 후 적용하기 (수정) 사용이유대규모 분산 시스템에서의 병렬처리 가능 및 고유성 보장8byte 로 공간 효율성 향상타임스탬프 값을 비트 가장 앞에 배치하여 정렬 순서 보장되어 데이터 삽입, 조회 시 성능 향상 As-Is기존 @GeneratedValue(strategy = GenerationType.IDENTITY) 사용동시성 문제 발생국가별 프로젝트의 모든 테이블을 하나의 테이블로 관리 시, ID 중복 발생To-BeTSID 를 이용하여 분산 환경에서 PK 고유 생성 보장.8bite 로 공간 효율순차적으로 증가(timestamp) 정렬 보장하여 성능 효율UUID 생성 또한 고려하였지만, 선택 X36자리 문자열로 구성되어 있어 공간 효율성 문제데이터 삽입, 조회 시 성능 문제 (인덱스 비효율) Gradle 의존성 추가// http.. 2024. 6. 3. @Tsid 커스텀 생성 후 적용하기 (사용X) 6/3 멀티스레드 테스트 도중 중복값이 발생하는 문제가 발생했다.기존 라이브러리를 사용해서 커스텀하였는데, 중복값 발생하는 이슈가 올라왔는데 TSID 제작자가 그냥 이슈를 닫아버린 히스토리가 있었다. 따라서, 라이브러리 문제로 판단하고 TSID Generater 라이브러리를 사용해 새롭게 커스텀했다.https://josteady.tistory.com/963 @Tsid 커스텀 생성 후 적용하기 (수정)사용이유대규모 분산 시스템에서의 병렬처리 가능 및 고유성 보장8byte 로 공간 효율성 향상타임스탬프 값을 비트 가장 앞에 배치하여 정렬 순서 보장되어 데이터 삽입, 조회 시 성능 향상 As-Isjosteady.tistory.com --- 왜 UUID 나 Random 값을 쓰지 않고 TSID 를 사용하는지 .. 2024. 5. 21. 현재 열려있는 포트 조회 및 닫기 (macOs) iterms (터미널, 쉘) 을 이용해서 현재 사용하고 있는 PORT 를 조회할 수 있다. lsof -PiTCP -sTCP:LISTEN sudo lsof -PiTCP -sTCP:LISTEN 종료하는 방법은 PID 의 번호와 kill 명령어를 사용한다. kill -9 (PID번호) sudo kill -9 (PID번호) 2024. 3. 24. Mac 자바 설치 경로 확인하기 Iterm 를 이용해서 자바 경로를 조회한다. /usr/libexec/java_home -V 해당 경로로 이동 cd /Users/joyunjong/Library/Java/JavaVirtualMachines 2024. 3. 13. 인프런- 김영한님 온라인 밋업 Live [ 30만 수강생 기념 ] 느낀점 10만 , 20만 을 넘어 30만 수강생에게 지식을 나눔하고 계신 영한님의 온라인 밋업 동영상이 인프런에 게시되었습니다. https://www.inflearn.com/course/30%EB%A7%8C-%EA%B9%80%EC%98%81%ED%95%9C-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EC%84%B8%EC%85%98 [지금 무료] [30만 수강생 기념] 1/31 김영한님 온라인 밋업 Live 강의 - 인프런 1월 31일 저녁 7시에 진행되었던 밋업 영상입니다., [사진][사진]여러분들의 인생멘토가 될,김영한님의 첫 라이브 세션!😟 내가 개발자로 평생 일할 수 있을까?🤔 현 시점 개발자가 갖춰야 할 가 www.inflearn.com 해당 영상을 보고 현재 나의 상황과 느낀점에 대해 간단히 정.. 2024. 2. 9. @Transactional 에 대해 @Transaction 스프링 프레임워크를 사용하면 보통 서비스 레이어(비즈니스로직) 에 @Transactional 어노테이션을 선언해 트랜잭션을 시작한다. 해당 어노테이션에 있으면, 메서드를 호출하기 직전에 스프링의 AOP 가 먼저 동작한다. 메서드가 시작하기 전 트랜잭션을 시작한다. 메서드가 정상적으로 종료되면 트랜잭션을 커밋하면서 종료한다. 트랜잭션을 커밋할 때, 플러시 하면서 DB에 저장하고 커밋한다. 만약, 예외가 발생하면 트랜잭션을 롤백하고 종료한다 ( 커밋은 발생 X ) + 기본적으로 Unchecked Exception, Error 만을 롤백한다. 트랜잭션이란? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산 Begin , commit 을 자동으로 수행 예외 발생 시, .. 2023. 8. 15. 동적 프록시란 ? 먼저, Spring Boot 2.0 이상부터 CGLIB 가 기본으로 적용되어 사용되고 있다. Spring AOP 에는 JDK proxy 를 기본으로 사용한다. 단, 인터페이스가 없는 경우에는 CGLIB 을 사용한다. CGLIB 을 디폴트로 사용하고 있는 이유는 인터페이스 기반의 프록시 ( JDK proxy ) 는 때때로, ClassCast Exceptions 를 추적하기 어렵다고 한다. ( 단순히 생각해도, 인터페이스보다 구현하고 있는 클래스를 기반으로 프록시를 만드는 것이 더 정확할 것. ) Spring AOP 는 기본적으로 프록시 방식을 사용한다. 프록시는 객체를 직접적으로 참조하는게 아닌, 해당 객체를 대신하는 객체를 통해 객체에 접근하는 방식. 프록시 객체없이 타겟에 접근하게 되면, 직접 호출하는.. 2023. 8. 11. 이전 1 2 3 다음 728x90