1. Netty? 누구세요Spring Cloud 2020.0.x 이후부터는 Eureka 서버가 기본적으로 톰캣(Tomcat)이 아닌 네티(Netty) 기반으로 동작한다고 한다. Netty라는 이름은 몇 번 들어봤지만, 정확히 어떤 기술인지, 왜 Eureka에서 사용하게 되었는지 궁금해졌다. 이를 바탕으로 Netty에 대해 학습한 내용을 정리해 본다.Netty란?Netty는 비동기 이벤트 기반 네트워크 애플리케이션 프레임워크이다.주로 서버-클라이언트 통신에서 높은 성능을 제공하기 위해 사용된다.Netty의 주요 특징비동기 및 논블로킹 방식요청마다 스레드를 생성하지 않고 이벤트 루프(Event Loop)를 사용해 효율적으로 처리한다.대규모 요청을 동시에 처리하는 데 적합하다.경량 서버서블릿 컨테이너(Tomc..
Gateway Filterhttps://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboard강의를 보고 학습했으며 3장 Gateway를 학습하고 느낀점을 정리해봤다.1 . Spring Cloud Gateway 필터에서의 exchange와 chainSpring Cloud Gateway에서 필터를 작성할 때, 람다식으로 exchange와 chain이라는 매개변수를 사용하는 코드를 자주 접하게 되었다. 이 두 객체가 무엇을 의미하며, 어떻게 주입되는지, 그리고 각각의 역할이 ..
Spring AOP 멀티모듈 이슈안녕하세요, 이번 포스팅에서는 Spring AOP를 멀티모듈 환경에서 사용하면서 겪은 문제와 그 해결 방법을 공유하려고 합니다. 멀티모듈에서 공통 기능을 분리해 사용하는 분들께 도움이 되기를 바랍니다.문제 상황: 멀티모듈에서 애노테이션 추출 문제Spring AOP를 활용해 특정 메서드 실행 후 이벤트를 발생시키는 기능을 구현하면서 문제가 발생했습니다. 공통 모듈에 정의한 애노테이션을 API 모듈에서 사용하고 있었고 다음과 같이 AOP를 적용했을 때 오류가 발생했습니다@Aspect@Componentpublic class CommentNotificationAspect { @AfterReturning(value = "@annotation(commentNotification..
말로만 듣던 동시성 문제 따닥을 직접 마주할 줄이야. 아래는 해결과정을 글로 남겨보았다.분산락 Codehttps://github.com/ttoklip/BackEnd/blob/main/src/main/java/com/api/ttoklip/domain/aop/filtering/SignupDistributedLockAspect.java BackEnd/src/main/java/com/api/ttoklip/domain/aop/filtering/SignupDistributedLockAspect.java at main · ttoklip/BackEnd사회초년생의 똑! 부러지는 독립을 위한 커뮤니티 플랫폼, 똑립 Backend 레포 🌳. Contribute to ttoklip/BackEnd development by ..
최근 Spring Transaction 전파에 대해 깊이있게 학습하며 예전 알림 문제를 어떻게하면 해결할 수 있을지 계속 고민이 들었다.과연 에전에 내가 한 방법이 정말 올바른 방법이였을까?2024.04.20 - [대외활동] - 알림기능, 문제의 시작 알림기능, 문제의 시작기존 서비스저희 게시판 서비스는 HoneyTip(꿀팁공유해요 게시판)과 HoneyTipComment(꿀팁공유해요 댓글)이 연관관계 매핑이 되어있습니다. HoneyTipComment는 Comment를 단일테이블 전략으로 상속받고 있습toychip.tistory.com 예제를 아주 간단하게 세팅해서 문제를 명확히 파악해보자. Entity/* Entity */@Getter@Entity@NoArgsConstructor(access = Acce..
전체 구조설치할 환경은 아래와 같다.컴퓨터에 직접 가상화 환경을 생성할 것이다. 지금 이렇게 진행하지만 추후에 AWS, NCP, GCP 등 다양한 퍼블릭 클라우드를 사용할 수 있다. 만약 퍼블릭 클라우드를 사용한다면, Guest OS 부분이 대체될 것이다.인프라 환경 설치Mac은 Viturl Box를 설치할 수 없다. Mac에서 사용할 수 있는 가상화 환경인 UTM을 다운로드하고, 거기서 Rocky Linux를 실행한다. Rocky Linux에 들어가서 Kubernetes Cluster를 설치하고 Pod를 확인한다. 나의 데스크탑에서 대시보드에 접속한다. UTM + Rocky linux 설치Rocky linux iso 설치https://dl.rockylinux.org/vault/rocky/9.2/isos..
Container와 Container Orchestration의 차이기존 Container는 새로운 버전으로 릴리즈 되면 매번 운영자가 수정해주어야 하지만, Container Orchestration은 업그레이드만 설정하면 알아서 Container Orchestration이 해결해 준다. 이것이 우리가 쿠버네티스를 배워야 하는 이유다. 쿠버네티스는 구글 주도하에 어려 기업들의 배포 운영의 노하우가 담긴 집합체이다. 쿠버네티스를 학습하기 전에, Linux OS의 흐름에 대해 짚고 넘어간다면, 앞으로 쿠버네티스 공식 문서를 볼 때 좀 더 이해가 빠를 것이다.Linux 진화 과정1. 1960년에 UNIX가 탄생했다. 2. 하지만 UNIX는 유료이기에, 이를 무료로 사용할 수 있게 만든(취미로 만들었다고 한다...
현재 Mash-Up 14기수를 진행중이다. 8월 24일 MVP 배포를 했다. 실제 동아리 구성원분들에게 어떤 서비스인지 간략하게 알려주는 행사이다. 원래는 7월 27일이 MVP 배포였지만, 미뤄지게 되어 8월 24일에 발표하게 됐다. Goorm에서 진행한 MVP 배포 먼저, 우리의 서비스를 기획할 때 팀원들과 잡은 가장 큰 매쉬업 구성원은 81명이라 4/3 이상인 DAU 60이 목표였다. 매쉬업 동아리 구성원들의 니즈를 고민해봤는데, 도파민을 뿜뿜하게 해주는 것으로 결정했다. 현재 동아리 사람들은 2030의 it 에대한 열정이 넘치는 사람들이 모인 곳이다. 파트가 6개로 구성되어있는 만큼, 사람들이 81명이나 된다. 그렇기에 친해지고 싶어도 다른 파트, 다른 프로젝트 팀 사람들과는 쉽게 친해지지 못하는 ..
최근에 스케줄러가 동시에 발생한 이슈가 생겼다.우리의 스케줄러는 각각 하루에 2번만 발생하기 때문에, 매초 실행하는 스케줄러들과는 다르다. 현재 메모리를 t3.micro로 두었고, 이를 Scale-out을 하게될 경우 스케줄러가 동시에 실행되는 문제를 확인했다. 현재 질문이 12개인 QuestionSet를 생성하는 스케줄러, 각 사용자의 해당 회차의 QuestionSet에 대한 후보자를 뽑는 QuestionSheet를 생성하는 스케줄러가 있다.2024.08.14 - [대외활동] - JPA 배치 처리로 벌크성 쿼리 최적화하기 (Mash-Up Maship Project) JPA 배치 처리로 벌크성 쿼리 최적화하기 (Mash-Up Maship Project)JPARepository에서 기본적으로 제공하는 메서..
스프링 트랜잭션 전파(Propagation)는 트랜잭션이 중첩되거나 여러 트랜잭션이 동시에 발생할 때, 이 트랜잭션들이 어떻게 상호작용할지를 결정하는 중요한 개념이다. HikariCP 커넥션 풀과 트랜잭션 관리스프링에서 트랜잭션을 다루는 경우, Hikari 커넥션 풀을 대부분 사용한다. 이때 반환되는 커넥션은 프록시 객체로 감싸져 있다. 프록시 객체의 주소는 매번 다르지만, 실제 물리적인 커넥션은 동일하다. 예를 들어, 두 개의 논리 트랜잭션이 동일한 물리 커넥션을 공유할 수 있다.중첩 트랜잭션중첩 트랜잭션은 하나의 트랜잭션이 진행 중일 때 또 다른 트랜잭션이 시작되는 상황을 의미한다. 이때 내부 트랜잭션이 외부 트랜잭션에 참여하는 것처럼 보이는 것이 기본 동작이다. 스프링에서는 이러한 동작을 통해 논리..