본문 바로가기

분류 전체보기16

[E-commerce Project] 1주차 - Spring의 동작원리 평소에 대규모 트래픽 관련해서 현업에서는 어떻게 트래픽 처리를 하나 늘 궁금했다. 그래서 e-commerce와 관련한 프로젝트를 하기로 했다! 사실, 대규모 트래픽을 처리하는 주제는 여러 부분이 있겠지만 일상에서 가장 와닿고 떠오르기 쉬운 게 주문처리이기 때문이다. (실제로 어떤 이커머스 플랫폼에서는 블랙프라이데이를 진행하는 2주동안 트래픽이 약 300% 증가했다는 기사도 있다.) 트래픽이 저렇게 증가했는데도 어떻게 서버가 다운되지 않고 무사이 이벤트를 마칠 수 있었을까? 그게 너무 궁금했다. 궁금증을 해소하기 위해 글로 읽는 것도 좋지만 역시 나는 몸으로 익혀봐야 바로 안다!!ㅋㅋ 1. 기술 선정 우선 프로젝트의 뼈대를 구축할 프레임워크로는 Spring을 골랐다. 이전에는 Express랑 Nest.js.. 2024. 4. 22.
[알고리즘] 이분탐색, 투포인터 1. 이분탐색과 투포인터에 대하여 이분탐색이란? 정렬된 데이터에 대해 중간 지점의 값을 확인함으로써 탐색 범위를 절반으로 줄여나가는 탐색 방법. 시작점, 중간점, 끝점을 이용하여 탐색 범위를 조절하고, 중간값과 찾고자 하는 값을 비교하여 탐색 범위를 줄여나간다. 투포인터란? 배열이나 리스트에서 두 개의 포인터를 사용하여, 주어진 조건(ex. 합이나 차이 등)에 부합하는 요소의 조합을 찾는 방법. 두 개의 포인터(보통 시작인덱스와 끝인덱스를 활용)를 이동시키며 주어진 조건을 만족하는 요소를 찾는다. 조건에 따라 하나의 포인터만 이동시킬 수 있고, 두 포인터를 동시에 이동시켜야 하는 경우도 있다. 2. 두 알고리즘의 공통점과 차이점 공통점 1. 탐색 범위를 줄인다 : 두 알고리즘 모두 문제의 탐색 범위를 줄.. 2024. 4. 5.
[자료구조] Heap에 대하여 1. 힙(Heap)이란? 힙은 완전 이진 트리 기반의 자료구조로, 우선순위 큐를 구현하는데 주로 사용된다. 각 노드는 자식 노드보다 큰(최대 힙) 또는 작은(최소 힙) 값을 가지며, 이러한 특성을 힙 속성(heap property)이라 한다. 힙은 두 가지 주요 유형으로 분류된다. 최소 힙(Min-Heap): 각 부모 노드의 값이 자식 노드의 값보다 작거나 같아야 하며, 따라서 루트에는 힙에 있는 최솟값이 위치. 최대 힙(Max-Heap): 각 부모 노드의 값이 자식 노드의 값보다 크거나 같아야 하며, 따라서 루트에는 힙에 있는 최대값이 위치. 2. 그러면 힙은 왜 사용하지?? 일반적인 배열에서 최솟값이나 최댓값을 찾기 위해서는 Ο(n)만큼 시간이 걸린다. (배열의 길이가 최대 n개이기 떄문에) 하지만 .. 2024. 4. 4.
컴퓨터가 수를 받아들이는 법(feat. 부동소수점) 컴퓨터는 모든 수를 이진수로 표현한다. 그것이 실수가 됐든, 정수가 됐든 항상 부동소수점 방식을 사용하는데 이것이 왜 문제가 될까? 그리고, 문제가 있으면서도 왜 현대 컴퓨터에서는 부동소수점 방식을 채택했을까? 컴퓨터에는 실수를 표현하는 방식이 크게 2가지가 있다. 첫 번째는 고정소수점, 두 번째는 부동소수점이다. 먼저 고정소수점이란? 정수를 표현하는 비트 수와 소수를 표현하는 비트 수를 미리 정해 놓고 해당 비트만큼만 사용해서 숫자를 표현하는 방식 ex) 실수 표현에 4byte(32bit)를 사용하고 그 중 부호(아래에서 괄호로 표시) 1bit, 정수 16bit, 소수 15bit를 사용하도록 약속해 놓은 시스템에 있다고 가정하자. 이러한 시스템에서 301.3을 표현하면 먼저 301.3을 이진수로 변환해.. 2024. 4. 3.
[알고리즘] BOJ 15686번 제출 코드 회고(Python) https://www.acmicpc.net/problem/15686 15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net 문제를 요약하자면 'M개의 치킨집을 뽑아 모든 집에서 각각의 최소 치킨 거리에 맞는 치킨집을 찾아 최소 치킨 거리의 합을 구하라'는 문제였다. 문제를 보고 'DFS와 백트래킹을 이용하여 풀면 되겠다'라고 생각을했고 해당 개념의 알고리즘 문제를 푼 지 오래됐지만 호기롭게 도전해보았다. import sys input = sys.stdin.readline N, M = map(int.. 2024. 4. 3.
[알고리즘] Python zip함수와 2차원 배열 회전에 대하여 1. zip()이란? : 인덱스에 있는 요소들을 결합하여 새로운 iterable한 객체를 생성하는 함수이다. 코드로 빠르게 확인해 보자! nums = [1, 2, 3] strings = ["a", "b", "c"] new_obj = zip(nums, strings) print(type(new_obj)) # print(list(new_obj)) #[(1, 'a'), (2, 'b'), (3, 'c')] nums 배열과 strings 배열에서 각각의 인덱스에 맞게 요소들이 매핑되어 새로운 객체를 생성해 낸 것을 볼 수 있다. 단, 주의해야 할 점이 있는데 만약 서로 다른 두 길이의 객체를 매핑시키려 하면 가장 짧은 길이의 객체를 기준으로 매핑을 하게 되고 나머지는 버려진다. nums = [1, 2, 3, 4,.. 2024. 4. 1.