- CORS란 무엇인가요?2025-01-15 10:22:04CORS(Cross Origin Resource Sharing)는 출처가 다른 곳의 리소스를 요청할 때 접근 권한을 부여하는 메커니즘입니다. 리소스를 주고받는 두 곳의 출처가 다르면 출처가 교차한다고 합니다. 이때 출처는 URL뿐만 아니라 프로토콜과 포트까지 포함됩니다. 만약 클라이언트의 출처가 허용되지 않았다면 CORS 에러가 발생할 수 있습니다.CORS는 왜 필요한가요?과거에는 크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery) 문제가 있었습니다. 피해자의 브라우저에서 다른 애플리케이션으로 가짜 클라이언트 요청을 전송하는 공격입니다.CSRF를 예방하기 위해 브라우저는 동일 출처 정책(SOP, same-origin policy)을 구현했습니다. SOP가 구현된 브라우저..
- 갭락(Gap Lock)과 넥스트키 락(Next-Key Lock)이란 무엇이며, 어떻게 Phantom Read를 방지하나요?2025-01-14 16:01:01Phantom Read란 무엇인가요?Phantom Read는 트랜잭션이 동일한 조건의 쿼리를 반복 실행할 때, 나중에 실행된 쿼리에서 처음에는 존재하지 않았던 새로운 행이 나타나는 현상을 말합니다. 이는 주로 읽기 일관성(Read Consistency) 을 유지하는 과정에서 발생할 수 있는 문제로, 데이터의 삽입이나 삭제가 다른 트랜잭션에 의해 이루어질 때 발생합니다.-- 트랜잭션 A 시작START TRANSACTION;-- 트랜잭션 A 첫 번째 조회SELECT * FROM orders WHERE amount > 150;-- 트랜잭션 B 시작START TRANSACTION;-- 트랜잭션 B 새로운 행 삽입INSERT INTO orders (customer_id, amount) VALUES (4, 250)..
- [트러블 슈팅] 알림 내역 조회 문제2025-01-13 22:43:51문제상황알림 내역은 회원이 읽지 않은 복습 알림을 쌓아두는 기능이다.알림 내역을 확인하려 하니까 404 에러가 발생하는 문제가 생겼다. 아래 코드 부분에서 에러가 발생한 것이다.api를 호출하면서 404에러가 발생할 문제가 무엇인지 확인해보자..// 알림 조회 API 호출const getNotifications = async () => { try { const response = await axiosInstance.get('/v1/api/notification/own/unchecked'); setNotifications(response.data.data); } catch (error) { console.error("알림을 가져오는 중 오류 발생:", err..
- 데이터베이스 시스템에서 동시성을 제어하는 방법에 대해 설명해주세요.2025-01-12 15:23:23대표적인 동시성 제어 방식으로 MVCC(Multi-Version Concurrency Control) 와 Lock-Based Concurrency Control이 있습니다.MVCC(Multi-Version Concurrency Control)MVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식입니다. 각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않습니다.데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있습니다. 트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못합니다. 또한 읽기 작업 시 잠금을 사용하지 않아 높은 동시성을 제공합..
- [백준] 퇴사 - 145012025-01-10 18:41:39https://www.acmicpc.net/problem/14501 해당 문제는 처음엔 백트래킹으로 풀려고 했지만 다시 확인해보니 최고 수익을 찾아야 하는 문제이기 때문에 DP로 진행하였다. 중요한 점은 범위를 넘지 않는 선에서 금액을 더해가야한다. if (i + workingTime[i] 예를 들어 i=0 일때, 0+workingTime[0]=7을 넘어가지 않기 때문에 이 코드가 실행되어 dp[3]=10이 된다. 그런데 이 코드만 계속 실행 되면 dp의 값이0 0 0 10 0 0 0 0 0 0 0 10 0 0 20 0 0 0 0 10 0 0 20 0 0 0 0 10 30 0 20 0 0 0 0 10 30 0 45 0 0 0 0 10 30 0 45 0 0 0 0 10 30 0 45 0 이렇게..
- HTTP 메서드에서 멱등성이란 무엇인가요?2025-01-10 14:10:58연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성이라고 합니다. HTTP 메서드의 멱등성은 동일한 요청을 한번 보내는 것과 여러번 보내는 것이 서로 동일한 효과를 지니며, 서버의 상태도 동일하게 남을 경우에 멱등하다고 이야기할 수 있습니다. 대표적으로 멱등한 메서드는 GET, HEAD, PUT, DELETE, TRACE, OPTIONS 가 있습니다.멱등성은 어떻게 활용될 수 있나요? 🤔모종의 이유로 전송 커넥션이 끊어졌을 때, 멱등성은 클라이언트가 다시 같은 요청을 해도 되는가에 대한 판단 근거가 될 수 있습니다. 멱등하다면 요청을 재시도할 때 같은 서버의 상태를 보장하기 때문에 문제가 없습니다. 반면, 멱등하지 않다면 재시도 요청시 중복 요청을 보내 문제를 발생 시킬 수 있습니다. 예를..
- [트러블슈팅] 랜덤 Pagination 너무 쉽게 봤다.2025-01-09 23:44:38처음 페이지로 회원을 나눌 때 회원을 전체 조회 후 Shuffle을 한 뒤에 해당 리스트를 페이징하는 방법을 생각했었다.하지만 페이지네이션 특성 상 api를 호출할 때마다 다음 페이지를 요청해야하는데 이때 기준이 되는 회원 리스트는 DB에 저장되어 있는데 회원 테이블을 기준으로 하게 된다. 그렇기 때문에 기존에 생각했던 방식은 회원 전체 조회 후 랜덤하게 섞은 리스트를 계속 유지시켜야지만 구현이 가능한 것이다.이 방식은 회원이 많아지면 많아질 수록 api를 호출할 때마다 부담이 된다고 판단하여 다른 방안을 찾아봤다.대책 1. 페이지 마다 랜덤하게 섞기public List getUserProfilePage(Pageable pageable){ Slice users = userService.findPag..
- [백준] N과 M (4) - 156522025-01-09 23:16:30https://www.acmicpc.net/problem/15652 해당 문제는 수열문제이고 비 내림차순 수열이다. 또한 중복이 가능한 것에 초점을 맞추어 백트래킹으로 풀었다. 코드import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;class Main { private static int N; private static int M; private static int[] arr; private static StringBuilder sb = new StringBuilder(); public static void ma..