반응형 분류 전체보기97 Composite 패턴과 Method Chaining 방식을 활용한 Validator 구현하기 배경비즈니스 로직을 구현하다 보면, 특정 로직이 수행되기 전에 입력값이나 상태를 검증해야 하는 경우가 있다. 어떤 작업을 처리하기 위해 입력 데이터가 특정 조건을 충족해야 하는 경우를 생각해볼 수 있다.Spring Boot 을 사용하는 환경이라면 일반적으로 각 검증을 별도 Validator 로 구현하고, 이를 스프링 빈으로 등록하여 사용할 수 있다. 이 방식에서 Validation 결과를 Errors 객체에 담아 처리하거나, 조건을 만족하지 않으면 로직 수행을 반려하는 형태로 동작한다. 하지만 이 방식에는 몇 가지 한계점이 존재하는데, Validator 를 AND 조건으로 평가해야 하며, OR 조건 등 다른 Operation 이 필요한 경우에 대한 확장성이 좀 떨어진다.입맛에 맞게 검증 로직을 처리하기 .. 2025. 1. 26. [회고] 어쩌다 개발 6년차 (광운대 특강) 자료특강2023년 11월에 광운대에서 "어쩌다 개발 6년차" 라는 주제로 특강을 했다. 총 1시간 15분정도 진행했고 그 중에서 30분정도는 질의응답 시간이었다. 특강을 듣는 학생 수를 가늠하긴 어렵지만 대략 70명에서 80명쯤, 100명이 안되게 참석한 것 같이 느껴졌다. 강의실도 작지 않았고 학생들도 가득 차 있어서 긴장을 하며 발표 자리로 갔다.교수님께서 나에 대한 소개를 해주시며 마이크를 넘겨주셨다. 발표 연습한대로 진행하기 시작했는데 긴장이 너무 되었다. 키보드로 다음 슬라이드를 눌러 넘겨야 하는데 버튼을 클릭하기가 어려웠다. 학생들에게 특강 참여 유도를 하기 위해서 스타벅스 커피 상품권을 사서 갔다. 맨 앞에 앉은 학생들에게 앞에 앉아줘서 고맙다면서 상품권 3장을 나눠줬는데, 멘트가 좀 약했던.. 2024. 4. 6. Unable to obtain ZonedDateTime from TemporalAccessor 문제 상황 String 으로 된 날짜 값을 ZonedDateTime 으로 변환하고자 했다. "20240405183955" ==> 2024-04-05 18:39:55 코드 ZonedDateTime 에서 제공하는 parse 메소드로 바로 변환하고자 했다. fun from(datetime: String, formatter: DateTimeFormatter): ZonedDateTime { return ZonedDateTime.parse(datetime, formatter) } 테스트 코드 @Test @DisplayName("시간과 포매터를 제공하면 ZonedDateTime 으로 변환할 수 있다.") fun fromTest() { // given val datetime = "20240405183955" val f.. 2024. 4. 5. 2024년 1분기 회고. 나에 대해 알아가는 시간 나는 롯데 자이언츠의 오랜 팬이어서 (부산에서 태어나서) 야구를 정말 좋아한다. 보는 것 뿐만 아니라 플레이를 하는 것도 좋아한다. 야구 선수 중 좋아하는 선수는 많지만 그 중 한 명이 오타니 쇼헤이이다. 그 이유는 바로 그가 고등학생 때 작성했다고 하는 만다라트 계획표 때문이다. 만다라트 계획표는 하나의 큰 목표를 이루기 위해 필요한 세부 목표를 정하고, 그 세부 목표를 이루기 위해 더 작은 단위의 행동이 적혀있다.아래는 오타니가 작성해둔 계획표인데, 최종 목표로는 8구단 트래프트 1순위 이고, 이를 이루기 위해서는 몸 만들기, 제구, 구위 등의 세부 목표가 있다. 또, 몸 만들기를 이루기 위해서는 몸관리, 영양제 먹기, 유연성 등의 더 작은 목표와 행동이 적혀있다. 오타니의 만다라트 계획표처럼 상세히.. 2024. 4. 1. 15. 실시간 데이터 저장 파이프라인 구축하기 (feat. 카프카 활용기) 들어가며코인은 주식과는 다르게 24시간 거래가 가능합니다. 때문에 코인에 대한 기술적 분석을 하기 위해서는 24/7 발생되는 실시간 데이터를 수집하고 처리할 수 있어야 합니다. 카프카를 활용하여 실시간으로 코인 데이터를 수집하는 데이터 파이프라인 구축 사례를 공유합니다.무엇이 필요할까?어떤 코인 데이터를 어떤 방법으로 수집할 수 있을지 알아보자.Upbit OPEN API코인 데이터는 각 거래소에서 제공하는 OPEN API 를 통해 조회할 수 있다. 나는 코인 거래소 중 하나인 업비트에서 제공하는 API 를 사용하고자 한다. 업비트에서는 분(minute) 단위 캔들 데이터를 조회할 수 있는 API 를 제공하고 있다. (API 문서) 이 API 를 통해 각 코인의 분 단위 캔들 데이터를 최대 200개까지 조.. 2023. 8. 20. 14. GitHub Action 에서 스프링 배치 실행하기 지난 시간에 SpringBatch 5 를 기반으로 배치잡을 만들었습니다 (관련 포스팅). 보통 배치잡은 젠킨스 (Jenkins) 등의 별도 스케줄러를 통해 실행시키게 됩니다. 하지만 젠킨스를 활용하려면 젠킨스를 위한 별도의 서버를 두거나 로컬에 띄워두어야 하는 번거로움이 있습니다. 이번 시간에는 GitHub Action 을 활용하여 별도 서버를 두지 않고, 스프링배치를 활용하는 방법에 대해 알아보겠습니다. GitHub Action 이란? GitHub Action 은 배포를 위한 CI/CD, 빌드 테스트, 스크립트 실행 등 워크플로우 (workflow) 를 자동화시켜주는 툴입니다. Public 저장소의 경우는 무료이고, Private 저장소는 일정 시간까지만 무료로 제공됩니다. GitHub Free 요금제.. 2023. 8. 8. 13. SpringBatch 5 + Kotlin 적용하기 2022년 하반기에 SpringBoot 3.0 이 릴리즈 되었고 많은 변화가 있었습니다. (내용) 기본 Java 버전이 17 으로 올라갔고, SpringBatch 버전도 5 로 올라갔습니다. 이번 시간에는 SpringBatch 5 를 적용한 사례를 공유하고자 합니다. What's New in Spring Batch 5 SpringBatch 의존성 주입 SpringBatch 와 h2 데이터베이스 의존성을 주입한다. implementation("org.springframework.boot:spring-boot-starter-batch") implementation("com.h2database:h2") SpringBatchApplication 생성 배치잡은 실행이 되고 자동으로 종료되어야 하니 exitProc.. 2023. 7. 16. Docker Desktop 대체 OrbStack 도커 컨테이너를 로컬 환경에서 띄우기 위해 Docker Desktop 이라는 프로그램을 사용한다. Docker Desktop 공식 홈페이지 좀 더 가볍게 사용할 수 있는 프로그램으로 OrbStack 이라는 프로그램이 있다. 공식 사이트에 의하면 부팅 속도도 2초로 Docker Desktop (15초)에 비해 훨씬 빠르고 CPU 사용률이나 host-container 간 네트워크 속도도 빠르다고 한다. Docker Desktop vs. OrbStack 비교 문서 무료이기도 하고 가볍기도 하고 꽤 괜찮은 것 같다. 2023. 7. 15. 이전 1 2 3 4 ··· 13 다음 반응형