[DB] Redis Cluster
·
DB
먼저 이 글은 "실전 레디스"라는 책을 읽고 나서 적은 글이다.24년 5월에 발행한 따끈따끈한 책이기도 했고 시중에 생각보다 redis에 대한 내용으로 책이 없었는데 마침 redis에 빠져서 공부를 하다 보니 생각보다 좋은 내용들이  많으니 읽어보시는 것을 추천드린다.Redis Cluster란?레디스 클러스터는 여러 캐시노드를 연결하여 일부 장애가 발생해도 시스템을 계속 운영할수 있도록 자동 Failover 기능을 지원한다. 또한 샤딩을 통해 레디스 서버가 실행중일때 노드 사이의 키를 옮길 수 있다. 레디스 클러스터는 failover와 sharding을 통해 높은 가용성을 보장하며, 읽기 쓰기 작업의 확장성을 높일 수 있다.모두 여기서 들어왔을때는 CPA 이론에 대해서 어느 정도 알고 있다고 가정하겠다...
[Spring] Redis기반의 EventStreamListener가 동작하지 않는 문제
·
Spring
대부분의 Redis Stream기반의 EventListener를 구현하는 블로그들은 많지만 그중에서 Listener가 동작하지 않는 문제를 다룬 글은 없길래 한번 작성을 해본다. 필자도 Redis Stream을 토대로 한 EventListener를 구현했는데 갑자기 작동을 하지 않았는데 왜 작동을 하지 않았는지, 어떻게 하면 작동시킬 수 있는지에 대한 글을 적어보려 한다. 다음은 문제 상황이다.Redis Stream의 EventListener를 사용하다가 기존의 서버는 ec2에 따로 IP를 확인해서 막는등의 보안로직은 작성하지 않았다.Spring Security를 써서 막아줬다고 생각해서 아무런 문제가 없을 것으로 생각했지만 현실을 그렇게 순순히 흘러가지 않았다.문제 상황 1. Possible SECUR..
[DataBase] 트랜잭션에 대해서 얼마나 알고있는가?
·
DB
RealMysql 1권에서 트랜잭션부분에서 읽고 쓴 글입니다. 이 책을 추천받고 매우 흥미롭게 지식을 쌓을수 있었는데 여러분들도 꼭 읽어보시길 추천드립니다.먼저 트랜잭션이란?작업의 완전성을 보장해주는 것을 뜻한다고 하는데 하나의 트랜잭션으로 묶인 모든것들이 완벽하게 일을 끝내는것, 혹은 실패시에 모든것을 되돌려 놓는것 (roll back)을 뜻합니다. 여기서 RDBMS의 ACID중 원자성에 일을 맡게 하는 친구입니다.여기서 Lock의 기능과 주의하셔야 하는데 트랜잭션이란 작업의 단위를 하나로 묶어서 데이터의 정합성을 보장, 즉 끝냈을때 일을 완벽히 처리하는것을 목적으로 하며, Lock은 데이터의 동시성을 제어하기 위한 기능입니다. 우리의 어플리케이션은 여러 트랜잭션이 동시에 발생하고 있기 때문에 트랜잭션..
[Spring] Redis Stream을 사용한 EventPublisher, EventListener 구현
·
Spring
https://playground.sopt.org/projects/179 SOPT | 프로젝트 둘러보기자세한 내용이 궁금하신가요?playground.sopt.org다음과 같은 Product에 참여를 해 서버 개발자로 참여를 했었는데요.!그런데 여기서 의문점이 하나 있었는데 데이트 코스를 생성하는 과정에서 다음과 같은 과정을 거쳐야 했었습니다1. 데이트 코스 생성 [CREATE] 2. 코스를 생성하면 User에게 코스를 생성했으니 Point값 추가 [ UPDATE ]3. 그후 Point 내역을 보여주기 위한 Point 테이블에 Point 생성 [CREATE] 근데 여기서 의문점이였던게 어라라???POST API한개로 다른 테이블을 조회해서 UPDATE와 CREATE를 전부 수행해도 되는것인가...?에 대한..
Swagger로 사랑받는 개발자 되기 [ Spring ]
·
Spring
들어가며안녕하세요, 여러분! 오늘은 개발자로서 Swagger를 이용해 API 문서를 작성하는 방법과 이를 통해 사랑받는 개발자가 되는 방법에 대해 이야기해 보려고 합니다. 특히, Spring 프레임워크를 사용하는 여러분께 유용한 팁과 예제를 공유할 예정입니다. 그럼, 시작해볼까요?Swagger란 무엇인가요?Swagger는 API 문서를 자동으로 생성해주는 툴로, API의 설계 및 구현 과정에서 매우 유용하게 사용됩니다. Swagger를 사용하면, API의 명세를 쉽게 확인하고 테스트할 수 있어 개발자와 비개발자 모두에게 큰 도움이 됩니다. Spring 프레임워크와 결합하면 더욱 강력한 도구로 활용할 수 있습니다.@Tag와 @SecurityRequirement먼저, API 인터페이스를 정의하는 부분을 살펴..
Spring 검색조회 필터링 구현 방법 [JPA Specification]
·
Spring
https://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl안녕하세요..!오늘은 Spring Framework를 활용하여 검색조회 필터링을 구현하는 방법에 대해 소개할게요! 주어진 코드는특정 조건에 따라 Course 객체를 필터링하고, 결과를 DTO로 변환하여 반환하는 기능을 위해서 제가 진행한 프로젝트에서 필터링 기능을 적용하기 위해서 사용했습니다!이 과정에서 JPA의 Specification을 사용하여 동적 쿼리를 생성함으로써 필터링 기능을 작동시킬수 있습니다!1. Specification이란?Specification은 JPA에서 제공하는 인터페이스로, 동적 쿼리를 생성하는 데 유용합니다! . 주로 복잡한 ..
편리한 객체간 매핑을 위한 MapStruct 적용기 .feat 당근클론코딩
·
Spring
왜??Spring에 대한 공부와 여러가지 실습을 진행하면서 객체간 Mapping을 할 일이 많아졌고 각 객체 내부에 계속해서 다른 객체와 Mapping 해주는 로직을 짜게 되었습니다. 그러나 이제 객체가 늘어날수록 계속해서 Mapping 로직과 반환하는 DTO들이 많아졌고 관리의 용이성을 생각했을때 더 좋은 방법이 있다고 생각해서 찾아보게 되었습니다.일반적으로 제공하는 Mapper가 있지만 MapStruct라는 좋은 것이 있어서 코드설명과 함께 제공을 해드리려고 합니다. 네이버 클라우드의 블로그를 참고했습니다.https://medium.com/naver-cloud-platform/%EA%B8%B0%EC%88%A0-%EC%BB%A8%ED%85%90%EC%B8%A0-%EB%AC%B8%EC%9E%90-%EC%..
JPA - 단방향? 양방향? OneToMany? ManyToOne?
·
Spring
과제하다가 갑자기 DELETE 가 동작하지 않았다....ㅋㅋㅋㅋㅋㅋ... 따라서 여러가지 찾아보다가 이렇게 글을 쓰게 되었습니다...ERROR: update or delete on table "member" violates foreign key constraint "fkid4wmieido0slha6oaqc8l5fb" on table "blog"Detail: Key (id)=(6) is still referenced from table "blog".다음과 같은 Error로인해서 동작하지 않는다고 한다. 잘 읽어보면 update나 delete 시 member가 blog의 fk를 위반하고 있다고 한다. 따라서 blog참조하려다가 error가 떴다고 확인할수 있었다.그럼 이전에 먼저 ManyToOne , One..
@ManytoOne, @ManytoMany, @OnetoOne, @OnetoMany?
·
Spring
3차 세미나를 진행하면서 DB, JPA에 대해서 간단한 이론과 실습을 진행하면서 여러가지 의문점들을 느껴 찾아찾아 들어가다 보니 여기까지 왔네용...일단 제가 느낀 "의문점"에 대해서 설명드리고자 합니다그전에 JPA의 연관관계 기본 fetch 전략을 좀 보고 가시죠fetch의 기본전략각 jpa의 연관관계 어노테이션은 기본 fetch 전략을 가지고 있습니다. 이러한 default setting은 "어느쪽의 전략이 더 효율적인가" 에 초점이 맞춰져 있습니다.객체끼리의 연관관계 설정은?그렇다면 이러한 연관관계는 어떻게 설정하면 되는걸까요? 연관된 양쪽 객체에 모두 이러한 어노테이션을 사용하면 될까요? 그러면 혹시라도 복잡한 관계에서 순환참조등이 일어나지는 않을까 다양하게 발생할수 있는 문제에 대해서 깊은 고민..
SpringBoot와 Docker Container :Postgresql 연결하기!
·
Spring
먼저 사용에 앞서서 Docker를 알고 계신가요?https://crystalline-paper-4ea.notion.site/b1fb3ccc909d42e39263635676c3a7b8 여기서 docker & kubernetes 관련해서 간단하게 기본개념만 보고 오실수도있어요! 사실 저기에는 제가 정리한 내용이라 보기 어려우실 수도 있으니 간략하게 설명드리자면 커널을 공유해서 사용자의 resource를 사용해 간단하게 사용하는 인스턴스라고 생각하시면 될 것 같아요. 사용자마다 각 OS등의 환경이 다르기 때문에 발생하는 의존성 문제를 해결해줄수 있기 때문에 각 의존성을 모두 넣어서 하나의 이미지로 만들고 그 이미지를 실행시키면 컨테이너! 가 되는 과정이죠! 하나의 작은 서버개념 이라고 생각하시면 겁먹지 않고 ..