전체 글

소개글로벌 플랫폼에서는 각기 다른 시간대를 사용하는 다양한 국가의 사용자들이 서비스를 이용합니다. 이러한 환경에서는 시간 데이터를 어떻게 저장하고 제공하는지가 사용자 경험에 큰 영향을 미칩니다. 이번 글에서는 한국 시간(KST)으로만 관리되던 시간 데이터를 사용자 시간대에 맞게 변환하는 과정을 소개하고, 이를 구현한 기술적 접근 방식을 공유합니다.  문제초기 환경(KST 기반 데이터 관리)처음에는 한국 서버에서만 운영되었기 때문에 모든 시간 데이터가 KST(한국 표준시)로 관리되었습니다. 하지만 플랫폼이 성장하며 미국, 몽골, 베트남 등 다양한 국가의 사용자들이 늘어나자, 동일한 시간 데이터가 사용자마다 다르게 해석되는 문제가 발생했습니다. 사용자 혼란 사례예를 들어, 2024년 10월 30일 08:00..
·백엔드/Spring
이 글에서는 JWT(Json Web Token) 기반 인증 시스템에서 발생할 수 있는 리프레시 토큰 탈취 문제를 해결하기 위한 실질적인 방법을 제시합니다.탈취된 토큰이 악용되는 상황을 방지하고, 리프레시 토큰 로테이션과 플랫폼별 고유 토큰 관리를 통해 보안을 강화합니다.  프로젝트 환경 요약Spring Boot 3.3.4Java 21JJWT 라이브러리 버전 0.12.3Redis를 활용한 리프레시 토큰 관리Spring Security  의존성 설정JWT와 Redis를 사용하기 위해 다음과 같은 의존성을 추가합니다.dependencies { // JWT implementation("io.jsonwebtoken:jjwt-api:0.12.3") implementation("io.jsonwebto..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드프로그래머스 - 코딩 테스트 공부 (문제 링크)동적 계획법(DP)     문제 설명당신은 코딩 테스트를 준비하기 위해 알고리즘과 코딩 구현 능력을 높여야 합니다. 각각의 문제를 풀기 위해 필요한 알고력과 코딩력이 주어지고, 이를 높이기 위한 다양한 방법(알고리즘 공부, 코딩 공부, 문제 풀이)이 제공됩니다. 주어진 모든 문제들을 풀 수 있는 알고력과 코딩력을 얻는 데 걸리는 최단시간을 구하는 문제입니다.제한사항초기 알고력과 코딩력..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드프로그래머스 - 도둑질 (문제 링크)동적 계획법(DP)    문제 설명도둑이 한 마을을 털려고 계획하고 있습니다. 이 마을의 모든 집들은 원형으로 배치되어 있으며, 인접한 두 집을 동시에 털면 경보가 울리기 때문에 인접한 집들을 동시에 털 수 없습니다. 각 집에 있는 돈의 양이 담긴 배열 money가 주어질 때, 도둑이 훔칠 수 있는 돈의 최댓값을 구하는 문제입니다. 제한사항마을에 있는 집의 개수는 3개 이상 1,000,000개 ..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드프로그래머스 - 등굣길 (문제 링크)동적 계획법(DP)격자 탐색    문제 설명계속되는 폭우로 인해 일부 지역이 물에 잠겨버렸습니다. 이러한 상황에서 집에서 학교까지 가기 위해서는 물에 잠기지 않은 지역을 통과하는 경로를 찾아야 합니다. 주어진 격자에서 오른쪽 또는 아래쪽으로만 이동할 수 있는 상황에서, 집에서 학교까지 갈 수 있는 최단경로의 개수를 구하는 문제입니다.격자의 크기는 m x n으로 주어지며, 출발지점인 (1, 1)과..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드프로그래머스 - 로또의 최고 순위와 최저 순위 (문제 링크)구현    문제 설명로또 6/45는 1부터 45까지의 숫자 중 6개를 찍어서 맞히는 복권입니다. 각 번호가 모두 일치하는 경우 1등, 5개 일치 시 2등, 4개 일치 시 3등, 3개 일치 시 4등, 2개 일치 시 5등, 그 외는 낙첨(6등)입니다.민우는 로또 번호를 구매했지만, 동생이 실수로 번호를 알아볼 수 없게 만들어 일부 번호는 '0'으로 표시되었습니다. '0'은 어..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드프로그래머스 - 혼자 놀기의 달인 (문제 링크)BFS    문제 설명범희는 혼자서 숫자 카드 게임을 즐깁니다. 카드가 담긴 상자가 일렬로 나열되어 있으며, 각 상자에는 1부터 상자 개수까지의 번호가 적혀 있습니다. 범희는 임의의 상자를 골라 그 안에 있는 숫자를 확인하고, 그 숫자가 가리키는 상자를 연달아 열어가며 이미 열린 상자에 도달할 때까지 진행합니다.이렇게 열린 상자들을 1번 상자 그룹이라 하고, 이 상자들을 제외한 나머지..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드백준 - 2048 (Easy) (문제 링크)구현브루트포스시뮬레이션백트래킹    문제 설명2048 게임은 4x4 크기의 보드에서 혼자 즐길 수 있는 게임입니다. 게임에서의 목표는 보드 위에 있는 블록들을 상하좌우 네 방향 중 하나로 이동시켜 최대한 큰 수를 만드는 것입니다.블록을 이동시키면 같은 값을 갖는 블록끼리 충돌하여 합쳐지며, 한 번 합쳐진 블록은 같은 이동 내에서 다시 합쳐질 수 없습니다. 예를 들어, 상단에 2, 2, 2..
·백엔드/JPA
소개JPA를 사용하여 데이터베이스와 객체를 연결할 때, 부모-자식 1:N 관계에서 자식 엔티티가 부모 엔티티와의 관계에서 벗어났을 때 어떻게 처리할지를 결정하는 orphanRemoval 속성의 사용법에 대해 설명하는 글입니다.orphanRemoval의 true와 false 설정에 따른 동작 차이를 알아보고, 이를 사용방법을 설명하겠습니다.    도메인 모델 정의하나의 게시글(Board)에 대해 국가별로 보기 권한(BoardCountry)을 설정할 수 있다고 가정해보겠습니다.이 예제에서는 Board 엔티티가 특정 국가에서만 볼 수 있는 게시글을 나타내며, BoardCountry 엔티티가 그 국가 정보를 담고 있습니다.  Board 엔티티@Getter@Entity@Builder@AllArgsConstruct..
소개알고리즘 스터디를 참여하며 작성하는 TIL입니다.TIL이란? 'Today I Learned'의 약자로, 한국어로 번역하면 '오늘 내가 배운 것'이란 의미입니다.제가 오늘 하루 배운 것 혹은 경험하고 느낀 것들을 기록하고 회고하는 습관을 기르기 위한 글입니다.  문제 & 키워드백준 - 도미노 (문제 링크)브루트포스백트래킹순열 사이클 분할    문제 설명도미노 게임에서 N*N 크기의 보드에 놓인 도미노들 중에서 N개의 도미노를 골라야 합니다. 이때, 선택한 도미노는 같은 행에서 하나, 같은 열에서 하나만 선택할 수 있으며, 선택한 도미노들로 사이클을 만들어야 합니다.사이클이란 도미노 A의 두 번째 숫자와 도미노 B의 첫 번째 숫자가 같고, 마지막 도미노의 두 번째 숫자가 첫 번째 도미노의 첫 번째 숫자와..
dami97
시공의개발자