전체 글

소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.문제 & 키워드프로그래머스 - 테이블 해시 함수 (문제 링크)정렬해시 함수비트 XOR 연산비트 XOR 이란?비트 연산에서 XOR(배타적 논리합) 연산은 두 비트가 다를 때 1을 반환하고, 같을 때 0을 반환하는 연산입니다. XOR는 "exclusive OR"의 줄임말입니다. 두 비트에 대한 XOR 연산의 결과는 다음과 같습니다0 XOR 0 = 00 XOR 1 = 11 XOR 0 = 11 XOR 1 = 0이 연산은 보통 2진수로 표현된 두 숫자에 대..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.문제 & 키워드프로그래머스 - 베스트 앨범 (문제 링크)정렬스트림문제 설명여러 장르의 노래들이 있습니다. 각 노래는 고유한 번호로 구분됩니다. 노래를 수록하는 기준은 다음과 같습니다.속한 노래가 많이 재생된 장르를 먼저 수록합니다.장르 내에서 많이 재생된 노래를 먼저 수록합니다.장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다.노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL란? 'Today I Learned'약자로 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다. 문제 & 키워드프로그래머스 - 문자열 압축 2020 KAKAO BLIND RECRUITMENT (문제 링크)브루트 포스Queue 문제 설명문자열에서 같은 값이 연속해서 나타나는 것을 그 문자의 개수와 반복되는 값으로 표현하여 더 짧은 문자열로 줄이는 비손실 압축 방법을 공부하고 있습니다.예를 들어, "aabbaccc"의 경우 "2a2ba3c"와 같이 표현할 수 있습니다. 하지만 반복되는 문자가 적을 경우 압축률이 낮아지는 단점이 있습니다. 예를 들어, ..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL란? 'Today I Learned'약자로 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다. 문제 & 키워드프로그래머스 - 숫자 문자열과 영단어(문제 링크)replacereplaceAll 문제 설명다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.1478 → "one4seveneight"234567 → "23four5six7"10203 → "1zerotwozero3"이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL란? 'Today I Learned'약자로 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다. 문제프로그래머스 - 숫자 카드 나누기(문제 링크)유클리드 호제법 활용최대공약수 문제 해결 과정문제 해결을 위한 핵심 조건은 다음과 같습니다:철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a.영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a.따라서, A와 B 배열이 있을 때, 하나의 배열의..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL에 대해 설명을 드리자면, TIL은 'Today I Learned'약자로 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다. 문제프로그래머스 - 뒤에 있는 큰 수 찾기(문제 링크)배열스택(Stack) 활용 문제 설명정수로 이루어진 배열 numbers가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수..
퍼사드 (Facade) 패턴복잡한 서브 시스템 의존성을 최소화하는 디자인 패턴 문제의존성이 많을수록 해당 코드를 변경하기가 어려운데, 코드가 변경되어야 하는 이유도 많아지며, 테스트하기도 어려워집니다.레이어드 아키텍처로 어느 정도 의존성을 해소할 수 있었으나, 플랫폼이 커질수록 서비스 레이어(Service Layer)가 의존하는 리포지토리(Repository)와 외부 라이브러리들이 많아질 수밖에 없는 구조였습니다.특히 JPA를 사용하는 환경에서는 도메인 간 상호작용이 많아질수록 Repository 의존성이 과다하게 증가하여, Mock을 사용하는 단위 테스트는 검증이 제대로 되지 않을 뿐만 아니라 목을 하나하나 지정해주기도 어려웠습니다.이러한 문제를 해결하기 위해 퍼사드 패턴(Facade Pattern)을..
최근 운영 중인 플랫폼에서 JPA의 LocalDate 필드(환자 생일, 결제 요청일)가 하루씩 내려가는 문제가 발생했습니다. 이 문제의 원인과 해결 과정을 공유합니다. 문제 상황문제 증상LocalDate 필드(환자 생일, 결제 요청일)의 날짜가 하루씩 내려갑니다.예: 1997-03-25 → 1997-03-24 → 1997-03-23... 로그 확인환자 생일을 수정한 API 호출 이력이 없습니다.결제 요청일은 클라이언트에서 수정할 방법이 제공되지 않았습니다.LocalDate 필드만 문제가 발생하며, LocalDateTime은 정상적으로 동작하고 있었습니다. 타임존 확인백엔드 서버의 JVM 타임존과 DB의 타임존을 확인한 결과 모두 한국(Asia/Seoul)으로 설정되어 있었습니다.@SpringBootApp..
·백엔드/Spring
Spring Batch에서 PostgreSQL Upsert 처리하기기존 프로젝트에서는 Spring Batch의 Chunk 방식을 사용하여 데이터를 처리해왔으나, 새로운 요구사항에 따라 데이터가 이미 존재할 때는 업데이트하고, 존재하지 않을 때는 삽입하는 Upsert 작업이 필요해졌습니다. Chunk 방식은 주로 대용량 데이터를 처리하고 데이터 변환이 필요한 경우에 적합하지만, 특정 로직(Upsert)에 맞춰 단일 작업을 수행하는 데는 Tasklet 방식이 더 유리하기 때문에 Tasklet 방식으로 전환하여 Upsert를 구현하게 되었습니다. Upsert 란?데이터베이스에 존재하지 않는 경우 삽입하고, 존재하는 경우 업데이트하는 방식입니다. 기존 Chunk 방식 @JobScope @Bean ..
·환경개선/JPA
소개개발 과정에서 유지보수성과 확장성을 고려하는 것은 매우 중요합니다. 특히, 시스템이 커지고 복잡해질수록 코드의 일관성과 가독성은 유지보수의 핵심 요소가 됩니다. 이번 글에서는 알림 코드 관리 문제를 Enum Converter를 활용해 해결한 사례를 소개합니다. 이 방법을 통해 알림 코드의 관리 효율성을 높이고, 유지보수의 편의성을 극대화할 수 있었습니다.  문제프로젝트에서 알림 코드가 문자열(String) 타입으로 관리되고 있었습니다. 문제는 이 코드들이 구체적으로 어떤 알림을 발생시키는지 한눈에 파악하기 어렵다는 것이었습니다.데이터베이스나 문서를 보지 않고서는 코드가 무엇을 의미하는지 알기 힘들었으며, 문서조차 최신 상태로 유지되지 않아 정확성을 보장할 수 없었습니다.이러한 상황에서 알림 코드를 수..
dami97
시공의개발자