ssddo-story
close
프로필 사진

ssddo-story

github: @denev6

  • 분류 전체보기 (75)
    • SpringBoot (10)
    • SpringBatch (1)
    • webFlux (6)
    • DB & SQL (9)
    • JAVA (7)
    • Docker (1)
    • ORM & DSL (9)
      • JPA (3)
      • jOOQ (6)
    • AWS (5)
    • AI (1)
    • React (12)
      • 설치 및 환경 구축 (1)
      • 기본 (4)
      • 활용 (7)
    • CS (3)
    • 공통 (8)
    • 프로젝트 (2)
  • 홈
  • 태그
  • 방명록
[공통] git submodule 사용해보기

[공통] git submodule 사용해보기

프로젝트 구조를 설계할 때 단일 모듈로 할지 멀티 모듈에 관한 이야기를 하기도 합니다.그런데 이 두 가지 말고도 깃에서 제공하는 서브모듈을 사용하는 방법도 있습니다.단일 모듈과 멀티 모듈은 하나의 저장소 안에서 코드를 나누는 방법이고,서브모듈은 저장소를 따로 두고 다른 저장소를 가져다 쓰는 방법입니다.이번 글에서는 서브모듈이 무엇인지, 프로젝트에 어떻게 붙이는지, 그리고 서브모듈 코드를 수정하는 두 가지 방법과 어떤 구조에서 쓰면 좋은지 정리해보겠습니다. 1️⃣ 서브모듈은 뭘까서브모듈은 다른 저장소를 내 저장소 안에 폴더처럼 넣어두는 Git 기능입니다.GitHub 기능이 아니라 Git 기능이고, GitHub 는 이걸 화면에 링크로 보여주기만 합니다.멀티 모듈은 저장소 하나 안에서 모듈을 나누..

  • format_list_bulleted 공통
  • · 2026. 10. 25.
[jOOQ] jOOQ 와 Hibernate 의 UTC 기준

[jOOQ] jOOQ 와 Hibernate 의 UTC 기준

DB 에 같은 시각을 저장했는데 시간을 저장하는 필드의 시간 값이 9시간 차이가 났습니다.(하나의 컬럼은 KST, 다른 하나의 컬럼은 UTC로 저장됐던 것)원인은 한 프로젝트 안에서 Hibernate 와 jOOQ 를 같이 쓰면서 같은 테이블의 같은 날짜 컬럼에 값을 쓰고 있었고,두 라이브러리가 날짜를 DB 에 넘기는 기준이 서로 달랐기 때문이었습니다. 1️⃣ Hibernate 와 jOOQ 는 뭐가 다를까둘 다 자바 코드에서 DB 를 다루기 위한 라이브러리지만 접근 방식이 반대입니다.구분HibernatejOOQ한 줄 설명자바 객체를 저장하면 SQL 을 대신 만들어주는 ORM (JPA 구현체)SQL 을 자바 코드로 직접 작성하게 해주는 라이브러리SQL 작성Hibernate 가 자동 생성개발자가..

  • format_list_bulleted ORM & DSL/jOOQ
  • · 2026. 10. 11.
[JAVA] 엑셀 다운로드로 서버 터뜨리기

[JAVA] 엑셀 다운로드로 서버 터뜨리기

백오피스에서 엑셀 다운로드를 눌렀는데 서버가 다운되었습니다.당시 에러 : java.lang.OutOfMemoryError: Java heap space서버에서 Workbook 으로 엑셀 파일을 만들면 메모리를 많이 먹는다는 건 이미 알고 있었기 때문에서버는 데이터만 내려주고 엑셀 파일은 프론트에서 응답값으로 만들도록 해둔 상태였습니다. 응답도 스트리밍으로 한 줄씩 내려주고 있음에도 불구하고 백오피스 조회기간을 조금 늘리자 응답이 몇 MB 단위로 커졌고, 힙이 그걸 버티지 못하고 죽었습니다.대용량 엑셀 다운로드 OOM 해결 방법은 검색하면 많이 나옵니다. 그런데 제가 알고 싶었던 건 해결 방법보다 숫자였습니다. (얼마만큼 버틸 수 있는지..)서버 메모리가 몇 GB 일 때, 몇 건을 몇 명이 동시에 받으면 ..

  • format_list_bulleted JAVA
  • · 2026. 9. 27.
[SpringBatch] 과거 Job Parameter가 계속 따라오는 이유

