분류 전체보기 175

[만들면서 공부하는 디자인 패턴] 2 : 요금 계산은 어떻게 할까? - 요구사항과 적용 패턴 분석, 전략패턴 적용

지난 시간에 이어서 이번에는 요금을 어떤 디자인 패턴을 적용하면 좋을지 공부할 것이다. 지난 내용 여기 클릭! 우선 필자가 만든 프로젝트의 흐름을 간략하게 설명하겠다. 덩그러니 올라가 있는 프로젝트는 객실 예약 시스템인데... fee_start 라는 branch에서 공부를 진행해 볼 예정이다. 1탄에서는 요구사항과 적용할 패턴을 분석하고, 각각의 패턴에 대해서 알고 넘어갈 것이다. 1. 요구사항 객실을 예약한다고 한다면, 객실을 예약하는 순간 사용자는 일정 기간 특정 방을 예약하면 그 방에 따라 요금이 측정되야 할 것이다. 요금 생성에 반영되는 요인은 여러가지가 있다. 주간 평일보다는 주말에 가까울 수록 가격이 비쌀것이다. 그리고 성수기이면 주말 가격에 더해서 가격이 오를 것이다. 이러한 경우 금, 토,..

카테고리 없음 2024.04.06

[만들면서 공부하는 디자인 패턴] 1 - SOLID원칙 Review

최근에 필자는 회사에서 프로젝트를 하다가 인생 최대의 위기(?)에 맞닥드리게 된다. 그것은 바로... 발(영어로 foot)로 짜인 프리 랜서들의 코드에 맞닥드렸다는 사실이다. 나에게 이러한 것은 정말 신선한 분노를 선사했다. (하... 진짜... 다시 만나기만해봐...) Ship Sell Key들(배는 열쇄들을 판다) 그러면서 문득 이런 생각이 들었다. 해당 기능들을 어떻게 내가 구현했어야 이 사단이 안났을까? 자바는 객지지향을 구현하는데 있어서 굉장히 좋다고 들었는데 이것을 만약 내가 객체지향을 적용해서 코드들을 다시 수정하면 어떻게 해야하는걸까? 하는 것에서 출발을 했다. OOP(Object Oriented Programing - 객체지향프로그래밍)을 해도 물론 유지보수는 나의 상황처럼 유지보수가 일..

[Java] ForkJoinPool 알아보기

전에 Future랑 CompletableFuture에 대해 간단히 알아보았다. 이번에는 ForkJoinPool에 대해 알아보고자 한다. 지난 글에서 Future, FutureTask, CompletableFuture 에 대해 공부를 사알~짝 했었는데 이 내용을 보고 해당 글을 보면 더 이해가 잘 될 것이다. (지난 내용 클릭) 1. Fork? Join? ExecutorSerivce? ForkJoinPool? Java 7에서부터 Fork/Join 프레임워크를 도입했다. 사용 가능한 모든 프로세서 코어를 사용하여 병렬 처리 속도를 높이는 데 도움이 되는 도구를 제공하는데 이는 분할 및 정복 접근 방식을 통해 달성된다. Fork 비동기식으로 실행될 수 있을 만큼 단순해질 때 까지 작업을 더 작은 독립 하위 작..

[Java] 스레드 - Future, FutureTask, ComplatebleFuture?

최근에 스레드에 대해 공부를 진행하고 있다. 그런데 Future, FutureTask, ComplatableFuture 관련해서 필자가 잘 이해를 못하고 있다. 그래서 이를 정리하고자 한다. 1. Future? Oracle에서는 공식 문서에서 future에 대해 다음과 설명하고 있다. Future는 비동기 계산의 결과를 나타냅니다. 계산이 완료되었는지 확인하고, 완료될 때까지 기다리고, 계산 결과를 검색하는 메서드가 제공됩니다. 결과는 계산이 완료되었을 때 get 메소드를 사용해서만 검색할 수 있으며 필요한 경우 준비될 때까지 차단됩니다. 취소는 cancel 메소드로 수행됩니다. 작업이 정상적으로 완료되었는지 또는 취소되었는지 확인하기 위한 추가 메서드가 제공됩니다. 계산이 완료되면 계산을 취소할 수 없..

2024년 신년 주니어 개발자의 끄적이기

와우! 개발원에서 수료한 후 3년 이상의 시간이 흘렀다. 현재 회사에서 적지 않을 것을 했고 어느 정도 일에 대한 자신감이 붙어가고 있는 중이다. 커리어적인 관점에서 보면 아직 주니어지만... 단순 개발 관련 경험만이 아닌 세상 경험도 많이 했던 2023년 이었다. 그 생각보다 나름 알차게(?) 보냈던 기간이었다. 너무 딱딱한 개발 이야기만 하지 말고 새해가 된 김에 요즘 드는 생각, 심적 변화들에 대해서 조금 적어보려고 한다. 1. 급조한 글보다는 고급스러운 책을 처음에 블로그를 시작한 때는 바야흐로 대 개발자 시대(?)가 시작되던 시기였다. 무엇보다도 공부한 것을 인터넷에 어떻게라도 남겨놔야 사람들이 그것을 보고 결국 다른 회사에 이직할 때도 가산점이라는 말을 누구보다도 잘 믿던 시기였다. 그래서 공..

