상황 현재 어떤 서비스는 여러 파드 기반에 하나의 파드 내에서 @Schedule 어노테이션을 통해서 하나의 스케줄러가 동작을 하고 있는 상황이다. 일정한 양의 데이터를 처리한다면 이슈가 없겠지만, 갑자기 데이터가 많아진다면 현재의 스케줄러가 부하가 있을 수 있는 상황이다. 어떻게 대처를 할 것인지? 해결방안 생각 각 파드마다 스케줄러를 돌리게 하는 동시에 데이터들을 각 파드에 나눠서 처리하게 하는 방식 환경변수를 이용해서 조건절을 사용하는 방식으로 분할해서 처리하는 방식을 생각할 수 있을거 같음 스케일 업 하는 방식 큐를 사용하는 방식 RabbitMq나 Kafka를 써서 순서대로 데이터 오는데로 Bulk 단위로 처리하는 방식 한 파드 내에서 스케줄러 처리에 대해서 한계가 있으므로 큐에 모이는 속도를 딜레..
분류 전체보기
면접 제안은 많이 들어오지만 사실 합격까지는 잘 되지 않는 상황이다. 그래서인지 현재 공부하는게 제대로 맞는건가 의문이 들때가 많아서 사실상 지금은 공부를 제대로 하고 있지도 않은 상태다. 다시 말하면 1년전만큼 공부하지 않고 여전히 놀고 있다. 이대로 가다가는 영원히 한 회사에서 머물거 같은 느낌이 많이 들었다. 7개월전부터 나는 ADHD 진단을 받아서 지금은 메디키넷 30mg 을 하루에 2번 복용하고 있다. (이 정도라면 의사선생님께서 말씀하시길이 정도 복용량이면 꽤 쎈 양이라 한다.).면접을 보는데 말하다가 질문을 까먹거나 혹은 집중을 제대로 못해 이해하지 못한 상황이 종종 일어났다. (사실 현 회사에서도 이 부분때문에 고통받는 부분도 있다.). 물론 이전부터 이런 증상은 어렸을 적부터 쭉 있어왔던..
웹 개발에서 성능 최적화는 사용자 경험을 결정하는 중요한 요소입니다. 이 중에서도 캐싱은 빠른 데이터 접근과 서버 부하 감소에 핵심적인 역할을 합니다. 오늘은 캐싱 알고리즘의 기본 원리와 주요 알고리즘 종류에 대해 살펴보겠습니다. 캐싱이란 자주 사용되는 데이터를 미리 메모리에 저장해 두어, 필요할 때 빠르게 접근할 수 있도록 하는 기술입니다. 이는 데이터베이스나 파일 시스템과 같은 상대적으로 느린 저장소 대신, 빠른 접근이 가능한 메모리에 데이터를 보관합니다. 가장 많이 사용되는 캐싱 알고리즘은 다음과 같습니다: LRU (Least Recently Used): LRU 알고리즘은 가장 오랫동안 사용되지 않은 데이터를 캐시에서 제거하는 방식으로 작동합니다. 이는 최근에 사용된 데이터가 미래에 다시 사용될 가..
서론 Java 8의 출시와 함께 소개된 스트림 API는 데이터 컬렉션 처리 방식에 혁신을 가져왔습니다. 이 포스팅에서는 스트림의 핵심 개념과 이를 통해 얻을 수 있는 주요 이점을 탐색해 보겠습니다. 자바 스트림이란? 스트림은 '데이터의 흐름'을 추상화한 Java 8의 기능입니다. 컬렉션 요소를 하나씩 참조해 처리할 수 있도록 해주며, 람다 표현식과 함께 사용되어 코드의 간결성과 가독성을 크게 향상시킵니다. 스트림의 주요 연산 1. 필터링(filter): 조건에 맞는 요소만 추출합니다. List names = Arrays.asList("Alice", "Bob", "Charlie"); List filteredNames = names.stream().filter(name -> name.startsWith("A..
오랜만에 이번 주는 다른 날보다 한가했다. 평소에는 밥먹듯이 야근을 계속했었는데, 이번엔 왠지 죽다살아난 느낌이였다. 여태까지는 2주정도는 야근하면서까지 집에 돌아오면 1-2시간이라도 면접연습을 계속했다. 너무 힘들다 싶으면 적어도 1주일에 한 번 이상은 5km 정도 달리기를 하면서 체력을 보충했다. 그래도 힘든건 여전했지만 이번 주 운영서버 배포가 그나마 잘 성공이 되어서 적어도 내 영역에 대해서는 주말까지는 일할 필요가 없게 되었다. (물론 저번주에는 다른 영역에서 이슈가 있어 새벽 3시까지 근무하기도 했다.) 금요일은 사실 면접이 2개가 있는 날이였다.(오전, 오후). 그런데 당일 날 배포 후에 실서버 대응을 해야할 상황일 수도 있는데, 다행히 이슈가 없어서 전화가 오거나 그러진 않았다. 아무튼 면..
서론 자바 개발자라면 누구나 한 번쯤은 `hashCode()`와 `equals()` 메소드에 대해 들어봤을 것입니다. 이 두 메소드는 객체의 동등성을 처리하는 데 중요한 역할을 하며, 특히 해시 기반의 컬렉션을 사용할 때 이들의 중요성은 더욱 부각됩니다. 이 글에서는 왜 이 두 메소드를 항상 함께 오버라이드해야 하는지에 대해 설명하겠습니다. 본론 1. **`equals()` 메소드의 역할** - `equals()` 메소드는 두 객체가 같은지를 결정합니다. - 자바의 `Object` 클래스에 있는 기본 `equals()` 메소드는 객체의 참조를 비교합니다. - 하지만, 대부분의 경우 객체의 내용이 같으면 같은 객체로 간주하는 것이 바람직합니다. - 따라서, 객체의 상태나 값이 같을 때 같은 객체로 인식되도..
어느덧 이직 준비한지 10개월 정도가 넘었다. 그런데 1차 면접에서 제대로 붙은적이 거의 붙었던적이 없었던 거 같다. (물론 눈을 낮춘 이래로는 서서히 붙고 있음) 내가 생각하기에는 11월 중후반부터 눈을 낮추기 시작할때는 면접관 질문에 대해서 버벅거린적은 거의 없었다고 생각한다. 난이도가 확 낮아져 버린게 체감이 느껴지긴 하다. 그럼에도 불구하고 떨어지는 이유는 분명 있다고 생각한다. 애초에 떨어트릴꺼면 면접에 부르지도 않을거라고 생각한다. 그렇게 눈을 낮춘 이래로는 1달에 3-4번정도는 면접이 계속해서 잡힌다. 지금 1월달인데 다음 주, 다다음주까지 포함하면 면접이 3개정도 예정되어 있고, 저번주에 면접을 한 번 봐서 탈했었다. 저 4개 보는 회사에서 현 회사보다 큰 회사는 없지만, 그래도 가고 싶은..
스프링 프레임워크의 장점 1. 강력한 생태계와 지원 : 방대한 커뮤니티와 라이브러리, 툴의 통합 지원. 2. 안정성과 확장성 : 기업 수준의 대규모 서비스 운영에 적합. 3. 보안 기능 : 스프링 시큐리티를 통한 강력한 인증 및 권한 부여. 4. 종합적인 솔루션 제공 : 웹 개발 뿐만 아니라, 다양한 백엔드 기능 지원. 스프링 프레임워크의 단점 1. 높은 학습 곡선 : 초보자에게 다소 복잡하고 어려움. 2. 무거움 : 상대적으로 많은 리소스 사용과 긴 구동 시간. 3. 설정의 복잡성 : 다양한 구성과 설정 필요. FastAPI의 장점 1. 뛰어난 성능 : Starlette과 Pydantic 기반의 고성능. 2. 간결한 코드 : 직관적이고 선언적인 API 디자인으로 코딩 효율성 증가. 3. 자동 문서 생성..
1. 서론: 스레드와 동시성 문제 소개 - **스레드의 기본 개념 설명**: 프로세스 내에서 실행되는 실행 흐름의 단위. - **동시성 프로그래밍의 중요성**: 다양한 작업을 동시에 처리하는 능력이 시스템의 효율성을 높임. - **동시성 문제의 예시**: 데이터 공유 시 발생할 수 있는 충돌, 경쟁 상태(race condition) 등. - **ThreadLocal의 소개**: 이러한 문제를 해결하기 위한 자바의 도구로서의 ThreadLocal. 2. ThreadLocal의 작동 원리 - **ThreadLocal 클래스**: Java의 `java.lang.ThreadLocal` 클래스 소개. - **주요 메서드 설명**: `set()`, `get()`, `remove()`, `initialValue()`..
'synchronize' 키워드가 함수에 적용될 때의 동작 방식은 다음과 같습니다: Mutual Exclusion (상호 배제): 'synchronize' 키워드가 적용된 함수나 블록은 한 시점에 하나의 스레드만 실행할 수 있습니다. 즉, 한 스레드가 'synchronized' 함수를 실행하고 있는 동안, 다른 스레드들은 해당 함수 또는 블록에 접근할 수 없습니다. Locks on Objects: Java에서 'synchronize' 키워드는 객체에 락을 걸게 됩니다. 메소드가 'synchronized'로 선언되면, 해당 메소드를 호출하는 객체는 락을 획득합니다. 이는 객체 레벨에서 동기화를 제공합니다. 만약 'synchronized' 블록이 사용된다면, 특정 객체에 대한 락을 지정할 수 있습니다. Me..