Yeji's Tech Notes
반응형
article thumbnail
쿠폰 발급 서비스 동시성 처리하기 1 - (1/3) (feat. synchronized)
Spring 2024. 1. 15. 09:30

요구사항 멀티스레드 환경에서 쿠폰 발급 요청 시 동시성 처리하기 위한 방법으로 synchronized를 사용해보았습니다. Synchronized의 용도 멀티스레드 환경에서 여러 스레드가 하나의 공유 자원에 동시에 접근하지 못하도록 막는 것을 말합니다. 만약 여러 스레드가 하나의 공유 자원에 동시에 접근했을 경우 값을 올바르게 변경하거나 가져오지 못하는 경우를 막기위해 사용합니다. Synchronized의 사용법 메소드에 synchronized 설정 메소드 이름 앞에 synchronized를 설정하면 메소드 전체를 임계영역으로 설정할 수 있습니다. synchronized void decrease() { count--; System.out.println(count); } 코드블럭에 synchronized 설..

article thumbnail
[CountDownLatch] 동시성 처리 테스트를 위한 CountDownLatch 사용법
Spring 2024. 1. 15. 09:30

CountDownLatch의 정의 하나 이상의 스레드가 다른 스레드에서 수행 중인 작업이 완룓될 때까지 대기할 수 있는 동기화 보조 기능이라고 생각하시면 됩니다. CountDownLatch는 다양한 용도로 사용할 수 있습니다. CountDownLatch는 1개의 카운트로 초기화된 CountDownLatch는 on/off Latch 또는 게이트 역할을 해줍니다. 호출되는 모든 스레드는 countDown()을 호출하는 스레드에 의해 열릴 때까지 게이트에서 대기합니다. N으로 초기화 된 CountDownLatch는 N개의 스레드가 일부 작업을 완료하거나 일부 작업이 N번 완료될 때까지 스레드 하나를 대기시키는 데 사용할 수 있습니다. CountDownLatch의 유용한 속성은 countDown을 호출하는 스레..

article thumbnail
Spring에서 지연로딩 데이터 갖고오기
Spring 2023. 6. 2. 09:30

개요 "not initialize proxy - no session" Spring에서 Entity데이터를 DTO로 변환해서 가져오는 과정에서 위와 같은 문제가 발생했습니다. 이러한 문제가 생기는 원인과 해결방법에 대해서 정리해봤습니다. 문제 발생 원인 Account 테이블에서 다중 값을 가질 수 있는 Column이 존재해 fetchType.LAZY형식의 데이터로 값을 저장했습니다. 해결방법 1. FetchType.LAZY -> FetchType.EAGER 변경 2. @EntityGraph 3. Querydsl을 이용한 fetchjoin() 저는 2번째 방법을 선택해서 해결했습니다. 우선 LAZY에서 EAGER로 변경하는 것은 선호하지 않는 방법입니다. 1번째 방식으로 변경하면 불필요한 리소스가 발생하므로..

article thumbnail
Nexus3를 이용한 Spring 라이브러리 배포 및 사용하기
Spring 2023. 5. 23. 09:30

문제상황 사이드 프로젝트에서 MSA로 전환중에 kafka 토픽 발행 작업 중에서 약간의 문제가 있었습니다. 알고보니 회원가입시 mail-service에서 전송된 mail정보를 객체로 생성해 토픽을 전송하는데, 토픽을 받은 서비스가 deSerializing하는 과정에서 다른 객체가 넘어와서 생긴 문제였습니다. 현재, 인터페이스를 만들지 않아 의사소통의 문제가 생겨 서로 다른 객체를 가지고 있는 점, 토픽 발행 및 전달시 서비스마다 객체를 가져야되는 점 때문에 별도의 common-service를 만들어 개발시 공통으로 사용하는 부분들은 라이브러리로 사용하기로 결정지었습니다. Nexus 세팅하기 Docker 실행하기 docker 커맨드를 활용하여 데이터 볼륨 연동 후 nexus를 실행하였습니다. $ dock..

article thumbnail
Spring Event를 이용한 의존성 분리 (EventListener, TransactionalEventListener)
Spring 2023. 5. 11. 18:30

개요 최근 프로젝트를 진행하면서 @EventListener를 이용해 프로세스를 분리하여 처리하는 방법을 적용해 기능의 의존성을 분리시키고 속도를 단축시켰습니다. 기능 개발이 마무리되면 @EventListener에 대해 정리해보는 글을 쓰면 좋을 것같아 이번 글을 작성했습니다. @EventListener를 사용하기 위해선 많은 사전지식이 필요했는데요, IoC컨테이너 ApplicationContext등 기능에 관한 내용에 대해서도 추가 정리해보았습니다. ** 이번글에서 사용하는 예제는 실제 기능 로직은 제하고 Spring Event에 중점을 둬서 작성했습니다. ** 스프링 이벤트를 사용하는 이유 우선 SpringEvent를 왜 사용하는지 알 필요가 있습니다. SpringEvent를 사용하는 주된 이유는 서..

article thumbnail
[TGather] Jenkins 이용한 Github 프로젝트 배포 자동화하기
Spring 2023. 5. 1. 14:16

Introduce 여행 모임 프로젝트(TGather)를 개발하면서 아키텍쳐와 배포 프로세스에 관해 의견을 나눠보다 제가! Jenkins를 이용해서 직접 자동 배포화 하는 과정에 대해서 정리 해봤습니다! 이번 글에서는 Docker Hub까지 배포하는 과정만 다뤄봤습니다. 젠킨스(Jenkins)는 레포지토리에 대한 지속적인 통합(Continuous itegration,CI)과 지속적인 배포(Continuous delivery, CD) 환경을 구축해주는 도구로 빌드, 테스트, 배포 프로세스를 자동화하여 소프트웨어 품질과 개발 생산성을 높혀줍니다 이번 글에서 사용할 도구 (Github, Jenkins, Docker, Docker Hub) credentials 세팅 우선, 저희가 프로젝트를 clone 받거나 pu..

반응형