본문 바로가기

전체 글73

유지보수하기 좋은 소프트웨어 개발을 위한 아키텍처의 가치 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 개발자는 요구사항을 빠르게 반영하면서도 코드 품질을 지속적으로 높게 유지할 의무를 가진다. 좋은 코드 품질을 유지하기 위해선 어떻게 해야 할까?객체지향에선 이를 달성하기 위한 방법으로 높은 응집도와 낮은 결합도를 가진 코드를 구성해야 한다고 말한다. 그런데, 높은 응집도를 가져야 하는 단위 혹은 낮은 결합도를 유지해야 하는 단위는 무엇일까? 이 질문에 대한 답을 하기 위해 우리는 "관심사 분리"라는 개념을 이해해야 한다. 관심사 분리가 무엇인지 위키백과에 질의하면 다음과 같은 답을 얻을 수 있다.컴퓨터 과학에서 관심사 분리(separation of concerns, SoC)는 컴퓨터 프로그램을 구별된 부분으로 .. 2024. 6. 29.
[우아한테크세미나] 190620 우아한객체지향 by 우아한형제들 개발실장 조영호님 발표를 보고 난 후기 https://www.youtube.com/watch?v=dJ5C4qRqAgA&t=1589s  개발자의 숙명은 무엇일까?적은 비용을 드려 요구사항을 지속적으로 반영하는 것 아닐까?그러기 위해 무엇이 필요할까?당장 빠르게 개발할 수 있는 능력과 이를 지속적으로 유지할 수 있도록 시스템을 관리할 수 있는 능력이 필요할 것 같다.일반적으로 당장 빠르게 개발하는 것은 상대적으로 쉽지만 이를 지속적으로 하는 것은 어렵다. 시스템은 기능이 추가될수록 더욱 복잡해지고 시간이 지날수록 기술은 노후화되기 때문이다.그렇다면 개발자가 주력으로 집중해야할 부분은 당장 빠르게 개발하는 것보단 이러한 상태를 지속적으로 유지할 수 있도록 시스템을 관리하는 것이다. 그렇다면 지속적으로 유지보수하기 좋은 시스템을 만드려면 어떻게 해야.. 2024. 5. 26.
API 호출 관점에서 WebClient 와 Coroutine 조합해보기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다.기존 WebClient 다시 보기이전 글에서 webclient를 활용해 api 통신을 했던 코드를 다시 한번 살펴보자. @GetMapping("/test/webclient/non-blocking/{sleep}") fun `webclient 기반 코드(non-blocking)`( @PathVariable("sleep") sleep: Long, ): ResponseEntity> { println("호출전: ${LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))}") val r.. 2024. 1. 30.
스레드 block 관점에서 Webflux Map vs Flatmap 비교 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다 서론 흔히들 webflux는 thread pool 기반의 모델과 달리 event loop 기반 모델을 사용하여 높은 처리량을 얻을 수 있다고 말한다. 위 말은 event loop 가 thread pool 기반의 모델보다 스레드를 더 효율적으로 사용한다는 것을 내포하고 있다. 즉 thread pool 기반의 모델은 io waiting 이 발생하면 thread 가 block 되는 반면, event loop 기반의 모델은 io waiting 이 발생하면 thread 가 block 되지 않고 다시 스레드풀에 반환되어 다른 처리를 할 수 있는 상태가 된다. 하지만 단순히 webflux 를 사용한다고 해서 무조건 threa.. 2023. 10. 2.