[SpringBatch] 과거 Job Parameter가 계속 따라오는 이유

주기적으로 실행되는 배치 잡의 시작 로그에, 한참 전에 딱 한 번 쓰였던 파일명이 매 실행마다 찍히고 있었습니다.스케줄러는 그 값을 넘기지 않았고, 누가 수동으로 넣은 것도 아니었습니다.그런데도 그 값이 계속 되살아나면서 메타테이블에 새 행으로 쌓이고 있었습니다.단순 확인용을 위해 로그에 찍힌 것이었지만 처음에 보았을 때는 실행한 적없는 파일이 로그에 찍혀서 매우 놀랐었습니다..(정말)원인은 모든 잡에 공통 설정을 붙여주는 코드 몇 줄이었습니다.이번 글에서는 왜 이런 일이 생길 수 있는지 정리해보겠습니다. 1️⃣ 스프링 배치란?스프링 배치는 대량 데이터를 일괄로 처리하는 작업을 만들기 위한 프레임워크입니다.웹 API 는 사용자가 요청할 때 실행되지만, 배치는 내가 정한 시점에 내가 실행시킵니다..

  • format_list_bulleted SpringBatch
  • · 2026. 9. 13.
[프로젝트] 태권도 관장님께 드린 작은 선물

[프로젝트] 태권도 관장님께 드린 작은 선물

태권도를 다니고 있습니다.단 취득이 목적이었지만 재활을 곁들인..저에게 만큼은 재활치료사 같았던 관장님께 작은 선물을 드리기로 했습니다. 제가 다니는 태권도장은 개관한지 얼마 안 된 성인 태권도장입니다.때문에 출결시스템을 수기로 진행하고 있었습니다.매일 어느시간대에 누가 오는지를 매일 카톡으로 여쭤보시고, "오늘 몇시부에 참석하겠습니다"라는 카톡을 보내야했기 때문에 번거로움이 있습니다. 심지어 실제로 왔는지 여부는 당일날 수업을 진행하시는 도중 수기로 체크를 하셨습니다. 이런 점이 불편하실 것 같아서 불편하진 않으신지를 여쭤봤는데아니나다를까..너무 불편하지만, 출결시스템 이용료를 아직 낼 수 없다고 하셨습니다. 자동화에 미친 개발자는 언젠가..언젠가.. 만들어드리면 좋겠다..라는 생각을 하고 그렇게 ..

  • format_list_bulleted 프로젝트
  • · 2026. 8. 29.
[JAVA] 21보다는 25를 써야하는 이유

[JAVA] 21보다는 25를 써야하는 이유

서버의 아웃바운드 공인 IP 를 조회해서 캐싱해두는 간단한 컴포넌트가 있었습니다.캐시가 만료되면 외부 엔드포인트를 호출해서 IP 를 다시 받아오고, TTL 만큼 다시 캐싱하는 구조입니다.이때 캐시가 만료된 순간 여러 스레드가 동시에 들어와서 외부 호출을 중복으로 날리는 것을 막기 위해 synchronized 블록으로 한 스레드만 갱신하도록 막아두었습니다.흔히 쓰는 single-flight 패턴입니다. 문제는 이 애플리케이션이 가상 스레드(Virtual Thread) 위에서 돌고 있었고, JDK 버전이 21 이었다는 점입니다.synchronized 블록 안에 블로킹 HTTP I/O 가 들어 있었기 때문에, 이 코드는 JDK 21 에서 캐리어 스레드를 pinning 하는 코드였습니다. 이번 포스팅에서는 왜 ..

  • format_list_bulleted JAVA
  • · 2026. 8. 15.
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 13
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (75)
    • SpringBoot (10)
    • SpringBatch (1)
    • webFlux (6)
    • DB & SQL (9)
    • JAVA (7)
    • Docker (1)
    • ORM & DSL (9)
      • JPA (3)
      • jOOQ (6)
    • AWS (5)
    • AI (1)
    • React (12)
      • 설치 및 환경 구축 (1)
      • 기본 (4)
      • 활용 (7)
    • CS (3)
    • 공통 (8)
    • 프로젝트 (2)
인기 글
전체 방문자
오늘
어제
Copyright © ssddo 모든 권리 보유.
SKIN: Copyright © 쭈미로운 생활 All rights reserved. Designed by JJuum.
and Current skin "dev-roo" is modified by Jin.

티스토리툴바