재귀 함수는 프로그래밍에서 복잡한 문제를 간단하게 해결하는 데 종종 사용됩니다. 하지만 모든 재귀가 동일한 것은 아니며, 특히 깊은 재귀 호출이 필요할 때는 그 차이를 이해하는 것이 중요합니다. 본문에서는 두 가지 주요 재귀 형태인 일반 재귀와 테일리 커전에 대해 살펴보고, 각각의 특징, 장단점을 비교해 보겠습니다. 일반 재귀 일반 재귀에서 함수는 자기 자신을 호출하며, 각 호출마다 현재의 함수 상태를 스택에 저장합니다. 이 방식은 직관적이고 이해하기 쉽지만, 깊은 재귀에서 스택 오버플로우를 일으킬 위험이 있습니다. 각 재귀 호출은 메모리를 소비하며, 호출이 깊어질수록 성능 저하가 발생할 수 있습니다. 테일리 커전 테일리 커전은 재귀 함수의 마지막에서 자신을 호출하는 특별한 형태입니다. 이 방식은 반환 ..
분류 전체보기
스프링 배치의 주요 컴포넌트 스프링 배치 애플리케이션은 다음과 같은 주요 컴포넌트로 구성됩니다: JobLauncher: 배치 작업을 시작하는 데 사용됩니다. Job: 배치 처리의 전체적인 흐름을 정의합니다. JobInstance: Job의 실행 인스턴스를 나타냅니다. JobParameters: JobInstance를 구별하는 파라미터입니다. JobExecution: Job 실행의 상태와 세부 정보를 나타냅니다. Step: 실제 배치 처리를 수행하는 단위 작업입니다. StepExecution: Step 실행의 상태와 세부 정보를 나타냅니다. ItemReader: 데이터를 읽는 컴포넌트입니다. ItemProcessor: 읽어온 데이터를 처리합니다. ItemWriter: 처리된 데이터를 쓰는 컴포넌트입니다. ..
상황 현재 어떤 서비스는 여러 파드 기반에 하나의 파드 내에서 @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. 자동 문서 생성..