Skip to content

KSH-code/awesome-practical-posts

Repository files navigation

2024.05.22

  • https://frogred8.github.io/docs/034_why_is_kafka_fast/
    • Kafka가 왜 빠른지에 대해 설명으로 시작하지만, OS level에서의 zero copy에 대해 설명하거나 TLB와 같은 키워드를 언급하는 등 레퍼런스를 참고하면 좋을 내용들이 많았다.
    • 핵심은 contexnt switching을 줄여서 비용을 줄이는 것인데, 트래픽이 많은 서비스를 개발할 때는 사소한 로직이더라도 I/O가 얼마나 발생하는지 context switching은 얼마나 발생하는지 파악하는게 중요해보인다.

2024.05.16

  • https://toss.tech/article/27600
    • 라이브 쇼핑 서비스의 성능 개선 방법들에 대해 설명한다.
    • 실무에서 많이 사용해봤던 최적화 방법들이다. 1) Universal data를 캐싱하기, 2) Universal data의 캐싱이 Redis같은 Database라면 Local caching하기, 3) Local caching은 consistency를 보장하기 어려우므로 pub/sub구조로 invalidate하기, 4) 중복 Http call 제거하기 가 있었다.
    • 다른 추가적인 방법은 클라이언트에서 캐싱하기 도 있는데, 단, 클라이언트팀과 서버팀의 논의를 통해 어떤 데이터가 캐싱되어도 괜찮을지 확인해야 된다고 생각한다.
    • 그리고, 모니터링 부분이 언급되어 있는데 1) 문제지점 파악, 2) 개선 결과 확인 은 중요하므로 필수로 되어야 한다고 생각한다. 이 과정은 쉽고 빠르게 진행될 수 있어야 가장 좋다.

2024.03.27

  • https://groups.google.com/g/wiredtiger-users/c/1YHbNXPw-1A
    • MongoDB에서 B-tree를 어떻게 활용하며 B+-tree랑 어떻게 다른지 설명하는 내용입니다.
    • 핵심은, (1) leaf들에만 데이터 저장하지만, leaf간에 이동 불가능한 것입니다. (2) 부족한 성능은 캐싱으로 해결합니다.

2024.03.11

  • https://engineering.linecorp.com/ko/blog/line-shopping-platform-kafka-mongodb-kubernetes
    • Scale up의 한계로 Scale out을 고려해야할 때, 읽으면 좋은 글 같다.
    • 핵심은, 1) 카프카 스트림을 이용해서 DB데이터를 ksql로 관리하고, 2) MongoDB로 샤딩을 잘 해서 scale-out의 장점을 취하면서, 3) Disk I/O를 최소화하기 위한 테크닉까지 고려하는 것이다.
  • https://techblog.lycorp.co.jp/ko/experience-in-migrating-order-db-on-ecommerce-platform
    • Database를 변경하는 것으로 시작하지만, 관련 내용은 마지막에 짧게 설명되어 있고, 사실 모델링을 어떻게 하면 좋을지, Persistence Layer를 어떻게 관리하면 좋을지에 대한 내용이 더 와닿았다.
    • 핵심은, 1) Persistence Layer와 Domain Layer를 잘 분리하는 것, 2) Aggregate를 잘 정의해서 DB의 overhead를 최소화하는 것, 3) JPA나 Java에서 병목지점을 파악하여 개선하는 것 이 있다.

2024.03.05

  • https://tech.devsisters.com/posts/cro-mysql-online-alter/
    • Online DDL을 하는 경우와는 무관한 내용들을 설명하는 거 같으나, index를 사용하는지 확인하는 것과 캐시를 어떻게 관리해야 리소스 효율적인지 설명하는 내용은 어디에서나 적용 가능하고 유익한 내용같다.
    • 핵심은 공통 캐시가 필요한 경우 적극 활용과 작성한 쿼리는 항상 explain해보는 것이다.
  • https://techblog.lycorp.co.jp/ko/running-redis-at-scale
    • 글의 처음부터 끝까지 몰입하면서 읽게된 글이다. Redis와 같은 캐시 레이어는 보통 꾸준히 사용량 추적하지 않으면 사용자 입장에서는 단순히 scale-up을 선택할 수 있는데, 이를 추적하는 메트릭을 제공받는다면 너무 좋을 거 같았고, 메일로 피드백 받는 것도 인상깊었다.
    • 핵심은 공통 서비스 제공자 입장에서는 사용자들의 편리함을 위해 니즈를 잘 파악하는 것과 피드백을 잘 받는 것인거 같고, 사용자 입장에서는 주기적으로 공통 리소스 오남용하고 있는지 고민하는 것인거 같다.

