티스토리

검색하기내 프로필

블로그 홈

Lob!

구독자
76

구독하기 방명록
신고

인기글

  • Mybatis의 IndexOutOfBoundsException?공감수11댓글수2조회 15
  • Monitoring : 프로메테우스를 이용하여 프로젝트 매트릭 수집하기공감수2댓글수0조회 14
  • DBMS 별 Transaction Read Only에 대한 동작 방식 -공감수5댓글수0조회 12

주요 글 목록

  • Cache Stampede을 대응하는 최후의 수단 중 하나, Request Collapsing글 내용

    Cache StampedeCache Stampede(또는 Thundering Herd)는 읽기 요청이 몰리는 특정 Resource(또는 Reosurce Collection)을 Cache에 저장하고 Look Aside 전략을 사용하고 있는 상황에서 Cache Server에서 어떠한 사유로 인해 Cache Miss가 발생하였을 때 SSoT(Single Source Of Truth, 여기서는 DBMS, Upstream API 등을 의미)로 다량의 요청이 동시에 몰려 심한 경우 일정 시간 장애도 발생시키는 위험한 상황을 의미합니다. 여기서 어떠한 사유란 다른 글에서 자주 언급하는 Cache의 TTL 만료를 대표적인 예로 들 수 있으나, 잘못된 만료 정책 설정, Global Cache Server를 사용하는 경우..

    좋아요5
    댓글0작성시간2025. 9. 25.
    게시글 이미지
  • RESTful 설계 원칙에 대한 못다 한 이야기글 내용

    이 글의 결론만 알고 싶다면?최근 RESTful API라고 부르는 결과물들은 엄밀히 따지자면 대부분 RESTful한 API가 아닙니다.RESTful API라는 키워드를 만족하는데 매몰되기보다는 표준 HTTP API 요소를 활용해 API를 적절히 표현하고 확장하는 아이디어를 이해하는 것이 중요합니다.RESTful API가 적절하지 않은 시점과 상황을 고려하는 유연한 사고가 필요하다고 생각합니다.   이 글을 쓰게 된 배경2024년 1월 말 게으른 개발자 컨퍼런스에서 “소비자 관점의 API 설계 패턴, 사례 훑어보기” 라는 주제로 발표하며 맥락상 내용에서 제외했거나 시간 관계상 언급하지 못했던 부분을 글로 남겨보고자 합니다. 하단 참고 링크에서 발표 자료를 확인하실 수 있습니다. RESTful 설계 원칙에 ..

    좋아요8
    댓글2작성시간2024. 6. 15.
    게시글 이미지
  • 게으른 개발자 컨퍼런스 발표 후기글 내용

    [링크드인 전문] 링크드인에 올리는 첫 글을 발표 후기로 올릴 줄은 몰랐는데.. ㅎㅎ;  “게으른 개발자 컨퍼런스” 연사로 참여한 후기를 공유합니다. (오늘까진 부지런한 상태로 보내보겠습니다..!)발표 자료는 해당 레포지토리에서 확인하실 수 있습니다! https://lnkd.in/gwAr9w2J계기는 참 가볍고 단순했습니다. 서로가 취업 준비생, 주니어로 만나 이런저런 이야기를 나누던 커뮤니티에서“석현님 연사 한번 해보시죠. 이렇게 시키지 않으면 평생 안 하실 것 같아서요.” 라는 이야기를 들었습니다.처음에는 장난치는구나~ 했던 이야기가 현실이 되는 것을 보니 갑자기 손이 떨리고 멘탈이 흔들리더라고요. (긴장을 잘하는 편이라 바로 신호가 왔습니다.)이러한 기회를 잘 부여해주시는 유스콘도 제가 너무 부족하..

    좋아요0
    댓글0작성시간2024. 1. 28.
    게시글 이미지
  • 소소한 글 : 2023년 결산과 2024년에 할 것들글 내용

    2023년 결산 제일 많이 들었던 음악들 Wake Me Up Echo 기억에 남는 책들 디자인 패턴의 아름다움 일의 철학 The One Thing 제일 많이 사용한 물건들 제빙기 캡슐 커피머신 커피 포트 제일 적게 사용한 물건들 아이패드 가장 기억에 남는 세미나 GraphQL: Inevitable Next Wave (Tridge) 가장 기억에 남는 모임들 파이브가이즈 오픈런 (4시간 대기..) 네이버 부스트캠프 웹 모바일 8기 네트워킹 데이 정수리 꼬순내 (등산 모임) 가장 기억에 남는 시도 방통대 편입 (~ing) 사이드 프로젝트 (인도네시아 앱 출시 상태, 작성일 기준 사용자 500명+) 올해 외부 활동들 네트워킹 모임 (3회) 커피챗 (3분기 이후, 6회) 등산 (3분기 이후, 5회) 운동 (19개..

    좋아요8
    댓글2작성시간2024. 1. 1.
    게시글 이미지
  • Performance : 기본적인 Application Cache 개념과 종류글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글이며, Look-Aside, Write-Back 패턴 등 Cache Strategy에 대한 내용들은 “Redis : Cache Strategy Pattern” 에서 다루었기 때문에 제외하였습니다. 잘못된 내용이 있을 수 있습니다. 이런 부분은 댓글을 통해 피드백 부탁드립니다.   Cache가 필요한 이유?서비스에서 자주 조회되는 데이터에 대해서 매번 접근하고 조합한 뒤 모델을 만들어 응답하는 것은 생각보다 많은 리소스를 사용하게 합니다. (Disk I/O, Join, Calculate, Sort 등..) 데이터 정규화 수준이 높거나 볼륨이 크고 서비스가 구현된 방식이 동기식이라고 가정한다면, 1개의 Request 당 최소한 1개의 Threa..

    좋아요3
    댓글0작성시간2022. 6. 25.
    게시글 이미지
  • 소소한 글 : 멘토링 회고와 약간의 근황글 내용

    멘토링 회고 지금까지 약 3달 동안 한 취업 준비생 분을 대상으로 무료 멘토링을 진행하고 있었습니다. 그분은 현재 취업하신 상태이고 공부해왔던 것들과 다른 언어와 기술을 사용하시게 되어 이제는 그러한 것에 대해서 같이 스터디를 하고 있습니다. 멘토링을 진행하기에 제 역량이 충분한 것도 아니었고 지속할 수 있을지 걱정이 많았지만 취업 준비생을 도우면서 오는 뿌듯함과 교육에 대한 경험을 얻어보려고 시작하였는데, 지금 와서 돌아보니 그런 경험 외에도 성장에 대한 자극과 개념의 정립, 복기를 할 수 있었던 좋은 시간이었습니다. 그럴 수 있었던 이유로는 멘토링을 진행할 때마다 “왜 이렇게 만들어졌는지, 왜 이런 상황에서 이점이 있는지” 등의 질문을 준비했던 것 덕분인 듯합니다. 이렇게 하다 보니 자연스레 알고 있..

    좋아요12
    댓글0작성시간2022. 5. 29.
    게시글 이미지
  • 소소한 글 : Spring Vesion 별 변경 내역 정리하기 (2.1.x ~ 2.5.x. WIP)글 내용

    회사에서 개발하는 레거시 프로젝트의 Version Migration 작업을 준비하기 위해 Spring (boot) Version별 변경 내역을 조사하고 있는 내용입니다. 누락되거나 잘못 기술된 내용이 있을 수 있는 점 양해 부탁드립니다. Spring Boot 2.1.x Java 11 지원 (Spring Framework 5.1) Spring Boot 2.1 Release Notes · spring-projects/spring-boot Wiki 포함 의존성 변경, 삭제 등 (Junit 4.12 → Junit 5.2, Tomcat 8.5.39 → 9.x, Hibernate 5.2 → 5.3) Spring Framework 5.1 Java 8 ~ 11 CGLIB 3.2 fork(Java 9+ API로 위임) ..

    좋아요0
    댓글0작성시간2022. 4. 11.
    게시글 이미지
  • Performance & Scalability : 기본적인 Sharding 개념과 구현 방식글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. Sharding이 필요한 이유? 서비스의 특성이나 운영되어온 기간에 따라 사용자의 Data, State는 지속적으로 축적되게 됩니다. 이러한 것들이 몇 천만에서 수십 억 또는 그 이상으로 늘어난다면, Index와 같은 요소를 잘 구성되어 있더라도 결국 조회 성능의 하락이나 Data, State를 관리하는 Node에게 큰 부하를 주게 됩니다. 이는 결국 서비스의 지연 발생 빈도 수나 기간이 늘어나는 주요한 원인 중 하나가 됩니다. 이를 대비하기 위해 우리는 Performance와 Scalability 속성을 만족하는 서비스 설계를 진행하여야만 합니다. 그리고 이 속성을 지원하는 설계 방법 중 하나로는 Sharding 구조가 있습니다...

    좋아요6
    댓글0작성시간2022. 4. 11.
    게시글 이미지
  • 소소한 글 : Spring4Shell? 이건 또 뭔지...글 내용

    어제저녁부터 시끌시끌한 주제인 Spring4 Shell에 대해서 찾아 정리한 글입니다. 짧은 시간 동안, 얕은 이해도를 가지고 대략적인 부분만 작성하였기에 이 부분을 유의해주시고 피드백해주시면 감사드리겠습니다. 해당 문제가 발생하기 위한 조건 Java 9+ Spring Core 5.3.17 또는 5.2.19 버전 이하를 사용 Post Mapping end-point JSON / XML Converting을 사용하지 않는 API (application/x-www-form-urlencoded 사용) 즉 @ModelAttribute - ModelAttributeMethodProcessor이나 Key=Value Format의 Binding을 사용할 때 외장 Tomcat 9 사용 WebAppClassLoaderB..

    좋아요9
    댓글0작성시간2022. 3. 31.
    게시글 이미지
  • 소소한 글 - Java Version 별 변경 내역 정리하기 (9~18)글 내용

    회사에서 개발하는 레거시 프로젝트의 Version Migration 작업을 준비하기 위해 Java Version별 변경 내역을 조사하고 있는 내용입니다. 누락되거나 잘못 기술된 내용이 있을 수 있는 점 양해 부탁드립니다. 회사에서 맡아 진행하는 프로젝트에서 Java 17(Spring Boot는 2.6.2)을 사용하고 있기 때문에 Record나 Switch Expression, 추가된 Util 등에 만족하면서 개발을 하고 있는데요. 그렇기에 가능하다면 다른 레거시 프로젝트 또한 Java 17로 Migration 해보려고 합니다. 개인적으로 Spring Boot Version을 올리는 것이 더 까다롭지 않을까 생각하고 있습니다. Java 9 (~2018년 3월 지원 종료) 자바 모듈화(JDK 모듈 분리 기능..

    좋아요2
    댓글0작성시간2022. 3. 24.
    게시글 이미지
  • Redis : Data Persistence글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. Redis Persistence Redis는 가지고 있는 데이터를 장애 발생 시 복구할 수 있도록 데이터를 영속화하는 방법을 제공합니다. Redis 데이터 영속화는 관리하는 비즈니스 데이터의 성향과 중요도에 따라 사용하거나, 하지 않을 수 있습니다. 상황을 고려하지 않고 AOF의 Always 전략 등을 사용하는 행위는 Redis의 성능 하락과 응답 지연 문제를 심화시킬 수 있기 때문에 잘 고려하여야 합니다. 영속화를 사용하는 경우 Redis Server의 서비스 중단을 방지하기 위해 Child Background Process를 사용하는 것이 필수적이며, Process fork로 인한 메모리 사용량, 발생하는 Disk I/O 빈도와..

    좋아요5
    댓글0작성시간2022. 2. 14.
    게시글 이미지
  • DevOps : CI / CD의 기본적인 개념 정리글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글이며 기존에 작성했었던 CI / CD 글을 수정한 것입니다. 자동화되지 않은 개발 프로세스의 문제점 상용 서비스, 소프트웨어는 일반적으로 여러 명의 개발자가 협업을 진행하기 때문에 코드의 관리와 배포 후 발생하는 장애 대처 용도로 Git과 같은 버전 관리 도구를 사용하여 각 코드에 대한 이력과 메시지를 남기고 병합하는 과정을 거치게 됩니다. 이러한 프로세스를 계속 수행되다 보면 기존 코드(테스트, 스키마 설정 값, 충돌)와 문제가 발생할 수 있지만 이를 빨리 식별하지 못해 운영 환경에서 서비스 장애가 발생하는 경우가 있을 수 있습니다. 또한 개발, 운영팀이 수동으로 코드를 빌드하고 테스트 및 FTP 등의 프로토콜을 통한 패키지 전달 및 실행..

    좋아요0
    댓글0작성시간2022. 2. 13.
    게시글 이미지
  • High Availability : 기본적인 복제 개념과 구현 및 동기화 방식글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. 복제가 필요한 이유? 우리가 제공하는 API 서비스는 일반적으로 Stateless 한 형태를 준수하여 개발하여야 합니다. 이는 State를 다른 서비스(RDBMS, Global Session Storage - Redis 등)에서 관리하게 하고, API 서비스는 필요에 의해 조회하도록 하여 Stateful로 개발하였을 때 발생하는 API 서비스 간의 상태 동기화 이슈나 확장성 저하 문제를 최소화할 수 있기 때문입니다. 이러한 구조는 트래픽 급증에 대응하는 Scale-out을 가능케 합니다. 이런 형태로 개발하게 되면 결국 다수의 API 서비스가 조회하는 State를 관리하는 서비스에는 대량의 부하가 전달되어 자연스레 해당 서비스에 장..

    좋아요2
    댓글1작성시간2022. 2. 1.
    게시글 이미지
  • High Availability : 기본적인 장애 감지 알고리즘의 속성과 종류글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. 장애 감지 알고리즘이 필요한 이유? 우리가 개발하는 서비스가 단일 시스템이 아닌 분산 시스템 구조를 지닌다면 특정 서비스에 장애가 발생하더라도 모든 서비스 노드에게 전파되지 않기 때문에, 사용자 요청으로 인해 식별되기 전까지 모를 수 있습니다. 장애가 발생한 서비스에 따라서 시스템에 잘못된 값을 설정하거나 중복이 발생할 수 있고 (Index Sharding Service) 사용자가 보는 캐싱된 데이터가 소실되는 경우도 발생할 수 있습니다. (Feed Cache Service 등) 물론 모든 장애가 서비스 종료, 충돌과 같은 완전 중단 상태를 의미하는 것은 아니며, 상황에 따라 부하로 인한 응답 지연, 네트워크 지연 이슈 혹은 데드락..

    좋아요4
    댓글1작성시간2022. 2. 1.
    게시글 이미지
  • Redis : Cache Strategy pattern글 내용

    이 글은 특정 구현에 종속되는 내용을 제외한 이론 위주의 정리 글입니다. 그림에는 Redis가 표시되어 있지만 Ehcache, Memcached, Hazelcast, Caffeine Cache 등 다양한 구현체로 이를 구현할 수 있습니다. Read Cache Strategy Look Aside Cache 서비스에 사용자 조회 요청이 들어오면 우선 Cache에 저장된 데이터가 있는지 확인하는 전략입니다. 초반 Cache 성능 향상 및 트래픽 급증 대비를 위해 (Cache miss 감소) cache warm up을 수행하는 것이 좋습니다. 이 방식은 Cache에 장애가 발생하더라도 데이터베이스에 요청을 전달함으로써 Cache 장애로 인한 서비스 중단 발생을 대비할 수 있습니다. 하지만 조회 요청이 많을 경우..

    좋아요7
    댓글0작성시간2022. 1. 30.
    게시글 이미지
  • Galera Cluster의 기본적인 성능 개선 지점과 방향성글 내용

    현재 회사에서 운용하고 있는 Galera Cluster 관련 이슈를 해결하기 위해 학습했던 내용을 공유하는 글입니다. 개인의 이해도 부족으로 인하여 잘못된 내용이 포함되어 있을 수 있으며 트러블 슈팅이 아닌 원론적인 이야기만 나열하더라도 감안해주시고 피드백 부탁드립니다. Galera Cluster? Galera Cluster는 Mutl Master Cluster 구조를 지원하는 MySQL, MariaDB 등의 계열에 호환되는 Open Source입니다. 복제 구성시 Origin node와 Replica node 사이의 Eventual consistency로 일정 시간 동안의 데이터 부정합 문제를 해결하기 위해 적용할 수 있는 방법인 Synchronous replication에는 몇 가지 문제점이 존재합니..

    좋아요5
    댓글0작성시간2022. 1. 30.
    게시글 이미지
  • 2021년 회고글 내용

    대학이라는 울타리에서 나와 첫 직장을 가지고, 또 다른 직장으로 이직하고, 제가 공부했던 방법들을 회고하고 그것을 발표하는.. 인생 사에서 제일 뜻깊을 것 같은 한 해가 지나갔습니다. 올 한 해를 돌아보며 저는 “역동적”이었다고 표현하고 싶습니다. 변화를 위해 생각하고, 행동하고 준비해온 이 기간을 쉽게 잊지 못할 것 같습니다. 나는 얼마나 공부했나? 중점으로 공부했던 것들 : Spring Core, Security, Oauth, Mybatis, JPA, Docker, Kotlin, Redis, Database Concepts, Infra Concepts, Nginx, Prometheus, Grafana, JOOQ 아이디어, 개념, 도입 수준으로 공부했던 것들 : Spring Cloud, Batch, N..

    좋아요14
    댓글1작성시간2022. 1. 3.
    게시글 이미지
  • 소소한 글 : (내가) 성장할 수 있었던 공부 방법 발표 내용 공유글 내용

    금일 온라인으로 1시간 40분(Q&A 포함) 정도 진행했던 "(내가) 성장할 수 있었던 공부 방법 발표" 내용을 공유합니다. 개인 학습 방법을 공유하는 것이기 때문에 모두에게 맞지 않을 수 있습니다. 또한 말로써 전달된 부분은 누락되어 있기 때문에 참고해주시기 바랍니다. 목차 저는 이랬던 사람입니다. 대학 입학 전까지 컴퓨터 공학이라는 것을 몰랐습니다. 고등학생 때에는 수학, 영어보다 문학, 사회, 역사를 좋아했고 고3 때에는 일러스트레이터, 포토샵 등을 이용하는 그래픽스 디자인 작업을 1년 동안 공부하고 자격증을 취득했습니다. 저와 맞지 않아서 진로 고민을 하게되었고 고등학교 선생님을 통해 컴퓨터 학과를 알게되어 제 수시 성적으로 갈 수 있는 수도권 전문대학의 컴퓨터 정보학과로 무작정 입학했습니다. 소..

    좋아요52
    댓글4작성시간2021. 12. 9.
    게시글 이미지
  • 소소한 글 : Java Lambda를 활용하여 Dynamic Proxy의 Self Invocation 회피하기글 내용

    이 글은 Java 환경에서 Dynamic Proxy 기반의 기능들을 사용할 때 주로 발생하는 문제인 Self-Invocation을 Lambda를 통해 어떻게 회피할 수 있는지에 대한 내용을 담고 있는 글입니다. Dynamic Proxy, AOP에 대한 이론적인 부분(발생 원인, 호출 흐름 등)들은 다루지 않을 것이기 때문에 다른 글들을 참고하시길 바랍니다. https://www.slideshare.net/MoonGyeom1/2019-springaop https://blog.outsider.ne.kr/846 https://lob-dev.tistory.com/entry/Spring-AOP와-요청-인터셉트-개념 Lambda와 관련해서는 학습을 진행하며 작성한 글이기 때문에 잘못된 내용이 있을 수도 있습니다. ..

    좋아요9
    댓글0작성시간2021. 10. 18.
    게시글 이미지
  • 소소한 글 : Spring Boot JOOQ로 데이터베이스 접근하기 (+ JPA)글 내용

    (2022-10-23 build.gradle.kts 포맷 및 써볼만한 기능 예시 추가) 이 글은 Service, Repository와 Test code만 가지는 간단한 예제만 포함합니다. (회사에서 도입된 것을 공부하고 있는 중이라 복잡한 예제를 글로 쓰기는 어렵네요. ㅎㅎ;) 상세한 내용은 JOOQ Document와 https://github.com/jOOQ/jOOQ/tree/main/jOOQ-examples 등의 링크를 참고하시길 바랍니다. JOOQ 란? Compile 시점에서 구문 오류를 파악 가능한 Type Safe 한 Native Query를 만들 수 있고, DB의 Table 정보를 기준으로 Entity를 생성하는 상용 소프트웨어 라이브러리입니다. 활발한 컨트리뷰트 활동과 질문이 이루어지고 있으..

    좋아요5
    댓글0작성시간2021. 9. 29.
    게시글 이미지
문의안내
  • 티스토리
  • 로그인
  • 고객센터
© Kakao Corp.