전체 글
-
백엔드 개발자의 React 공부 시작프로젝트/react 부시기 2023. 12. 5. 00:01
개요 react 부시기라는 카테고리를 시작으로 프론트엔드 공부를 소소하게 시작해보려 합니다. 애써 외면했던 프론트엔드 개발을 처음 시작할 때는 내가 만들고 싶었던 2~3개 정도의 서비스들을 개발하면서 백엔드는 Python, Flask를 활용하고 프론트엔드는 HTML, CSS, Javascript를 활용했던 경험이 있었습니다. 하지만 내 마음대로 배치되지 않는 CSS 때문에 프론트엔드에는 급격한 흥미가 떨어지게 되었습니다. 심지어 "나는 백엔드 개발자가 될 거야"라는 생각으로 SSAFY에서는 Vue.js를 배웠지만 한 귀로 듣고 한귀로는 흘려버리기도 하였습니다. "어드민 페이지가 필요해?" 그러면 Retool이나 Appsmith와 같은 로우 코드/노 코드 개발 플랫폼을 사용해서 대시보드를 쉽게 구축하면 되..
-
공식문서로 알아보는 Cancellation and timeoutsKotlin/코루틴 2023. 12. 4. 00:01
개요 Kotlin 공식문서를 보며 코루틴의 취소와 타임아웃에 대해 알아보고 실습도 진행해보고자 합니다. 코루틴의 취소 val job = launch { repeat(1000) { i -> println("job: I'm sleeping $i ...") delay(500L) } } delay(1300L) // delay a bit println("main: I'm tired of waiting!") job.cancel() // cancels the job job.join() // waits for job's completion println("main: Now I can quit.") //결과 job: I'm sleeping 0 ... job: I'm sleeping 1 ... job: I'm sleepi..
-
공식문서로 알아보는 Coroutines basicsKotlin/코루틴 2023. 12. 3. 00:01
개요 Kotlin 공식문서를 보며 코루틴의 개념에 대해 알아보고 실습도 진행해보고자 합니다. Gradle 의존성 추가 implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core") 첫 번째 실습 fun main() = runBlocking { // this: CoroutineScope launch { // launch는 새로운 코루틴을 만들어냄 delay(1000L) // 특정 시간동안 코루틴을 일시 중단, 기본 스레드는 차단되지 않고 다른 코루틴이 실행될 수 있음 println("World!") // print after delay } println("Hello") // main 코루틴은 이전에 생성된 코루틴이 일시중단되는 것과 상관없이 실행됨 } /..
-
Webflux란?Spring Framework/WebFlux 2023. 12. 2. 00:01
Webflux란? Spring 5에서 추가된 웹 프레임워크이며 클라이언트/서버에서 reactive programming 기반의 애플리케이션을 만들 수 있도록 지원합니다. Reactive Programming이란? reactive라는 용어는 변화에 반응하는 것을 중심을 두고 만든 프로그래밍 모델을 의미합니다. 데이터가 변경될 때마다 이벤트를 발생시켜서 데이터를 전달합니다. 데이터를 비동기적으로 처리하며 이벤트 기반 아키텍처를 통해 실시간으로 데이터의 변화에 반응할 수 있게 프로그래밍을 수행합니다. 주요하게 나오는 개념으로 옵저버 패턴이 있으며 Subscriber와 Publisher가 존재합니다. Reactive Programming이 non-blokcing인 이유도 작업이 완료될 때까지 기다리기보다 데이터..
-
FeignClient Response로 Http status 제어하기Spring Framework 2023. 12. 1. 00:01
개요 FeignClient를 다루다 보면 200~300번대가 아닌 상태코드에 대하여 ErrorHandling을 수행해야 할 경우가 있습니다. 하지만 ErrorDecoder에 의해 FeignClient Exception이 발생하곤 하는데 이에 대해서 대응하는 방법을 찾아보고자 합니다. Response객체 public final class Response implements Closeable { private final int status; private final String reason; private final Map headers; private final Body body; private final Request request; private final ProtocolVersion protocolV..
-
나는 어떻게 살아왔는가 - 삶의 지도회고 2023. 11. 30. 00:01
개요글또 9기에 지원하면서 Google Form을 통해 지원했던 삶의 지도를 기반으로 "나는 어떻게 살아왔는가"에 대한 삶의 지도를 공유해보고자 합니다. 학창 시절은 게임과 함께 초, 중, 고등학교를 보내오며 적당히 공부하고 적당히 친구들과 놀았지만 그중 독보적으로 관심이 있었던 건 바로 온라인 게임이었습니다."리그오브레전드"라는 게임을 잘하기 위해 수업 중에도 몰래몰래 핸드폰으로 인벤이라는 커뮤니티에서 공략을 보곤 했습니다. 물론 여가시간의 대부분은 게임을 하였고 그로 인해 시즌3에 2000판이 넘는 게임을 했고 다이아 1이라는 티어에 도달하게 되었습니다. 한 게임에 20분 ~ 50분이 걸리는 걸 감안하여 평균 35분으로 잡았을 때 1년에 70000분, 시간으로 치면 1160시간 정도입니다.대략적으..
-
9장 - 옵티마이저와 힌트 - 1편CS/Real MySQL 8.0 요약 2023. 11. 29. 00:01
옵티마이저란? Optimize란 최대로 활용하다, 최적화하다는 뜻을 가진 영단어입니다. DB에 조회하는 쿼리의 결과는 동일하지만 내부적으로 그 결과를 만들어내는 방법은 다양합니다. 최소한의 비용을 드는방법으로 결과를 만들어내야 하는데 옵티마이저가 이 기능을 담당합니다. 옵티마이저의 종류로는 비용기반최적화, 규칙기반최적화기법이 있는데 대부분의 RDBMS가 비용기반최적화 방식을 활용하며 MySQL도 마찬가지입니다. 실행계획 확인하기 실행계획은 옵티마이저가 결과를 만들어내기 위한 방법을 사용자가 확인할 수 있는 방법입니다. 실행계획은 EXPLAIN이라는 명령으로 확인할 수 있습니다. 실행계획을 알아야 하는이유? 실행계획을 분석할 수 있어야 불합리한 부분을 찾아내고, 더 최적화된 방법으로 실행 계획을 수립하도록..
-
DDD란 무엇인가?DDD 2023. 11. 28. 00:01
DDD란?DDD는 Domain-Driven Design의 약자로 도메인에 의한 설계로 해석해 볼 수 있습니다."도메인이란 무엇일까?"는 조금 뒤에 다시 알아보도록 하며..왜 DDD란 개념이 등장하게 되었을까요? 왜 사람들이 DDD를 추구하려고 할까?DDD에 관련된 서적들도 많고 세미나에서도 종종 등장하며 주변 동료들도 이야기하기도 합니다."왜 사람들이 DDD를 추구하려고 할까요?"라는 질문에 대답한다면 제가 이해한 바로는 소프트웨어의 복잡성과 의사소통의 비용을 줄이기 위해서입니다. 이때 소프트웨어를 구현하기 위해서는 보통 크게 두 가지 문제에 부딪히게 됩니다.1. 사용자가 제시하는 복잡하고 자주 변화하는 요구사항(필수적 복잡성)2. 성능이나 협업에서 발생하는 기술적인 어려움(부수적 복잡성) 이때 DDD..