2024.02.19

  • https://aws.amazon.com/ko/blogs/tech/how-channel-talk-handles-high-volume-traffic-with-amazon-sqs/
    • 채널톡에서 Amazon SQS를 활용하여 traffic spike를 어떻게 점진적으로 개선했는지 소개합니다.
    • SQS의 내용을 예시로 소개하지만, Kafka와 같은 Queue System에서도 적용할 수 있는 내용들로 보입니다.
    • 예를 들어, 중복 제거를 위한 별도 키 추가, Distributed Lock으로써의 큐 시스템 활용, 로깅과 같은 부가적인 시스템은 별도 이벤트 스트리밍으로 분리 후 스팟 인스턴스로 비용 절감과 같은 내용입니다.

2024.02.16

2024.02.14

  • https://ryanpark.dev/30
    • 특히 이전 작업들을 존중하자는 내용이 인상깊습니다. 내 결과도 남에게 안좋게 보일 수 있다는 것을 인지하고 겸손하자는 생각이 들었습니다.

2024.02.07

  • https://techblog.woowahan.com/14041/
    • Elasticsearch를 직접 운영하던 환경에서 Cloud(Opensearch)로 마이그래이션 하는 과정을 설명합니다.
    • 부하테스트나 여러 인프라 세팅하는 과정을 소개해서 나중에 비슷한 작업이 진행될 때, 참고하면 도움될 거 같습니다.
  • https://www.infoq.com/articles/saga-orchestration-outbox/
    • long-running business 트랜잭션을 유연하고 강력하게 구현할 수 있는 방법인 saga pattern에 대해 설명합니다.
    • Transactional Outbox Pattern, CDC(Debezium) 을 이용하고 있고, 여러 케이스에 대해 유의해야 될 사항들을 설명합니다.
    • 또한 모니터링 방법에 대한 설명까지 합니다.

2024.02.02

2024.01.30

  • https://suhwan.dev/2019/03/27/spring-test-context-management-and-caching/
    • 스프링 테스트 코드의 context에 대해 설명하며, 요는 �MockkBean같은 것을 공통으로 적용하도록 해서 여러 개의 context를 만들지 않는 것이다.
  • https://techblog.woowahan.com/15764/
    • 금칙어는 다국어가 될 수록 데이터가 많아지며 검색해야하는 양이 늘어나서 서버에 부하를 주게 됩니다. 하지만, 아호코라식 알고리즘을 활용하는 것과 글에서 설명하는 허용단어의 조합 마지막으로 숫자와 같이 우회 패턴을 정리하면 적은 작업으로도 큰 임팩트를 낼 수 있습니다.

2024.01.25

2024.01.24

2024.01.09

2024.01.05

  • https://blog.lastmind.io/archives/981
    • 아마존의 Debate, Disagree & Commit 의 내용이 생각나는 글이다. 여러 번 부탁하는 것은 여러 환경으로 인해 일이 잘 진행되지 않는 것을 의미하는데, 내가 생각했을 때의 좋은 결론은 논의를 결론내고 (어떤 방향으로 가든) 결과를 내는 것이다. 그 과정에서 disagree & commit이 필요해질 수 있는 것이다.
    • https://brunch.co.kr/@chuchupie/21
  • https://blog.lastmind.io/archives/992
    • 글의 내용과는 살짝 다를 수 있지만, 규칙이 점점 많아지는 상황을 목격했던 적이 있다. 규칙은 복잡도를 증가시키고 환경을 경직시키는 경향이 있다고 생각한다.
    • 그래서 규칙을 없애는 것에 집중을 했었는데, 문득 그 때가 생각났다. 과연 많은 규칙이 좋을까? 규칙이 없어도 잘 진행되는 시스템이 중요하다고 본다.
  • https://blog.lastmind.io/archives/593
    • �드라이퍼스 모델을 보며 든 생각은 해당 모델에서 설명하는 각 단계가 어떤 것인지를 아는 것도 좋지만, 결국은 본질적으로 모델이 어떤 것이든 현재의 상황보다 더 나은 다음 단계를 위해 어떤 것들이 필요한지 인지하고 훈련하는지 인 거 같다.

