{
    "componentChunkName": "component---src-templates-blog-js",
    "path": "/blog/page/7",
    "result": {"data":{"allMdx":{"nodes":[{"frontmatter":{"title":"[알고리즘] 재귀와 반복 (feat. 팩토리얼, 거듭제곱, 피보나치 수열)","description":"팩토리얼, 거듭제곱, 피보나치 수열 예시를 통해 재귀호출에 대해 가볍게 정리합니다. 이를 통해 어떤 상황에서 재귀호출이 효율적이고, 어떤 상황에서 단순한 반복문이 더 효율적일 수 있는지 알아봅니다.","date":"November 11, 2022","category":"computer-science","tags":["algorithm","recursion","factorial","fibonacci"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/80b38bb5e6d529f2a3d5e418bac0f019/12a3e/recursion-wide.png","srcSet":"/static/80b38bb5e6d529f2a3d5e418bac0f019/9d9e0/recursion-wide.png 225w,\n/static/80b38bb5e6d529f2a3d5e418bac0f019/cc174/recursion-wide.png 450w,\n/static/80b38bb5e6d529f2a3d5e418bac0f019/12a3e/recursion-wide.png 900w,\n/static/80b38bb5e6d529f2a3d5e418bac0f019/4dd11/recursion-wide.png 1800w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/80b38bb5e6d529f2a3d5e418bac0f019/3f003/recursion-wide.webp 225w,\n/static/80b38bb5e6d529f2a3d5e418bac0f019/ba134/recursion-wide.webp 450w,\n/static/80b38bb5e6d529f2a3d5e418bac0f019/e7f7d/recursion-wide.webp 900w,\n/static/80b38bb5e6d529f2a3d5e418bac0f019/fc420/recursion-wide.webp 1800w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"recursion image"},"id":"7ef4364e-c477-5fec-9c2c-ad1612f4103c","slug":"computer-science/recursion-and-iteration/"},{"frontmatter":{"title":"[번역] DataSource: 커넥션 풀링과 분산 트랜잭션","description":"오라클 공식 문서 'Package javax.sql'에 대한 번역입니다. DriverManager의 대체품인 DataSource가 커넥션 풀링과 분산 트랜잭션 기능을 어떻게 지원하는지에 대해 설명합니다.","date":"September 30, 2022","category":"docs","tags":["database","data-access","connection-pool","transaction","translation"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/e9dd927a14d5f12af2ca73cacf2e6516/12a3e/datasource-wide.png","srcSet":"/static/e9dd927a14d5f12af2ca73cacf2e6516/9d9e0/datasource-wide.png 225w,\n/static/e9dd927a14d5f12af2ca73cacf2e6516/cc174/datasource-wide.png 450w,\n/static/e9dd927a14d5f12af2ca73cacf2e6516/12a3e/datasource-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/e9dd927a14d5f12af2ca73cacf2e6516/3f003/datasource-wide.webp 225w,\n/static/e9dd927a14d5f12af2ca73cacf2e6516/ba134/datasource-wide.webp 450w,\n/static/e9dd927a14d5f12af2ca73cacf2e6516/e7f7d/datasource-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"datasource wide image"},"id":"cb72e5c4-3a83-59e9-9908-0f2f2736773a","slug":"docs/datasource-vs-drivermanager/"},{"frontmatter":{"title":"무중단 DB 마이그레이션과 호환성 문제 해결","description":"DB 마이그레이션 및 API 마이그레이션 작업을 무중단 배포로 수행하는 과정에서 발생할 수 있는 호환성 문제와 이에 대한 해결 방안에 대해 이야기합니다. 꼭꼭 서비스 개발 과정에서 직면한 문제를 예시로 설명합니다.","date":"September 28, 2022","category":"development","tags":["mysql","zero-downtime-deployment","flyway","database","migration"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/2e4f608b139bfc66637ff7f1636146f5/12a3e/version-1.5-wide.png","srcSet":"/static/2e4f608b139bfc66637ff7f1636146f5/9d9e0/version-1.5-wide.png 225w,\n/static/2e4f608b139bfc66637ff7f1636146f5/cc174/version-1.5-wide.png 450w,\n/static/2e4f608b139bfc66637ff7f1636146f5/12a3e/version-1.5-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/2e4f608b139bfc66637ff7f1636146f5/3f003/version-1.5-wide.webp 225w,\n/static/2e4f608b139bfc66637ff7f1636146f5/ba134/version-1.5-wide.webp 450w,\n/static/2e4f608b139bfc66637ff7f1636146f5/e7f7d/version-1.5-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"version 1.5 image"},"id":"fef39174-8d60-5f59-a604-6f7bc80e36d9","slug":"development/zero-downtime-deployment-and-compatibility/"},{"frontmatter":{"title":"[번역] 커넥션 풀 사이즈에 대하여","description":"HikariCP 공식 위키의 'About Pool Sizing' 페이지에 대한 번역입니다. 최적의 성능을 위해 데이터베이스 커넥션 풀 크기를 어떻게 설정해야 하는지에 대해 다룹니다.","date":"September 25, 2022","category":"docs","tags":["database","data-access","connection-pool","translation"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/f39058da346fa14a151dc0d221255501/12a3e/connection-pool-wide.png","srcSet":"/static/f39058da346fa14a151dc0d221255501/9d9e0/connection-pool-wide.png 225w,\n/static/f39058da346fa14a151dc0d221255501/cc174/connection-pool-wide.png 450w,\n/static/f39058da346fa14a151dc0d221255501/12a3e/connection-pool-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/f39058da346fa14a151dc0d221255501/3f003/connection-pool-wide.webp 225w,\n/static/f39058da346fa14a151dc0d221255501/ba134/connection-pool-wide.webp 450w,\n/static/f39058da346fa14a151dc0d221255501/e7f7d/connection-pool-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"connection pool image"},"id":"378afb45-df0b-5474-b190-2011c9fc35e7","slug":"docs/database-connection-pool-sizing/"},{"frontmatter":{"title":"[토이 프로젝트] MyS3: 나만의 작은 이미지 호스팅 서버","description":"AWS S3를 사용할 수 없게 되어 EC2 인스턴스에서 실행가능한 대체품을 만들어보았습니다. 이미지 파일 업로드 및 조회 API를 제공하며, 업로드된 파일을 로컬 머신에서 직접 관리하는 구조입니다.","date":"August 7, 2022","category":"development","tags":["java","project"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/85856f0bf522c0cc6abb8ae80b40652e/12a3e/mys3-wide.png","srcSet":"/static/85856f0bf522c0cc6abb8ae80b40652e/9d9e0/mys3-wide.png 225w,\n/static/85856f0bf522c0cc6abb8ae80b40652e/cc174/mys3-wide.png 450w,\n/static/85856f0bf522c0cc6abb8ae80b40652e/12a3e/mys3-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/85856f0bf522c0cc6abb8ae80b40652e/3f003/mys3-wide.webp 225w,\n/static/85856f0bf522c0cc6abb8ae80b40652e/ba134/mys3-wide.webp 450w,\n/static/85856f0bf522c0cc6abb8ae80b40652e/e7f7d/mys3-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"MyS3 image"},"id":"9c951dfe-90b0-5020-9d36-6ea16a2f52ec","slug":"development/image-hosting-server-toy-project/"},{"frontmatter":{"title":"[Spring] Profile: yml 파일 하나로 프로퍼티 관리하기","description":"application.yml 파일을 .gitignore에 넣는다거나, EC2 인스턴스에 yml 파일을 올려놓는 등의 행동을 하는 크루들이 많아 보여 제 방식을 정리해보았습니다. 튜토리얼과 실전 예제를 포함시켰습니다.","date":"July 29, 2022","category":"development","tags":["spring","property","jvm","linux"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/df2da7a1a0c15ebdbc88e98be8f29d11/12a3e/application.yml-wide.png","srcSet":"/static/df2da7a1a0c15ebdbc88e98be8f29d11/9d9e0/application.yml-wide.png 225w,\n/static/df2da7a1a0c15ebdbc88e98be8f29d11/cc174/application.yml-wide.png 450w,\n/static/df2da7a1a0c15ebdbc88e98be8f29d11/12a3e/application.yml-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/df2da7a1a0c15ebdbc88e98be8f29d11/3f003/application.yml-wide.webp 225w,\n/static/df2da7a1a0c15ebdbc88e98be8f29d11/ba134/application.yml-wide.webp 450w,\n/static/df2da7a1a0c15ebdbc88e98be8f29d11/e7f7d/application.yml-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"application.yml wide image"},"id":"244ff11b-e662-51ec-99e5-003c28cc582c","slug":"development/spring-profile-and-environment-variables-tutorial/"},{"frontmatter":{"title":"[리뷰] 오브젝트 독후감","description":"스터디원들과 함께 조영호의 오브젝트를 완독하였다. 책에 대한 전반적인 후기를 남기고자 한다.","date":"June 24, 2022","category":"essay","tags":["oop","book-review","retrospective"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/df533aab78ad2ace48ba0128fca14494/12a3e/object-cover-wide.png","srcSet":"/static/df533aab78ad2ace48ba0128fca14494/9d9e0/object-cover-wide.png 225w,\n/static/df533aab78ad2ace48ba0128fca14494/cc174/object-cover-wide.png 450w,\n/static/df533aab78ad2ace48ba0128fca14494/12a3e/object-cover-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/df533aab78ad2ace48ba0128fca14494/3f003/object-cover-wide.webp 225w,\n/static/df533aab78ad2ace48ba0128fca14494/ba134/object-cover-wide.webp 450w,\n/static/df533aab78ad2ace48ba0128fca14494/e7f7d/object-cover-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"object cover image"},"id":"8e1da8a7-0683-55c7-a353-8e4ff8f3e14e","slug":"essay/object-book-review/"},{"frontmatter":{"title":"[Java] 데코레이터 패턴: 구현과 한계","description":"데코레이터 패턴을 통해 특정한 데이터에 대해 일련의 작업을 순차적으로 적용하는 구조를 만들어보자. 그리고 이러한 코드의 한계에 대하여 논해보자. 유연한 코드의 이면에는 구조의 복잡성이 자리잡고 있다.","date":"May 26, 2022","category":"development","tags":["java","decorator-pattern","design-pattern"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#282828","images":{"fallback":{"src":"/static/92b247c93aece14a68001c0de2d469e0/12a3e/decorator-pattern-wide.png","srcSet":"/static/92b247c93aece14a68001c0de2d469e0/9d9e0/decorator-pattern-wide.png 225w,\n/static/92b247c93aece14a68001c0de2d469e0/cc174/decorator-pattern-wide.png 450w,\n/static/92b247c93aece14a68001c0de2d469e0/12a3e/decorator-pattern-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/92b247c93aece14a68001c0de2d469e0/3f003/decorator-pattern-wide.webp 225w,\n/static/92b247c93aece14a68001c0de2d469e0/ba134/decorator-pattern-wide.webp 450w,\n/static/92b247c93aece14a68001c0de2d469e0/e7f7d/decorator-pattern-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"decorator pattern image"},"id":"c9b13bab-4f76-5fe3-852b-52ce33f4edb4","slug":"development/decorator-pattern-implementation-and-limitations/"},{"frontmatter":{"title":"[Java] 어댑터 패턴과 OCP","description":"어댑터 패턴을 통해 외부 라이브러리에 대한 의존성을 도메인으로부터 분리하는 과정을 다룬다. 추상화에 대한 의존과 객체의 사용과 생성의 분리라는 관점에서 OCP에 부합하도록 클라이언트 코드를 리팩토링해보자.","date":"May 25, 2022","category":"development","tags":["java","adapter","design-pattern","ocp"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#282828","images":{"fallback":{"src":"/static/386828e1664f43a583c6ae4b70a678fc/12a3e/adapter-pattern-wide.png","srcSet":"/static/386828e1664f43a583c6ae4b70a678fc/9d9e0/adapter-pattern-wide.png 225w,\n/static/386828e1664f43a583c6ae4b70a678fc/cc174/adapter-pattern-wide.png 450w,\n/static/386828e1664f43a583c6ae4b70a678fc/12a3e/adapter-pattern-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/386828e1664f43a583c6ae4b70a678fc/3f003/adapter-pattern-wide.webp 225w,\n/static/386828e1664f43a583c6ae4b70a678fc/ba134/adapter-pattern-wide.webp 450w,\n/static/386828e1664f43a583c6ae4b70a678fc/e7f7d/adapter-pattern-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"adapter pattern image"},"id":"9f8b3080-ccce-59ad-af78-88f90d17b374","slug":"development/adapter-pattern-and-ocp/"},{"frontmatter":{"title":"[Java] JGraphT 라이브러리를 통한 최단경로 조회","description":"해당 게시글은 jgrapht 라이브러리를 활용하는 다양한 방법에 대한 예시 코드를 제공한다. 특히 기존 도메인을 수정하지 않고 최단경로를 구간들의 목록으로 반환받는 방법에 대한 탐구 과정을 단계별로 정리하였다.","date":"May 24, 2022","category":"development","tags":["java","jgrapht","algorithm","proxy","dijkstra"],"hero_image":{"childImageSharp":{"gatsbyImageData":{"layout":"constrained","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/5e50e0a8f4a1c7580f11aa380feb0308/12a3e/jgrapht-wide.png","srcSet":"/static/5e50e0a8f4a1c7580f11aa380feb0308/9d9e0/jgrapht-wide.png 225w,\n/static/5e50e0a8f4a1c7580f11aa380feb0308/cc174/jgrapht-wide.png 450w,\n/static/5e50e0a8f4a1c7580f11aa380feb0308/12a3e/jgrapht-wide.png 900w","sizes":"(min-width: 900px) 900px, 100vw"},"sources":[{"srcSet":"/static/5e50e0a8f4a1c7580f11aa380feb0308/3f003/jgrapht-wide.webp 225w,\n/static/5e50e0a8f4a1c7580f11aa380feb0308/ba134/jgrapht-wide.webp 450w,\n/static/5e50e0a8f4a1c7580f11aa380feb0308/e7f7d/jgrapht-wide.webp 900w","type":"image/webp","sizes":"(min-width: 900px) 900px, 100vw"}]},"width":900,"height":450}}},"hero_image_alt":"jgrapht image"},"id":"f390eb87-c39d-5091-89d3-606513f0def8","slug":"development/finding-shortest-path-with-jgrapht/"}],"pageInfo":{"currentPage":7,"hasNextPage":true,"hasPreviousPage":true,"pageCount":9,"totalCount":86}}},"pageContext":{"skip":60}},
    "staticQueryHashes": ["1903006949","272758454"]}