DB 이미지 마이그레이션 (외부 url → S3 저장 + URL 갱신)
·
Jungle
📖 프로젝트 배경우리 팀은 기존 외부 CDN에 저장된 약 2만개의 제품 이미지를 AWS S3로 마이그레이션해야 하는 상황에 직면했습니다.단순히 파일을 옮기는 것이 아니라, RDS 데이터베이스의 URL도 S3의 링크로 함께 업데이트해야 하는 복잡한 작업이었다.로컬에서 RDS가 포트포워딩 방식으로 접근 가능하기에 로컬환경에서 아래 프로젝트를 실행시키려고하였지만, 무슨문제인지 접근이 불가능하기에.프로젝트를 위해 유지중이던 python 서버에 해당 코드를 올려서 실행하니 수월하게 해결할 수 있었다.🎯 마이그레이션 목표5,000개 이상의 제품 이미지 S3로 이전RDS 데이터베이스 URL 동기화 업데이트무중단 서비스 유지데이터 무결성 보장🛠️ EC2 환경 구축 과정1단계: EC2 인스턴스 준비# EC2 인스턴..
[Python] 다익스트라(Dijkstra) 알고리즘 (최단경로 탐색)
·
Algorithm
다익스트라(Dijkstra) 알고리즘정점 - 다른 정점까지의 최단 경로를 구하는 알고리즘그 과정에 모든 다른 정점까지 최단 경로를 획득https://velog.io/@717lumos/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EB%8B%A4%EC%9D%B5%EC%8A%A4%ED%8A%B8%EB%9D%BCDijkstra-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98전제 : 모든 간선에 음수인 가중치(weight)가 있어서는 안된다알고리즘대략적인 흐름출발 노드 설정각 노드로 가는 최소 비용 저장방문하지 않은 노드 중 비용이 적은 노드 선택해당 노드를 거쳐 다른 노드로 가는 경우를 계산, 기존 비용보다 낮을 경우 비용 갱신3~4 반복구현초기화:시작 정점의 거리 0으..
[Python] 트리 - 전위, 중위, 후위순회와 이진탐색트리
·
Algorithm
https://thinking-developer.tistory.com/74(참고)트리전위 순회(Preorder)(1) 정의 및 순서순회 순서: (현재 노드) → (왼쪽 서브트리) → (오른쪽 서브트리)즉, 노드를 방문하자마자 그 노드의 정보를 처리(예: 출력)한 후, 왼쪽→오른쪽 순으로 내려갑니다.(2) 특징루트(root)를 가장 먼저 방문하므로, 트리 구조를 (부모-자식) 순서대로 파악하기 쉽습니다.예를 들어, 트리를 복원하거나 계층적인 구조를 직관적으로 출력할 때 유용합니다.중위 순회(Inorder)(1) 정의 및 순서순회 순서: (왼쪽 서브트리) → (현재 노드) → (오른쪽 서브트리)왼쪽 서브트리를 모두 방문한 뒤, 현재 노드를 방문하고, 그 다음 오른쪽을 방문합니다.(2) 특징이진 탐색 트리(B..
[Python] 딕셔너리(Dictionary) 문법
·
WIL
딕셔너리(Dictionary)란파이썬에서 dictionary는 key: value 쌍 으로 이루어진 자료구조. 해시 테이블로 구현되어있어 효율적으로 키를 통해 값을 조회할 수 있음장단점기본적으로 해시테이블의 장단점과 거의 같다장점평균적으로 데이터 접근/ 삽입 속도가 O(1)키로 직관적인 접근이 가능단점해시테이블 구조를 사용하기때문에 메모리 사용량이 많아질 수 있다.해시 충돌로 인해 최악의 경우 복잡도는 O(n)문법 선 요약접근(조회): my_dict[키], my_dict.get(키[, 기본값])값 할당(추가/수정): my_dict[키] = 값삭제: del my_dict[키], my_dict.pop(키[, 기본값])검색 메서드: my_dict.keys(), my_dict.values(), my_dict.i..
[Python] 그래프 기초
·
자료 구조
그래프는 노드(또는 정점; Vertex)과 간선(Edge)을 포함한 비선형 자료구조G = (V, E)그래프 이론은 오일러가 쾨니히스베르크의 다리 문제 에 대한 논문을 작성함으로 시작된 것으로 여겨진다. 이후 다양한 학자들에 의해 그래프 이론이 연구되었고, 구스타프 키르히호프로부터 키르히호프 회로 법칙을 출판하였고, 이는 네트워크 이론의 시초가 되었다.관련 용어정점 (vertex) : 노드(node)와 혼용하여 사용하며, 데이터가 저장되는 그래프의 기본 요소. 점간선 (edge) : link라고도 하며, 보통 무방향 그래프에서 정점간의 관계(연결)을 말함아크 (arc) : 방향성이 있는 방향그래프에서 사용하는 두 정점 사이의 연결을 의미경로 (path) : 한 정점에서 시작해 연속된 간선을 통해 다른 정점..
[Python] 연결 리스트(Linked List)의 기본 (w/ singly linked list)
·
자료 구조
각 노드(node)가 데이터와 다음 노드에 대한 참조(포인터)를 가지고 있는 선형 자료구조배열과 달리 메모리 상에 연속적으로 배치되지 않고, 각 노드가 동적으로 생성되어 연결코드 참고 : https://www.geeksforgeeks.org/linked-list-data-structure/ 구성 요소노드(Node)데이터 : 실제 저장할 값다음 포인터 : 다음 노드의 주소(참조)를 가리킴헤드(Head): 리스트의 시작 노드를 가리킴테일(Tail) : 필수요소는 아니며, 리스트의 마지막 노드를 가리키며 삽입 시 효율적으로 사용될 수 있음종류단일 연결 리스트 (Singly Linked List) : 각 노드가 다음 노드만 참조이중 연결 리스트 (Doubly Linked List) :각 노드가 이전 노드와 다음..
[Python] 링 버퍼 (Ring buffer) 와 원형 큐
·
자료 구조
고정된 크기의 메모리 공간(버퍼)을 순환적으로 사용하는 자료구조. 배열의 끝에 도달하면 다시 시작위치로 돌아가서 데이터를 저장하거나 읽는 방식주요 특성고정 크기 메모리 사용미리 정해진 크기의 배열(버퍼)을 사용함동적 크기 조절 없이 항상 일정한 메모리 사용순환적 구조 (원형 구조)배열의 끝에 도달하면, 다음 요소는 배열의 첫 번째 위치부터 기록됨인덱스 관리 시 모듈로(%) 연산 사용하여 wrap-around 처리빠른 데이터 접근인덱스 계산만으로 삽입과 삭제 연산(O(1))을 수행함실시간 데이터 스트림 처리나 버퍼링에 적합FIFO 원칙 적용기본적으로 큐와 같은 선입선출(FIFO) 특성을 따름데이터를 넣은 순서대로 읽어내거나 제거함구성 요소버퍼 (배열): 데이터를 저장할 고정 크기의 배열front (읽기 포..
[Python] 큐 (queue) 기본개념
·
자료 구조
데이터를 임시 저장할 때 쓰는 자료구조입, 출력 순서는 선입 선출 FIFO(First In First Out) 방식개요큐는 데이터를 저장할 때 한쪽 끝(뒤, rear)에서 삽입(enqueue)하고, 다른 쪽 끝(앞, front)에서 삭제(dequeue)하는 자료구조. 즉, 먼저 들어온 데이터가 가장 먼저 나감주요 특성FIFO 특성:선입선출(First-In, First-Out): 큐에 먼저 삽입된 데이터가 가장 먼저 삭제이는 대기열, 티켓 발권 시스템, 네트워크 패킷 처리 등 실제 상황에서 자연스럽게 발생하는 순서를 반영기본 연산enqueue(item):큐의 뒤쪽에 새로운 데이터를 추가큐가 가득 찬 경우(배열을 사용한 고정 크기 구현 시) 예외 처리를 하거나, 동적 크기 조정을 수행할 수 있dequeue(..
[Python] 백준 3190 - 뱀 (deque와 list를 활용한 queue 구현)
·
Algorithm
주의제 능력 부족으로 딱히 도움이 안될 확률이 높습니다문제는 여기에서 https://imgur.com/you-can-actually-win-snake-who-knew-ord27qI문제 자체는 고오전 게임인 뱀 게임을 구현하는 내용이다.게임판을 생성하고, 그 위에 뱀이 먹으면 길어지는 사과를 놓고뱀이 사과를 먹으면 길어질 뿐인 단?순한 게임이다결론부터 말하면, 난 이 문제를 하루종일 붙들게되었다뭐 다른 문제들도 다 비슷한 상황이지만가장 많은 시간을 차지한건 구현 구상인데,도저히 어떻게 큐를 사용해서 게임을 구현하라는건데 라는 생각만 계속 맴돌았다그간 해온건 배열, 탐색뿐인데 아니 들어오고 나가는게 왜 뱀이되는건데..반나절을 그렇게 시간을 보내고, 결국 기계의 손을 빌렸다그렇다, 내 수 시간은 그에게 단 '..
시간복잡도에 따른 정렬의 종류
·
Algorithm
$O(n^2)$(평균)버블정렬 (단순 교환 정렬)이웃한 두 원소의 대소관계를 비교하여 필요에 따라 교환을 반복$T(n) = O(n^2)$최대 $n(n-1)/2$번 정렬가장 성능이 안좋은 정렬셰이커 정렬버블정렬을 개선한 정렬홀수 반복 : 가장 작은수를 앞으로, 짝수 반복 : 가장 큰 수를 뒤로전체 반복(while) 구간에서 for문이 두개가 들어있음(이중x)선택 정렬 (Selection sort)모든 수를 훑어서 가장 작은(또는 큰) 것을 1번째, 2번째… (n-1)번 반복한다최대 $n(n-1)/2$에 비례하는 시간 소요 $O(n^2)$삽입 정렬 (Insertion sort)k번째 원소를 1부터 k-1 까지와 비교해 적절한 위치에 넣고, 그 뒤의 자료를 한 칸씩 뒤로 밀어내는 방식평균적으로 3 종류 중 빠..