티스토리

yeseul.log
검색하기

블로그 홈

yeseul.log

yeseul-dev.tistory.com/m

예슬 님의 블로그입니다.

구독자
8
방명록 방문하기

주요 글 목록

  • [사이드 프로젝트] 동생을 위한 우리집 예약 시스템 개발하기 동생이 우리 집에 자주 놀러 오는데, 그때마다 "언제 놀러 오는 거야?", "언제 와서 언제 나가?"라는 질문을 계속 해야 했다. 이 과정을 반복하는 것이 너무 불편해서 사이드 프로젝트로 '우리집 예약 시스템'을 만들기로 했다. 사용한 테크 스택DB: MySQLBE: Java 17, Spring, jOOQFE: Next.js (v0.dev의 도움을 받았다)사내에서 JPA도 물론 사용하지만, jOOQ도 사용해보게 되었는데, jOOQ만의 매력이 있는 것 같아 사이드 프로젝트를 하면 꼭 사용해보고 싶었다. 카카오톡 알람으로 서로에게 알람 메시지를 보내려고 했는데, 이 부분은 회원가입이 이미 되어있는 유저들만 가능 해서 개발 하는 시간 내에 구현을 다 하지 못할 것 같아 빠르게 구현하기 위해 나에게 채팅 보내기.. 공감수 4 댓글수 6 2025. 2. 12.
  • Aerospike에서 Redis로 마이그레이션하며 겪은 문제와 해결 과정 1. Aerospike vs Redis 간단 비교둘 다 NoSQL 데이터베이스지만, 아키텍처와 확장성에서 차이가 있다.특징AerospikeRedis아키텍처대규모 데이터 셋을 처리하도록 설계됨하이브리드 메모리 아키텍처(RAM & SSD 효율적 사용)단일 코어에서 실행되는 인메모리 데이터 구조 저장소주로 RAM에 데이터를 저장하도록 설계됨확장성자동 샤딩과 데이터 재분배를 통해 수평 확장에 최적화됨Redis Cluster를 통해 최대 1000개의 노드로 확장 가능수직 확장에 더 적합데이터 모델키-값 저장소와 문서 모델을 지원키-값 저장소이면서 다양한 데이터 구조를 지원 과거에는 Aerospike를 사용했지만, 최근에는 Redis 사용이 증가하고 레퍼런스가 적어지면서 Aerospike 서버를 Redis로 마이그.. 공감수 1 댓글수 1 2025. 2. 10.
  • Bucket4j를 이용해 API 요청 제한 정책 만들기 API 요청을 제어하려면 Rate Limiting(속도 제한) 이 필요합니다.이 글에서는 API를 "1분 이내 30번 요청 가능하지만, 24시간 동안 최대 30번만 허용"하는 Bucket4j의 정책을 설정하는 방법을 다룹니다.*Bucket4j을 도입하는 방법을 설명하는 것은 아닙니다.🧐 Rate Limiting이란?Rate Limiting(속도 제한)은 특정 시간 동안 허용할 요청 수를 제한하는 기술입니다.예를 들어:"1분에 60개의 요청 가능" (API 남용 방지)"24시간 동안 100개의 요청 가능" (과도한 사용 제한)이러한 제한을 적용하면 서버 부하를 방지하고, 공정한 API 사용을 보장할 수 있습니다.🛠 Bucket4j로 정책 설정하기Bucket4j는 토큰 버킷(Token Bucket) 알고.. 공감수 2 댓글수 1 2025. 2. 5.
  • 양방향 엔티티의 재귀 호출 문제와 해결 방법 새로 개발 중인 기능에 필요한 데이터 구조를 양방향 엔티티로 설계하게 되었습니다. 그런데 이 과정에서 양방향 참조로 인해 재귀 호출 문제가 발생하였고,이를 해결할 방법을 찾아보게 되었습니다. 예시 코드들은 업무와 무관하게 작성되었습니다. 문제 상황Category와 Product 엔티티는 양방향 연관관계를 가지고 있습니다. 예를 들어, Category는 Product의 리스트를 가지고 있고, Product는 다시 Category를 참조하는 구조입니다.  코드로 나타내면 다음과 같습니다.@Entity@Table(name = "category")public class Category { @Id private Long id; @OneToMany(mappedBy = "category", casca.. 공감수 1 댓글수 1 2025. 1. 5.
  • [5] 웹 개발자를 위한 대규모 서비스를 지탱하는 기술 대규모 서비스와 관련된 책 중에 유명한 책으로 알고 있는데, 마침 회사에 책이 있기에 읽어 보았습니다.읽는 데는 2주 반정도가 소요 되었습니다. 『웹 개발자를 위한 대규모 서비스를 지탱하는 기술』은 일본의 유명 웹사이트 하테나(Hatena)의 변천사를 다루며, 대규모 서비스를 구축하고 운영하는 데 필요한 기술과 인사이트를 전달하는 책입니다. 주요 내용 및 느낀 점이 책은 대규모 데이터를 다룰 때 필수적으로 알아야 할 세 가지 전제 지식을 바탕으로 얘기를 해줍니다.OS 캐시의 이해서버 분산과 RDBMS 운용대규모 환경에서의 알고리즘과 데이터 구조 활용 특히 하테나가 포털 사이트로서 시스템을 어떻게 구축했는지 자세히 설명하고 있어서, 현재 포털 사이트를 운영하는 회사에 다니고 있기에 정말 흥미롭게 읽을 수 .. 공감수 0 댓글수 0 2024. 12. 29.
  • 2024년을 마치며 벌써 신입 개발자로서 업무를 시작한 지 1개월이 다 되어갑니다. 2024년은 저에게 정말 많은 일이 있었던 한 해였습니다.이를 되돌아보며 회고 겸 블로그 글을 작성해 보기로 했습니다. 개발자라면 주기적인 회고를 통해 자신을 점검하는 게 중요하다고 생각하는데요, 이번 기회를 계기로 앞으로 꾸준히 회고 글을 올릴 수 있으면 좋겠습니다.1월~3월사실 처음 이야기하는 것이지만, 작년 12월에 우아한테크코스와 42에 지원했던 적이 있었어요. 물론 42에서 보낸 한 달은 즐거웠지만,함께했던 친구들 중 저만 불합격한 사실이 ‘내가 과연 개발자를 할 수 있을까? 공무원을 그만둔 게 잘못한 선택이었나?’ 하는 자괴감에 빠져 지냈습니다. 그리고 우아한 테크 코스 프리 코스를 함께 공부했던 스터디 원들과 함께 동아리(취지직.. 공감수 1 댓글수 1 2024. 12. 29.
  • [完] 스프링 배치 스터디 오프라인 모임 (with 스페셜 게스트 이동욱님, 김남윤님) 스프링 배치 스터디가 처음이자 마지막(?)으로 오프라인 모임을 갖게 되었습니다. 11월 30일 토요일(8회차)에 진행되었는데요,시간이 꽤 지나 기억이 흩어지긴 했지만... 늦기 전에 기록해두고 싶어서 이렇게 글을 쓰게 되었습니다. 😊 스터디 순서는 다음과 같이 진행 되었습니다.인사말8주차 스프링 배치 스터디특급 게스트(김남윤)님의 스페셜 세션특급 게스트(향로, 김남윤)님들의 개발자 Q&A 토크스프링 배치 퀴즈(진행 될 예정이었으나 시간 관계상 생략)중간 시상스터디원 단체 사진네트워킹: 피자 먹으면서 얘기하기 처음에 딱 들어갔을 때 배치가 완전 발표자를 기준으로 둥글게 되어있었는데,완전 면접하는 느낌(??)이어서  절대 발표자가 되면 안됐으면 좋겠다고.... 빌었습니다 ㅋㅋㅋㅋ 😂 대망의 발표자 뽑기 .. 공감수 5 댓글수 3 2024. 12. 23.
  • [10회차] 스프링배치 플로우 컨트롤 하기 아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatch 연재 10] 스프링배치 플로우 컨트롤 하기 [SpringBatch 연재 10] 스프링배치 플로우 컨트롤 하기 devocean.sk.com Spring Batch에서 flow 컨트롤은 Job 내에서 Step들의 실행 순서와 조건을 제어하는 기능입니다. FlowBuilder API를 사용하여 설정할 수 있습니다. 주요 APIFlow 컨트롤을 위해 Spring Batch에서 제공하는 주요 API들은 다음과 같습니다.next(): 순차적으로 Step들을 연결시킬 때 사용합니다.on(): 특정 Ex.. 공감수 0 댓글수 3 2024. 12. 16.
  • [9회차] 입맛에 맞는 배치 처리를 위한 Custom ItemReader/ItemWriter 구현방법 알아보기 아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatch 연재 09] 입맛에 맞는 배치 처리를 위한 Custom ItemReader/ItemWriter 구현방법 알아보기 [SpringBatch 연재 09] 입맛에 맞는 배치 처리를 위한 Custom ItemReader/ItemWriter 구현방법 알아보기 devocean.sk.com 스프링 배치를 사용할 때 비즈니스 로직에 맞는 배치 수행을 위해 커스텀이 필요합니다.커스텀을 위해 두 가지의 실습으로 나누어 진행 해보았습니다.QueryDSL을 활용해 QuerydslPagingItemReader 클래.. 공감수 0 댓글수 9 2024. 12. 14.
  • [인프콘 2024] 클린 스프링: 스프링 개발자를 위한 클린코드 전략 아래 글은 [인프콘 2024] 클린 스프링: 스프링 개발자를 위한 클린코드 전략 -토비님의 발표를 듣고 정리한 글입니다.  1. 클린 코드, 정말 필요한 걸까요?“클린 코드가 과연 구현 속도와 생산성을 떨어뜨리는 걸까?”그렇다면, 클린 코드는 무엇일까요? 발표에서는 로버트 마틴의 책 클린 코드를 중심으로 다음 네 가지가 언급되었습니다.읽기 좋은 코드이해하기 쉬운 코드확장하기 좋은 코드유지보수하기 좋은 코드결국 클린 코드는 단순히 원칙을 따르는 것이 아니라 ‘유지보수성’이라는 개념이 모든 것을 아우르는 본질이라고 강조하셨습니다.2. 클린 코드에 대한 오해들발표에서 흔히 듣는 클린 코드 관련 오해들이 소개되었습니다."클린 코드는 주석 없이도 충분하다.""클린 코드만 있으면 테스트는 필요 없다.""클린 코드는.. 공감수 1 댓글수 0 2024. 11. 28.
  • [8회차] CompositeItemProcessor 으로 여러단계에 걸쳐 데이터 Transform하기 아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatch 연재 08] CompositeItemProcessor 으로 여러단계에 걸쳐 데이터 Transform하기 [SpringBatch 연재 08] CompositeItemProcessor 으로 여러단계에 걸쳐 데이터 Transform하기 devocean.sk.com CompositeItemProcessor 란?Spring Batch에서 제공하는 ItemProcessor 인터페이스를 구현하는 클래스입니다.여러 개의 ItemProcessor를 하나의 Processor로 연결하여 여러 단계의 처리를 수.. 공감수 1 댓글수 1 2024. 11. 28.
  • [7회차] Spring Batch 스터디: 후기 및 추가 학습 내용 7회차는 Spring Batch의 MyBatisItemReaderWriter/Writer에 대해 공부했습니다.스터디 진행 전 교안을 공부하며 정리한 내용은 이곳에서 볼 수 있습니다. [7회차] MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatchyeseul-dev.tistory.com 스터디를 진행하면서 중요했던 내용들 몇 가지를 정리해보았습니다. 1. 마이바티스의 XML 방식과 인터페이스 방식 비교XML 방식장점: 대규모 쿼리나 복잡한.. 공감수 2 댓글수 4 2024. 11. 20.
  • [7회차] MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기 아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatch 연재 07] MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기 [SpringBatch 연재 07] MyBatisPagingItemReader로 DB내용을 읽고, MyBatisItemWriter로 DB에 쓰기 devocean.sk.com MyBatis는 자바 기반의 SQL 매퍼 프레임워크로, 애플리케이션에서 데이터베이스와 상호작용하기 위한 도구입니다. 주로 SQL 문을 직접 작성하고 이를 자바 코드와 연결하는 데 사용됩니다. JPA,.. 공감수 4 댓글수 3 2024. 11. 16.
  • [6회차] Spring Batch 스터디: 후기 및 추가 학습 내용 6회차는 Spring Batch의 JpaItemReaderWriter에 대해 공부했습니다. 스터디 진행 전 교안을 공부하며 정리한 내용은 이곳에서 볼 수 있습니다. [6회차] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatchyeseul-dev.tistory.com 1. JPA를 사용한 Batch 처리 중 예외와 데이터 무결성 문제Spring Batch와 JPA를 활용한 Batch 처리에서 다음과 같은 문제들이 발생할 수 있습니다.예외 발생 시 데이.. 공감수 4 댓글수 2 2024. 11. 16.
  • DDD에 대해서 간단하게 정리하기 도메인 주도 설계에 관심이 있어서 [NHN FORWARD 22] DDD 뭣이 중헌디? 🧐 를 보았는데,해당 영상만 보고는 쉽게 이해가 가지 않아 여러 영상들과 글들을 참고 해서 얕게나마 정리 해보았습니다. 정리 해두고 다음에 다시 보고 더 정리 해 봐야겠습니다. DDD (Domain-Driven Design)도메인이란 무엇인가?먼저, 도메인이란 특정 정보와 활동이 이루어지는 영역을 의미합니다. 프로그래머에게 도메인은 애플리케이션의 로직이 관여하는 정보와 활동의 영역을 나타냅니다. 예를 들어, "회원"이라는 도메인에서는 회원 가입, 탈퇴와 같은 회원과 관련된 일련의 작업들이 포함됩니다. 또한, "도메인 레이어"와 "도메인 로직"이라는 용어는 비즈니스 로직과 동일한 개념으로 받아들여집니다. 이 비즈니스 로.. 공감수 2 댓글수 0 2024. 11. 8.
  • [6회차] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기 아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다. 원본: [SpringBatch 연재 06] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기 [SpringBatch 연재 06] JpaPagingItemReader로 DB내용을 읽고, JpaItemWriter로 DB에 쓰기 devocean.sk.com 지난 시간에는 JdbcPagingItemReader/Writer에 대해 배웠습니다.본격적으로 공부하기 전, 두 클래스가 조금 헷갈려서 정리를 먼저 하고 진행하였습니다. JdbcPagingItemReader와 JpaPagingIt.. 공감수 1 댓글수 2 2024. 11. 8.
  • [5회차] Spring Batch 스터디: 후기 및 추가 학습 내용 5회차는 Spring Batch의 JdbcPagingItemReader/JdbcBatchItemWriter에 대해 공부했습니다. 스터디 진행 전 교안을 공부하며 정리한 내용은 이곳에서 볼 수 있습니다. [5회차] JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다.  [SpringBatch 연재yeseul-dev.tistory.com 이번 스터디 시간에는 주로 Paging과 Cursor의 차이점에 대해 이야기 나누는 시간을 가졌습니다.   스터디에 참여하신 김XX님께서.. 공감수 1 댓글수 1 2024. 11. 5.
  • [잔디 일기] Spring Boot에서 CORS 오류 해결과 클래스 관심사 분리: JwtAuthFilter와 WebMvcConfig 활용하기 CORS(Cross-Origin-Resource-Sharing)란?서로 다른 출처(Origin)에서 리소스를 공유하는 것을 말합니다. URL의 구조URL은 다음과 같은 6가지 요소로 구성됩니다.https://www.domain.com:8080/member?query=name&page=1#firsthttps:// www.domain.com :8080 /member ?query=name&page=1 #firstProtocol: https://Host: www.domain.comPort: :8080Path: /memberQuery string: ?query=name&page=1Fragment: #first여기서 Protocol, Host, Port 부분이 Origin(출처)입니다. CORS 설정이 되어 있지 .. 공감수 2 댓글수 8 2024. 11. 3.
  • [스프링캠프 2024] Spring AI: LLM에도 봄이 찾아오다 아래 글은 [스프링캠프 2024] Spring AI : LLM에도 봄이 찾아오다 (황민호)님의 발표를 듣고 정리한 글입니다.  1. 발표자 소개황민호 개발자님은 카카오에서 10년차 개발자로서 다음 클라우드, 다음 검색, 모먼트 광고 플랫폼, 오픈소스 플랫폼 등 다양한 프로젝트를 스프링 부트로 개발해왔습니다. 현재는 AI 교육 자문과 CTO 기술 전략 스텝 역할을 수행하고 있으며, ChatGPT 등장 이후 AI 관련 발표를 활발히 진행하고 있습니다. 2. 생성형 AI의 역사와 현재생성형 AI는 단순한 객체 인식 기술을 넘어, 텍스트, 이미지, 사운드 등 다양한 형태로 정보를 생성할 수 있는 능력을 갖추게 되었습니다. 기존 객체 인식 모델인 YOLO와 같은 딥러닝 모델은 특정 객체를 인식하는 데 주력했지만,.. 공감수 11 댓글수 5 2024. 11. 3.
  • [Cloud Wave 3기] 프로젝트 시작 전, 올리브영 테크 블로그에서 프로젝트 방향성 찾기 대규모 트래픽을 고려한 올리브영 아키텍처 구축 프로젝트(2024.08.12. ~2024.08.30.(3주))를 진행하며 기록한 내용을 아카이브 용도로 남깁니다. 금요일에 프로젝트 주제가 발표된 후 그 다음주부터 바로 프로젝트를 진행해야 했기 때문에주말 동안 프로젝트의 방향성을 잡기 위해 올라와 있는 올리브영 테크 블로그 글들을 보며 중요한 점들을 정리했습니다. 가능한 모든 게시글을 확인하며 도움이 되거나 중요한 내용들을 최대한 정리해두었습니다. 그 중 특히 중요했던 두 가지를 간추려 간단히 정리해보았습니다. 1. CI/CD 툴로 Jenkins를 채택하지 않은 이유저희 팀 프로젝트의 경우 결과적으로 Jenkins를 사용하지 않고 ArgoCD와 Gitlab을 이용했습니다.다음과 같은 이유 때문입니다.인용: .. 공감수 2 댓글수 2 2024. 11. 3.
  • [잔디 일기] Spring에서 이메일로 댓글 알림 전송하기 잔디 일기 서비스의 2차 배포 이후 가장 먼저 구현해야 할 기능은 댓글 알림 기능이라고 판단했습니다. 이 기능은 기존 회원들이 다시 방문하도록 유도할 수 있어, 서비스 활성화에 중요한 역할을 합니다. 알림 기능은 크게 세 가지 방법을 고려했습니다. 웹 브라우저 알림: 사용자 브라우저에서 권한을 요청하고, 실시간으로 알림을 전송할 수 있습니다. 다만, 사용자가 권한을 허용하지 않으면 효과가 제한적입니다.UI 내 알림 기능 추가: 웹 서비스 내부에 알림 확인 기능을 추가할 수 있습니다. 그러나, 서비스를 방문해야만 알림을 확인할 수 있다는 점에서 재방문 유도에는 한계가 있습니다. 또한 프론트엔드 개발자분들의 업무 일정으로 추가 작업이 어려워 새로운 기능 개발이 어려웠습니다.이메일 알림: 현재 구글 로그인 방.. 공감수 2 댓글수 0 2024. 11. 3.
  • [hot deal] API 설계 과정에서의 고민 1. Redis와 Kafka를 활용해서 물건 구매 로직을 구현한 이유1. Redis를 이용한 실시간 재고 관리물건 구매 요청이 들어오면 Redis에서 물건 수량을 즉시 감소하도록 설계했습니다. 서비스는 예약된 시간에만 오픈되기 때문에, 서비스 시작 전 Redis에 물건의 초기 수량을 미리 저장해두는 방식으로 준비하고 있습니다. 현재는 물건 수량 감소 로직만 구현되어 있지만, 추후 서비스가 안정화되면 Redis에 물건 수량을 미리 저장하는 로직도 추가할 계획입니다.2. Kafka를 이용한 순차적 DB 반영한 번에 대량의 구매 요청이 들어올 경우를 대비해 Kafka를 사용하여 데이터의 순차 처리를 보장하고자 했습니다. 물건 구매 요청이 발생하면 해당 요청을 Kafka에 기록하고, Kafka의 Consumer.. 공감수 0 댓글수 0 2024. 11. 3.
  • [hot deal] UUID의 사용 범위에 대한 고민 서비스를 개발할 때 UUID를 Primary Key로 사용하는 방법이 있습니다. 하지만 저는 Member 클래스에만 UUID를 필드로 추가하였고, 그 이유를 정리해 보았습니다. 1. 왜 UUID 사용하지 않아야 할까?UUID는 전역적으로 고유한 식별자를 생성할 수 있어 데이터베이스의 ID로 자주 사용됩니다.하지만 프로젝트를 진행하면서 저장 공간 효율성과 검색 성능을 고려해 UUID를 ID로 사용하지 않기로 결정 했습니다. 1.1. 저장 공간 효율성UUID는 128비트로 길이가 길어, 숫자형 ID보다 더 많은 저장 공간을 차지합니다. 1.2. 검색 성능UUID는 랜덤하게 생성되기 때문에 데이터베이스에서 인덱스를 생성할 때 정렬되지 않은 상태로 저장됩니다.이로 인해 데이터베이스 검색 시 성능이 떨어질 수 있.. 공감수 1 댓글수 3 2024. 11. 3.
  • [hot deal] 새로운 객체 생성에 Builder 패턴을 사용하지 않은 이유 최근 프로젝트에서 객체 생성 시 Builder 패턴을 도입할지 고민했지만, 필수 필드 누락으로 인해 객체가 잘못 생성될 위험이 있어 Builder 패턴을 사용하지 않기로 결정했습니다. 이에 대해 간단히 기록해 보았습니다. 1. Builder 패턴의 장점1.1. 가독성 향상Builder 패턴은 복잡한 객체의 생성 과정을 가독성 높게 표현할 수 있습니다.// 예시: Builder 패턴을 이용한 객체 생성Member member = new Member.Builder() .id(1L) .name("Yeseul Hong") .email("yeseul@example.com") .. 공감수 1 댓글수 1 2024. 11. 2.
  • [Spring] CustomPageSerializer 를 사용해서 Page 응답을 커스텀하기 1. Page 응답을 커스텀한 이유기본적으로 Spring Data JPA는 페이지네이션된 데이터를 반환할 때 Page 객체를 제공합니다. 하지만 Page 객체는 많은 메타데이터를 포함하고 있어 클라이언트가 필요로 하지 않는 정보까지 응답에 포함됩니다. 클라이언트가 필요한 정보만 가볍게 전달하기 위해 PageResponse라는 커스텀 DTO를 만들어 원하는 정보만 담도록 직렬화해서 사용하였습니다. 주요 목적응답 구조 간소화: 필요한 데이터와 페이지 메타데이터만 포함하여 클라이언트가 쉽게 이해하고 파싱할 수 있도록 만듭니다.불필요한 데이터 제거: 응답 크기를 줄이고 성능을 개선합니다.일관성 있는 응답 제공: 모든 페이지 응답이 동일한 구조를 가짐으로써, 클라이언트는 일관된 API 경험을 얻게 됩니다. 2. .. 공감수 1 댓글수 0 2024. 11. 2.
  • [Spring] 기본 자료형이 아닌 구체적인 자료형 생성하기 Hot Deal이라는 프로젝트를 진행하면서 어떻게 하면 데이터의 무결성을 보장할 수 있을지 고민해보았습니다. 가격이나 재고와 같은 특정 값을 다룰 때는 이 값들이 항상 올바른 범위를 가지도록 하는 것이 중요합니다. 그렇지 않으면 잘못된 값이 비즈니스 로직에 흘러들어가 시스템 전체에 오류를 일으킬 수 있기 때문입니다. 이러한 문제를 해결하기 위해 구체적인 자료형을 생성해 보았습니다. Java의 기본 자료형이 아닌, 값 자체에 대한 제약 조건을 포함하는 Price와 Quantity 클래스를 만들어 활용했습니다. 이로써 코드 중복을 줄이고, 생성과 동시에 유효성 검증을 통해 데이터 무결성을 보장할 수 있습니다. 1. 왜 기본 자료형이 아닌 구체적인 자료형을 선택했을까?가격(Price)과 재고(Quantity).. 공감수 0 댓글수 0 2024. 11. 2.
  • [5회차] JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기 아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다.  [SpringBatch 연재 05] JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기 devocean.sk.com원본: [SpringBatch 연재 05] JdbcPagingItemReader로 DB내용을 읽고, JdbcBatchItemWriter로 DB에 쓰기 지난 시간에는 FlatFileItemReader와 FlatFileItemWrite를 이용하여 Batch Job을 실행해 보았습니다. 이번 시간에는 Jdbc를 활용해서 데이터베이스를 이용한 Batch Jo.. 공감수 0 댓글수 1 2024. 11. 2.
  • Kubernetes 환경에서 Spring Boot 애플리케이션 모니터링하기: Prometheus와 Grafana 설정 가이드 오늘은 Kubernetes 환경에서 Spring Boot 애플리케이션을 Prometheus와 Grafana를 사용해 모니터링하는 방법을 상세히 알아보겠습니다.특히 ServiceMonitor 설정 시 자주 발생하는 문제와 해결 방법에 대해 중점적으로 다루어보려 합니다. 이 포스트는 Kubernetes 클러스터에 배포된 Spring Boot 애플리케이션의 메트릭을 Prometheus로 수집하고, Grafana를 통해 시각화하는 과정을 다룹니다.이 설정은 Helm을 이용해 Prometheus와 Grafana를 설치한 상태에서 진행됩니다. 1. Spring Boot 서버 설정1.1 Actuator 및 Prometheus 라이브러리 추가먼저 Spring Boot 애플리케이션이 Prometheus 메트릭을 제공하려.. 공감수 0 댓글수 1 2024. 11. 1.
  • [4] 면접을 위한 CS 전공 지식 노트 CS 면접 준비할 때 가장 유명한 책이라 읽고 정리해 보았습니다.핵심 내용을 마인드맵 서비스로 시각화해 보았습니다. 크게 5가지 목차로 구성되어있습니다.1. 디자인 패턴2. 네트워크3. 운영체제4. 데이터 베이스5. 자료구조 1장과 2장: 디자인 패턴과 네트워크디자인 패턴 내용은 기록을 따로 하지 않아서 남아 있는 내용이 많지 않네요.'디자인 패턴 종류'에 대해 검색하면 찾을 수 있는 내용으로 구성되어 있었고, 특히 간단한 코드로 구현되어 있어 이해하기 쉬웠습니다. 3장: 운영체제양이 많아 일부를 생략하여 표현했습니다. 4장: 데이터 베이스 5장: 자료구조    여기에서 나온 모든 키워드들을 전부 이해하고 술술 말할 수 있다면 정말 좋겠죠? 읽기 전에는 책이 얇아서 별로 기대를 하지 않았는데,생각보다 많.. 공감수 5 댓글수 1 2024. 10. 31.
  • [4회차] Spring Batch 스터디: 후기 및 추가 학습 내용 4회차는 Spring Batch의 FlatFileItemReader/Writer에 대해 공부했습니다. 스터디 진행 전 교안을 공부하며 정리한 내용은 이곳에서 볼 수 있습니다. [4회차] FlatFileItemReader로 단순 파일 읽고, FlatFileItemWriter로 파일에 쓰기아래 글은 한국 스프링 사용자 모임(KSUG)에서 진행된 스프링 배치 스터디 내용을 정리한 게시글입니다.DEVOCEAN에 연재 중인 KIDO님의 글을 참고하여 실습한 내용을 기록했습니다.  [SpringBatch 연재yeseul-dev.tistory.com 스터디가 진행 되는 시간에 나눴던 얘기들을 조금 정리해 보겠습니다. Spring Batch 5는 Job이 여러개가 존재한다면 실행시에 어떤 Job을 실행할 것인지 명시 .. 공감수 6 댓글수 2 2024. 10. 30.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.