본문 바로가기

전체 글359

[시스템디자인 3편] 메시지큐에 이벤트가 대량으로 생성된 경우 목차는 시스템 디자인 목차 에 있습니다. 추후 내용을 더 정리할 예정입니다. 간단하게 정리했습니다. [시스템디자인 3편] 메시지큐에 이벤트가 대량으로 생성된 경우 Case 1. 메시지큐에 이벤트가 대량으로 생성된 경우 Kafka 의 파티션에 대량 이벤트가 생성이 됐다고 가정하겠습니다. 주기적으로 발생하는게 아니라 특정 시간에만 발생했다고 가정합니다. 메시지 이벤트는 MySQL, Redis 등 다양한 스토리지를 사용한다고 가정합니다. 메시지 이벤트가 너무 많이 생성 -> MySQL 부하 -> MySQL session 이 고갈 -> Application Thread 고갈 가정합니다. 메시지큐가 kafka 라고 한다면, 오프셋 랙(offset lag) 이 증가하며, consumer 서버 쪽의 gc, cpu 사.. 2024. 3. 9.
[Infra 4편] Container, Docker, k8s 정리 목차는 Infra 목차 에 있습니다. [Infra 4편] Container, Docker, k8s 정리 정리 용도로 작성했습니다. 계속해서 내용 보강할 예정입니다. Container Application Code 와 모든 Depedencies 를 패키징하는 소프트웨어 표준 단위입니다. 예를 들면, Tomcat, Mysql 과 같은 애플리케이션을 독립적으로 실행할 수 있는 패키징 단위입니다. 컨테이너는 하나의 os 위에서 독립적으로 실행되며, 영향을 주지 않습니다. 즉, 하나의 os 위에 여러개의 container 가 실행됩니다. Container vs 가상화 착각하기 쉬워 정리했습니다. Container 의 경우 하나의 OS 에서 여러 Conatiner 가 독립적으로 실행된다면, VM 은 os, app .. 2024. 3. 4.
[spring 23편] spring boot 3.2.1 적용 회고 목차는 spring series 목차 에 있습니다. [spring 23편] spring boot 3.2.1 적용 회고 나중에 볼려고 정리했습니다. Intro spring boot 3.2.1 적용해보며 경험했던 점을 정리했습니다. 기억이 나는데로 적었으며, 틀린 내용이 있을 수 있습니다. 지금 글을 쓰는 시점에 spring boot 3.2.2 가 나왔습니다. Parameter Name Discovery spring boot 3.2.1 적용하면서 bean 을 가져올 때(생성자 주입 또는 Autowired 등), 빈이 2개 이상 발견됐다는 에러가 발생했습니다. 해결방안은 Qualified 를 사용해서 bean 을 명시적으로 주입합니다. 아래 패치 내용으로 인해 그런 것이라 추정됩니다. 확실하지 않습니다. Th.. 2024. 2. 20.
[Infra 3편] 서버 특정 포트 접근 가능한지 확인하는 방법 목차는 Infra 목차 에 있습니다. [Infra 3편] 서버 특정 포트 접근 가능한지 확인하는 방법 접근하고자 하는 서버의 포트가 listen 상태여야 telnet, nc 명령어가 동작이 됩니다. NC (netcat) 넷캣은 네트워크 연결에서 데이터를 읽고 쓰는 유틸리티입니다. // 3000 포트를 listen 모드로 오픈합니다 nc -l 3000 // localhost 3000 번 포트로 접속합니다. 접속이 성공해서 text 를 입력하고 엔터를 치면 3000 포트를 listen 하는 프로세스에서 동일한 text 가 보입니다. nc localhost 3000 // hello world 엔터 치면 아래와 같이 나옵니다. 1번 프로세스 (nc -l 3000 명령어 수행) hello world 2번 프로세스.. 2024. 2. 17.
[Infra 2편] JIT, HotSpot 정리 목차는 Infra 목차 에 있습니다. [Infra 2편] JIT, HotSpot 정리 JIT 란? just-in-time compilation 의 약자이며, 프로그램을 실행하는 시점에 기계어로 번역하는 컴파일 기법입니다. 정적 , 동적 컴파일 방식 기계어로 번역하는 방법에는 2가지가 있습니다. 정적, 동적 정적 컴파일은 실행하기 전에 프로그램 코드를 기계어로 번역하는 것입니다. 동적 컴파일은 프로그램 코드를 읽으면서 실행하는 것입니다. JIT 는 어떤 컴파일 방식인가? JIT 는 정적 + 동적 컴파일 방식을 합친 방식이며, 다음과 같은 FLOW 를 통해 거칩니다. Java Code --> 컴파일러 --> Java byte code (JVM 이 해석할수 있는) --> JVM(JIT 가 관여) --> 기계어.. 2024. 2. 17.
[테스트 및 리팩토링 9편] Junit5 정리 목차는 테스트 & 리팩토링 목차 에 있습니다. [테스트 및 리팩토링 9편] Junit5 정리 추후 찾아보기 위해 정리했습니다. 내용을 보강할 예정입니다. ExtendWith Junit5 의 라이프사이클 중 Test 에서 사용할 기능을 확장하는 것입니다. ExtendWith (SpringExtension.class) spring TestContext + Junit5 통합하여 사용합니다. 인터페이스 : BeforeAllCallback, AfterAllCallback, TestInstancePostProcessor, BeforeEachCallback, AfterEachCallback, BeforeTestExecutionCallback, AfterTestExecutionCallback, ParameterReso.. 2023. 10. 10.