spring boot 사이드 프로젝트 : spring의 @EventListener 사용기

sse 를 이용한 알림 시스템을 구현하며, 코드 개선을 고민하던 중 EventListener를 적용해 개선이 가능하다는 것을 알게 되었습니다. 이 글은 해당 기능 적용기에 대한 포스팅입니다. 1. spring의 @EventListener란? 이벤트 발행/구독 메커니즘특정 이벤트가 발생했을 때, 해당 이벤트를 구독하고 있는 리스너들에게 알림을 보내 관련 로직을 수행하도록 하는 방식입니다.제 코드에서 이벤트 발생 위치는 포스팅 생성 메서드가 되겠고, 이벤트를 구독하는 리스너는 알림 시스템이 되겠습니다. EventListener 원리이벤트 발행/구독 시스템은 spring에서 제공하는 @EventListener 어노테이션을 이용해 구현이 가능합니다.EventListener 를 통해 이벤트 발행/구독 동작을..

개인 프로젝트 2025.08.26 0

spring boot 사이드 프로젝트 : 테스트 시나리오를 세우고 jmeter를 통해 부하 테스트 해보기

프로젝트를 배포, 운영해보면서 내 프로젝트에 어디서 병목 현상이 발생하는지, 트래픽은 어느 정도까지 감당할 수 있는지 확인이 필요한 경우를 공부한 과정입니다. 테스트하는 프로젝트는 sns 사이드 프로젝트로, 간단히 포스팅을 쓰고, 댓글 및 좋아요가 가능한 기본적인 커뮤니티입니다. 테스트는 다음과 같이 시나리오를 설정하고, 진행했습니다. 테스트 시나리오 구성 근거 실제로 클라우드에 배포하는 건 돈 때문에ㅜㅜ 제 컴퓨터 스펙의 서버를 기준으로 잡고 일단 테스트 기준을 세웠습니다. 1. 서버 스펙 제 컴퓨터 스펙은 다음과 같습니다. cpu : AMD Ryzen 5 3500X 6-Core Processor 3.59 GHz (6코어 입니다.)메모리 : 16GBdisk : sdd 500GB 2. ..

개인 프로젝트 2025.02.20 0

spring boot 사이드 프로젝트: DockerFile, docker-compose.yml 작성 및 클라우드 세팅(GCP) 1

프로젝트 작성이 거진 다 끝나고, 테스트와 기능 개선 과제, 그리고 배포 정도의 과제가 남았다. 이제 로컬로 개발서버를 여는 것 뿐 아니라 클라우드 인스턴스에 24시간 배포를 시작해보려 한다. 클라우드 서비스는 가장 대중적인 아마존의 AWS, 마이크로소프트의 Azure, 구글의 GCP 등등 여러가지가 존재하는데, 나는 여기서 GCP를 선택했다. 이유는 단순하게도 무료로 이용이 가능해서(...) 이다. 다른 서비스는 무료를 더 이상 쓸 수 없는 상황.. 당장 복잡한 클라우드 아키텍처를 설계하지는 않았다. 일단 가볍게 다음과 같은 구조를 생각했다. GCP인스턴스 하나를 실행해서 그 안에 도커를 이용해 3개의 컨테이너를 띄운다. 8080으로 요청을 보내면 설정을 통해 스프링 부트 애플리케이션이 실행중인 컨테이..

9uin 2023.10.30 0

spring boot jpa : soft delete 구현 (delete 후 데이터 복원)

데이터를 삭제할 때 DB에서 완전히 삭제되는 방식은 사실 프로젝트를 운영해 나갈 때 좋은 방식이 아니다. 누군가 데이터를 실수로 삭제했을 때 복구하려면 DB에 어떤 방식이든 데이터를 남겨둬야 했다. 그렇기에 데이터를 복구하는 방법을 찾아보니, soft delete라는 방식을 통해 데이터 삭제를 하는 방법이 있었다. soft delete란? 데이터를 삭제할 때 두 가지 방식 중 하나다. hard delete, soft delete가 있다. hard delete : 실제로 db에 delete쿼리를 날려 데이터를 삭제하는 것. soft delete : 실제로 삭제하는 것이 아니라, 테이블에 deleted_check 같은 필드를 추가해서 그 데이터가 삭제처리 되면 삭제가 아니라 deleted_check만 바꿔주..

spring boot 2023.09.06 0

spring boot JPA : 컬렉션 형태의 데이터를 저장하기(@ElementCollection)

데이터베이스에 단일값이 아닌 컬렉션 형태(list 같은) 값을 넣는 것은 RDB에서 허용되지 않는다. 이 때문에 컬렉션 형태의 값이 필요하다면, 추가적인 테이블을 만든 뒤 그 테이블과 연관관계를 형성하는 방법을 사용해야 한다. 이 때 사용되는 방법이 @ElementCollection을 사용하는 것이다. @ElementCollection public class Post extends BaseEntity { @Column(nullable = false) private String type; @Column(nullable = false) private String title; @Column(nullable = false) private String text; @Column private String proce..

spring boot 2023.06.17 0