TIL
-
2024.10.08 Duplicate Requests, Throttling Design PatternTIL 2024. 10. 9. 00:07
Rest API: How to Prevent Duplicate Requests EffectivelyThe solution to prevent duplicate requests that I want to talk about here is that when a user manipulates an API feedmedium.com 중복 request를 어떻게 처리할지에 대한 글이다.이전에도 동일한 주제의 글을 읽었었는데 그때는 UUID를 UK로 사용해 중복을 방지했고 이번에는 본문의 일부를 해쉬 해서 사용한다.전자의 경우는 페이지 새로고침을 하면 UUID 새로 발급되어서, 어떻게 보면 중복 요청을 완벽히 막지는 않는다. (새로고침을 했다면 이걸 중복으로 봐야 할까?)후자는 본문의 일부를 해쉬 하고 UK로 만들..
-
2024.10.05 NATTIL 2024. 10. 5. 16:44
https://docs.aws.amazon.com/ko_kr/vpc/latest/userguide/VPC_NAT_Instance.html NAT 인스턴스 - Amazon Virtual Private Cloud이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오.docs.aws.amazon.com서버 아키텍쳐를 보면 nat instance가 존재한다 private subnet에서 인터넷 연결을 위해서 존재하는 인스턴스이다.인터넷과 소통하려면 공인 ip가 있어야하는데 private subnet에 있는 instance는 사설 ip밖에 없으니 nat를 통해 변환 후 나가는 것이다. 이는 보안적인 이점이 있..
-
2024.09.21 java-acquire-lock-by-keyTIL 2024. 9. 22. 12:15
ConcurrentHashSet 은 지원하지 않지만 ConcurrentHashMap.newKeySet를 지원한다.내부적으로는 ConcurrentHashMap의 key를 관리한다. https://www.baeldung.com/java-acquire-lock-by-key 단일 어플리케이션에서 사용할 수 있는 제어 방법이다.key로 lock을 잡을 수 있는 방법이다. ReentrantLock을 사용했고, 이건 순서를 보장할 수 있다. FairSync냐 NonfairSync냐를 생성자로 정할 수 있다.synchronized는 잠금대기를 jvm이 정해서 lock을 정해주는데 FairSync로 되면 기다린 순서로 lock을 준다. 코드를 보면 심플하게 잘 짜여 있다.한 가지 걸리는 것은 unlock 하는 부분인데..
-
2024.09.20 filter, interceptor, aopTIL 2024. 9. 20. 15:37
filter, interceptor, aop의 차이 기능적인 차이를 보자면.. filter는 servlet container에서 동작하기 때문에 무슨 메소드가 실행되는지 모른다.interceptor의 prehandle은 handler adaptor 전에 실행되는 것 이기 때문에 handler method를 구할 수 있다. aop는 좀 다른게 단순 request에만 적용할 수 있는 게 아닌 모든 layer 메소드에 걸 수 있다. interceptor에서 afterCompletion의 차이postHandle은 예외 때문에 실행이 안될 수 있다.무조건 실행되어야한다면 afterCompletion을 사용하면 된다. 범위는 잘 알려져 있는데 filter는 tomcat에서(sevlet container)동작하고..
-
2024.09.16 JDBC Internal - 타임아웃의 이해TIL 2024. 9. 16. 23:23
https://d2.naver.com/helloworld/1321 음 회사 로그에 이상한 부분이 있다. 먼저 설정은 socket timeout은 10초이고 statement timeout은 30초이다. 위의 글대로 이해하면 statement timeout은 나와서는 안 되는 예외인데 로그가 찍혀있다.socket timeout과 statement timeout 둘 다 종종 찍혀있지만, statement timeout이 더 길게 되어있으면 socket timeout 보다 먼저 동작한다고 이해했는데..slow쿼리가 뭔가 패킷을 보내고 있는 것인가? 음 StreamingResult라서 의미가 있나? 대용량 쿼리긴 했는데..https://stackoverflow.com/questions/24676111/stre..
-
2024.09.13 hikaricp autoreconnectTIL 2024. 9. 14. 21:19
HikariCP/src/main/java/com/zaxxer/hikari/pool/HikariPool.java at 0a6ccdb334b2ecde25ae090034669d534736a0de · brettwooldridge/Hik光 HikariCP・A solid, high-performance, JDBC connection pool at last. - brettwooldridge/HikariCPgithub.com hikari cp는 커넥션을 얻을 때, 커넥션이 유효하지 않으면 다시 do while로 커넥션을 얻으려고 한다.매 쿼리마다 커넥션을꺼내서 사용할 텐데(저장 위치는 mybatis의 경우는 springManagedTransaction안에 있는데 이건 sqlSession안에 들어있다. 쿼리를 실행할 때..
-
2024.09.12 Check If a UsernameTIL 2024. 9. 12. 00:19
How to Efficiently Check If a Username Exists Among Billions of UsersHow to Efficiently Check If a Username Exists Among Billions of Usersmedium.com 데이터가 수백만 수십억을 넘어가면 RDB의 쿼리만으로는 원하는 성능을 얻을 수 없다. 확장에도 비용적인 한계가 존재하고..레디스를 쓰자니 메모리 비용을 생각할 때 효과적이지는 않다. 여기서는 Bloom filter를 추천.가끔 값이 없어도 있음을 나타낼 수 있음.필터는 비트배열로 이루어져 있고.이름을 작은 집합으로 만들고 이를 필터와 비교해 모든 값이 1이 나오면 유저가 존재한다고 칠 수 있겠습니다. 음 Bloom filter 자료 구조는 ..
-
2024.09.09 Architecture DisadvantagesTIL 2024. 9. 9. 23:38
Lessons Learned From The Trenches Developing Event-Driven SystemsPeople hear phrases like “modern microservices architectures” and jump bandwagons without knowing what they’re getting intoblog.stackademic.com Microservices Architecture, The Hard Parts : Trap of Distributed MonolithWhen conversing with seasoned Senior Software Engineers who leverage Microservices Architecture for their product d..