전체 글

· 개발
html을 파싱해서 썸네일 이미지를 추출해 Amazon S3에 저장해야 하는 일이 있었습니다.사이드 프로젝트 인 만큼 이미지 용량을 줄일 수 있으면 S3 비용도 아끼고 프론트 렌더링 속도 역시 개선되겠다고 생각이 들었고 resize와 webp 이미지 포맷을 사용하기로 결정했습니다. 이미지 읽기URL 정보를 통해서 이미지를 읽어와야 했었는데 Java에서 javax.imageio.ImageIO 클래스를 사용하면 쉽게 이미지를 읽고 쓸 수 있었습니다. URL 혹은 파일을 읽어서 처리가 가능합니다.BufferedImage image = ImageIO.read(new URL(이미지 주소));BufferedImage image = ImageIO.read(new File(이미지 저장 위치));java.awt.imag..
이번에 JPA를 통해서 외부 DB에서 데이터를 Read/Write를 수행하지만 Spring Batch의 메타 테이블은 분리하고 싶었습니다. Spring batch 5.0에서 @EnableBatchProcessing의 새로운 속성이 생겨 쉽게 구현할 수 있을 줄 알았습니다.Spring Batch가 구성해야 하는 dataSource 및 transactionManager를 지정할 수 있습니다. ⛔️ 주의점SpringBoot 3.0부터 @EnableBatchProcessing 혹은 DefaultBatchConfiguration을 상속받아 사용하면 AutoConfiguration이 동작하지 않습니다.더보기DefaultBatchConfiguration@EnabledBatchProcessing이 내부적으로 빈을 등록..
사용자의 메일함에서 뉴스레터가 전송한 메일을 여러개를 JpaItemWriter를 통해서 Insert 처리를 해주려고 합니다. 하지만 배치를 돌려보니 "Class 'class java.util.ArrayList' is not an entity class" 예외가 발생했습니다.Stack trace를 확인해보니 JpaItemWriter에서 write메서드가 수행되는데 받아온 객체가 Entity가 아니라 List.class라서 발생한 문제였습니다.doWrite를 호출하면서 SessionImpl 클래스에서 persist를 하기전에 체크하는 메서드들이 호출될 때 ArrayList는 Entity가 아니라서 예외가 발생하게 됩니다.즉 write 메서드에 T가 Article이 아니라 List이 들어오고 ArrayList..
· DB
트랜잭션: 작업의 데이터 정합성을 보장한다.논리적인 작업 셋을 모두 완벽하게 처리하거나, 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상(Partial update)이 발생하지 않게 만들어주는 기능잠금(Lock): 동시성을 제어하기 위한 기능격리 수준: 하나의 트랜잭션 또는 여러 트랜잭션 간의 작업 내용을 어떻게 공유하고 차단할 것인지를 결정하는 레벨을 말한다.트랜잭션MyISAM이나 MEMORY 같이 트랜잭션을 지원하지 않는 스토리지 엔진의 테이블이 InnoDB 스토리지 엔진보다 더 많은 고민거리를 만들어 낸다.MySQL에서의 트랜잭션트랜잭션이란 논리적인 작업 셋 자체가 100% 적용되거나(Commit) 아무것도 적용되지 않아야(Rollback)함을 보장해 주는 것이다.CREATE..
· 개발
운이 좋게 조영호님 도메인 주도 설계의 사실과 오해 강의를 들을 수 있었습니다.DDD의 철학이 담긴 에릭 에반스의 도메인 주도 설계 책에 내용을 설명해주셨고 이에 대해서 요약한 글입니다. DDD는 복잡한 도메인 문제를 소프트웨어로 해결하기 위한 사고 방식이자 우선 순위등의 패턴이다.특정한 기술과는 무관한 사고 방식이다.1️⃣ 동작하는 도메인 모델 만들기도메인 정의사용자가 프로그램을 사용하는 주제 영역을 의미한다.사용자가 음식을 배달시키는 플로우메뉴를 선택한다. (사용자)특정 가게에서 음식을 주문한다. (사용자)조리 (식당)배달 (기사님)결제 (사용자)식사 (사용자)모델도메인 대상의 단순화로 당면한 문제를 해결하는 것과 관련된 측면을 추상화하고 중요하지 않은 세부사항은 생략한다.위에 플로우에서 배달 도메인..
uhanuu
몸뚱아리부터 마음가짐까지