SpringBoot (10) 썸네일형 리스트형 좋아요 구현, Exclusive Lock에 대해서 알아보자. 오늘 포스팅에서 체험해 볼 내용은 'Exclusive Lock (X-Lock, 배타적 잠금)' 에 관한 내용입니다 좋아요 기능을 구현하기에 앞서, Lock에 대해서 좀 더 깊이 공부할 필요가 있다고 느꼈고, 직접 가상의 테이블을 생성해서 테스트해보기로 했습니다. 그 과정을 공유해보도록 하겠습니다. 테스트 환경은 Docker, Mysql로 하였습니다. Docker에서 Mysql을 pull해주시고, DB를 생성해주세요.저는 joney-board-mysql 이라는 이름으로 db를 띄웟습니다. docker exec -it [컨테이너 이름 또는 번호] bashmysql -u root -p비밀번호 입력테스트를 위해 스키마 생성 후, 테이블을 하나 생성해줄게요.create database test_db; use te.. [Spring Batch] JobParameters와 Scope Spring Batch에서 단순히 로직을 짜는 것만큼이나 중요한 것이 바로 "외부에서 값을 어떻게 주입받고, 어떻게 관리할 것인가?" 입니다. 이 메커니즘을 제대로 이해하지 못하면, 매번 코드를 수정해서 배포해야 하는 끔찍한 상황이 벌어집니다.오늘은 배치의 입력값을 다루는 JobParameters와, 배치의 생명주기를 관리하는 JobScope/StepScope에 대해 완벽하게 정리해 봅니다. 오늘은 배치의 입력값을 다루는 JobParameters와, 배치의 생명주기를 관리하는 JobScope/StepScope에 대해 완벽하게 정리해 봅시다. 1. JobParameters: 배치의 입력값JobParameters는 배치 작업 실행 시 외부에서 주입하는 파라미터입니다. 단순한 Java Main Argumen.. [Spring Batch] Tasklet vs Chunk 간단 정리 Spring Batch를 다루다 보면 Step을 구성하는 두 가지 큰 갈래길, Tasklet과 Chunk를 마주하게 됩니다. "그냥 대충 쓰면 되는 거 아냐?"라고 생각했다면 오산! 이 둘은 용도가 명확히 다릅니다. 1. Tasklet 모델: "단순하고 명료하게"Tasklet은 말 그대로 '하나의 작업(Task)'을 처리하는 데 집중합니다. 복잡한 읽기/쓰기 과정 없이, "이거 실행하고 끝내!" 할 때 딱입니다.언제 쓸까?: 임시 파일 삭제, DB 프로시저 호출, 슬랙 알림 발송 등특징: execute 메서드 하나로 모든 로직이 끝납니다.📝 코드 예제: 오래된 로그 정리하기Tasklet 인터페이스를 구현하여, 7일 지난 로그 파일을 지우는 작업을 만들어 봅시다.@Slf4j@Componentpublic .. Kafka를 이용해서 인기글 서비스를 어떻게 구현할 수 있을까? 실시간 인기글 서비스, Kafka로 어떻게 만들까요?0. 목표 한 줄 요약일 단위 상위 10건 인기글을 매일 오전 1시에 제공해요.점수 공식은 (좋아요 × 3) + (댓글 × 2) + (조회수 × 1) 예요.최근 7일만 유지하면 충분해요.대용량 트래픽에서도 빠르고 안전하게 동작하도록 Kafka + Redis 기반 스트림 처리로 구현해요.1. 배경과 문제 정의1-1. 단순 배치로는 왜 아쉬울까요?배치로도 다음 순서로 구현할 수 있어요.자정 이후 전날 게시글 전수 스캔좋아요/댓글/조회수 조회점수 계산상위 10건 선정하지만 이런 문제가 생겨요.데이터가 매우 많으면 1시간 내 처리가 빡빡해져요.“00:10에 노출해야 한다”처럼 정책이 바뀌면 유연하지 않아요.좋아요/조회수/댓글이 각각 다른 마이크로서비스에 흩어져.. 분산 이벤트 스트리밍 플랫폼, Kafka 아는척해보기 "Kafka Cluster", 왜 필요할까?대규모 데이터를 실시간으로 처리하려면 어떤 시스템이 필요할까요?바로 Kafka예요.Kafka는 분산 이벤트 스트리밍 플랫폼으로, 고성능과 확장성, 그리고 안정성을 바탕으로 대량의 데이터를 처리할 수 있게 도와줘요.우리 프로젝트에서도 여러 서비스 간에 이벤트를 주고받고, 이를 안전하게 처리하기 위해 Kafka를 활용하고 있어요.이번 글에서는 Kafka의 구조와 핵심 개념들을 차근차근 살펴볼게요.Producer와 Consumer Kafka의 기본 개념부터 볼까요?Producer(프로듀서): 데이터를 생산해서 Kafka로 전송하는 주체예요.Consumer(컨슈머): Kafka에 쌓인 데이터를 구독해서 처리하는 주체예요.원래는 Producer가 Consumer에게 직접.. Swagger를 사용해서 쉽게 api명세서를 만들어보자! 나는 프론트앤드 개발자들과 협업을 통해 프로젝트를 진행중이다.간단한 프로젝트니 api가 별로 없다고 생각할 수 있겠지만 추후 지속적인 개발을 통해 api가 수도없이 많아졌을 때,하나하나 보면서 api명세서를 눈빠지게 작성하고 있을수는 없다. 개발환경 : Springboot 3.x, Java17 Swagger란 무엇인가?Swagger는 RESTful API를 설계, 빌드, 문서화, 소비하기 위한 도구 모음이다. 이를 통해 API를 자동으로 문서화하고, 클라이언트와 서버 간의 원활한 소통을 가능하게 한다. Swagger는 특히 대규모 프로젝트에서 API 설계와 문서화를 일관되게 관리하는 데 유용하다. 1. build.gradle에 의존성 추가하기implementation 'org.springdoc:sprin.. Springboot에서 SMTP(google)를 통해 인증번호를 보내보자! 보통 회원가입을 하거나 비밀번호 찾기를 하다보면 해당 이메일을 받은적이 있을것이다.오늘은 그 방법에 대해 포스팅해볼것이다. 개발환경Springboot 3.xJava17Docker 우선 우리는 구글서비스를 통해 이메일을 보낼거기 때문에 깡통 구글 아이디를 만들어주자.오른쪽 상단에 ...을 클릭해서 계정을 클릭한다.smtp를 이용하려면 2차인증이 필수다. 보안 탭을 클릭해서 2차 인증 받아주자. 나중에 개발하다보면 알게되겠지만 비밀번호라는게 필요한데, 그 비밀번호는 로그인할 때 쓰는 비밀번호가 아니라'앱 비밀번호' 라는 걸 사용하고는 한다. 앱 비밀번호를 발급 받아보자.https://myaccount.google.com/apppasswords 로그인 - Google 계정이메일 또는 휴대전화accounts... JWT, Redis를 활용하여 RefreshToken을 관리해보자! JWT를 사용해서 로그인기능을 구현할 때, 보통은 RefreshToken도 함께 발급을 받는다.그 이유는 간단히 말하면, AccessToken은 탈취 당할 위험이 있으니까! 좀 더 자세하게 말해보면액세스 토큰은 일반적으로 클라이언트의 메모리나 로컬 스토리지, 쿠키에 저장된다.이 저장소가 외부 공격자에 의해 침해될 경우 토큰이 쉽게 탈취될 수 있는거다. 외부 공격자는 아래 두가지 공격으로 해당 토큰을 탈취한다. XSS(크로스 사이트 스크립팅): 악성 스크립트를 통해 브라우저의 로컬 스토리지에 접근하여 토큰을 탈취CSRF(크로스 사이트 요청 위조): CSRF 공격을 통해 쿠키에 저장된 토큰을 이용해 인증된 요청을 위장또는, 네트워크로 전송되는 과정에서 탈취가 될 수도 있는데 HTTPS가 아닌 HTTP를 통해.. 이전 1 2 다음