일기 2024.01.04

[Spring Batch] 5장 : Configuring a Step - 4 : Controlling Step Flow ~ Batch Status Versus Exit Status

지난 시간에는 StepExecutionListener ~ Example Tasklet Implementation을 읽어보았다 (지난 내용은 여기 클릭!) 이번 시간에는 Controlling Step Flow부터 다시 읽어볼 것이다. Controlling Step Flow 가지고 있는 job안에서 step을 함께 그룹핑 하는 능력이 한 step에서 다른 step으로 어떻게 job이 "흘러가는지" 제어할 필요가 있다. Step의 실패는 Job 이 실패한다는것을 꼭 의미하는건 아니다. 또한 다음에 어떤 단계를 실행해야 하는지 결정하는 "성공" 유형이 두 가지 이상 있을 수 있다. Step의 그룹이 어떻게 설정되냐에 따라서 특정 step이 전혀 처리되지 않을 수 도 있다. 1. Sequential Flow 가장..

Spring/Spring Batch 2023.12.20

[Spring Batch] 5장 : Configuring a Step - 3 : StepExecutionListener ~ Example Tasklet Implementation

지난 시간에는 스킵 로직을 설정하는 것에서부터 Step 실행에 중도에 끼어드는 방법까지 알아 보았다. (Configuring Skip Logic ~ Intercepting Step Execution) 지난 내용은 여기 클릭! 이번 시간에는 StepExecutionListener에서부터 다시 이어서 읽어보도록 하겠다. Listener? 리스너는 배치 흐름 중에 Job, Step, Chunk 실행 전후에 어떤 일을 하도록 하는 Interceptor 개념의 클래스다. 스프링 MVC의 Interceptor가 실제로 HandlerAdapater 호출 전후로 Interceptor가 호출되는 것처럼 Job, Step, Chunk 전후로 오버라이딩된 메서드가 호출된다. 주로 각 단계별로 로그 기록을 남기거나, 진행된 ..

Spring/Spring Batch 2023.12.13

[Spring Batch] 5장 : Configuring a Step - 2 : Configuring Skip Logic ~ Intercepting Step Execution

이번 시간에는 지난번에 읽던 Step 설정을 이어서 읽어볼 것이다. (지난 내용이 궁금하면 여기 클릭!) 1. Configuring Skip Logic 처리하는동안 맞닥드린 에러들은 Step 의 실패로 결과를 초래하는 대신에 생략해야만 하는 시나리오가 있다. 이것은 데이터를 그것이 무슨 의미인지 이해하는 누군가에 의해 만들어지는 결정이다. 예를 들어, 금융 데이터는 돈이 전동될 때 스킵할 수 없는데 그것이 완벽한 정확함을 필요로하기 때문이다. 반면에 벤더의 리스트를 로딩하는 것은 스킵을 가능케 할 수도 있다. 만약 벤더가 부정확하게 포맷되어잇고 필요한 정보가 빠져 있다면 이슈가 없다. 대개, 이렇나 나쁜 기록들이 또한 쌓이는데 listener에 대해 논의할 때 나중에 다룬다. 다음 Java 예시가 ski..

Spring/Spring Batch 2023.12.07

[Spring Batch] 5장 : Step 설정하기 (Configuring a Step) 1

지난 시간에는 Job을 설정하고 실행하는 여러 방법에 대해 알아보았다. (지난 내용이 궁금하면 여기 클릭!) 이번에는 Step을 어떻게 설정하는지에 대한 글을 읽어볼 것이다. 와우! 너무 기대되는걸? 꿀잼 ^^ 1. Configuring a Step domain chapter에서 논의된 Step은 배치잡의 독립적으로 연속적인 절(phase)를 캡슐화한 도메인 객체로 실제 배치 처리를 정의하고 제어하는데 필요한 모든 정보를 포함한다. 모든 주어진 Step의 내용물은 Job을 쓰는(writing) 개발자의 재량에 달려있기 때문에 이것은 필연적으로 모호한 묘사다(개발자들이 각자 만들어 쓰는 것이라 Step에 대한 의미가 애매할 수 밖에 없다는 것 같다!). Step은 개발자가 요구하는것에 따라 간단할 수도 복..

Spring/Spring Batch 2023.12.05

[Java] @annotation을 통한 Response 데이터 변경하기 (feat : jackson)

일반적으로 많은 회사에서 사용자의 개인 정보를 정책에 따라서 암호화해서 관리하고 있을 것이다. 이것을 또한 조회 시에 마스킹 처리도 해야 할 수 있다. 그래서 이러한 사항에 대해서 알아보던 중에 정보를 정리해서 어떻게 사용하는지 알아보려고 한다. 필자는 복잡한 것은 싫으니 최소한으로 활용할 수 있는 방법을 아~주 간단하게 보려고 한다. 그럼 후비고오~ 1. Serialize and Deserialize (직렬화와 역직렬화) 우선 다시 직렬화와 역직렬화에 대해 간단히 알아보려고 한다. 직렬화 객체, 데이터 구조 등의 메모리 내 복잡한 구조를 전송 가능한 형태로 변환하는 과정 (예 : JSON, XML, 바이트 스트림 등). 데이터를 파일에 저장하고거나, 네트워크를 통해 다른 시스템으로 전송하기 위해 필요...