2024.01.14

open ai 매출이 벌써 연 2조라고 하네요.

kubernetes의 cpu설정을 여러 케이스로 해서 개선하는 내용을 소개합니다. 레퍼런스들 까지 보면 도움이 많이 될 거 같아서 읽는 것을 추천합니다.

엔지니어링 비용을 원화로 환산하는데, 임팩트를 산출하는 과정이 인상적입니다.

마틴파울러 아저씨가 프롬프트 엔지니어링을 어떻게 하는지 설명하는 글입니다. 정답을 바로 알기 보다는, 문제 해결 과정을 같이 하는 것이 인상적이네요.

2023.

2022.02.21. ~

Testing

Technique

Principle

Web

Analytics

Ruby

Project

Web Accessibility

2022.01.07. ~

Security

Test

Interview

Event Streaming

Scaling Productivity

Ruby

Front-end

Css

2021.11.01. ~

Rails Tips

Distributed System

Performance

Inspection

Upgrade

Etc

2021.09.01. ~

Ruby upgrade guide

Tips for PS

Rewrite legacy systems with no downtime

Caching strategy

SOLID

Maximize developer productivity

Rails upgrade guide

Ruby internals

Code smell

To optimize performance for analytics

Software Test

Package Design Principle

Software Architecture

Philosophy of Software Design Series

2021.07.27. ~

2021.07.15. ~

2021.07.15.

2021.05.31.

  • What Is MJIT in Ruby 2.6 & How Does It Work?
    • It explains that MJIT is method based just in time compiler as simple.
    • A look at how Ruby interprets your code
      • If you do not know about MJIT how it works, read this first. and you are into optimization, next up is Tail Call Optimization in Ruby
        • TCO is really intersting to me.
        • If you are intersted in algorithm problems, you may know TCO, is because stack overflow is occured in many recursion problems.
    • Get back to MJIT, Koichi Sasada's report is intersting "YARV: Yet Another RubyVM". I don't know its copyright so I just share the title.
    • Finally, we should know about MJIT. So what?
    • The real important thing is Ruby may not be used without any library such as Rails.
    • Ultimately, I was wondering if Ruby uses JIT, then RoR performance is better than that without JIT.
    • Ruby 3 JIT can make Rails faster Here is helper to solve my problem.
    • My conclusion is that we should not use RoR with JIT yet. Because it is unstable. However I think that metric of method usage would be better that it without JIT in the future.

2021.04.29.

2021.04.08.

2021.04.04.

2021.03.22.

2021.03.05.

  • What does the other user using Ruby thinks of harder test
    • Private method tested means to be complicated software and might be violated SRP. It says that to solve method is refactoring. But test would then be test still complicated. Hence says again that could be solved by stub or mock.
    • By the way, it may make following question. What are stub and mock? so is it appropriate solution? and in TDD can use that? does?
    • Martin Fowler(a.k.a Unkle Bob) introduces what is the unit test? and differences between classical testing and mockist testing.
      • It is helpful to understand that to use mock and stub might be appropriate in TDD.
      • What I'm saying is that in tranditional TDD, test is only concerned about input and output. However to use stub and mock means that test code knows how such implemented. But mockist testing is allowed mock and stub in test code since unit test must be isolated.
      • So, How am I supposed to choose? my answer is that it depends on.

2021.02.01.

  • Ruby on Rails about Predicate
    • Further article
    • It does not post. but it is important to think what rails core developers' think.
    • And make a deep think predicate methods.
    • Official Ruby FAQ
      • However, this post says predicate methods can return true or false. so I'm confused now.
      • Finally, I've realized good to use predicate method'd be return only true and false because of usability and for documenting. as you know nil is unexpected value.

2021.01.13.

2021.01.07.

Before

Ruby

JS

Architecture

Data Science

Basic CS

Refactoring

Web

Others