전체 글 121

[AWS] Amazon RDS란?

✅ Amazon RDS란? AWS 클라우드에서 관계형 데이터베이스를 더 쉽게 설치, 운영 및 확장할 수 있는 웹서비스이다. 하드웨어 프로비저닝, 데이터베이스 설정, 패치 및 백업과 같은 시간 소모적인 관리 작업을 자동화하고, 사용자가 애플리케이션에 집중하여 애플리케이션에 필요한 빠른 성능, 고가용성, 보안 및 호환성을 제공할 수 있도록 지원해주는 서비스이다. ✅ RDS 데이터베이스 엔진 종류 - MySQL - PostgreSQL - MariaDB - ORACLE - SQLServer - Amazon Aurora ✅ RDS의 특징 관계형 데이터베이스를 제공하는 서비스 Relation Database Service: 관계형 데이터베이스 NoSQL과 반대 가상 머신 위에서 동작 단 직접 시스템에 직접 로그인 ..

AWS 2023.03.07

[MySQL] 클러스터 인덱스

클러스터 인덱스는 아래와 같이 3줄로 요약이 가능하다. 1. 클러스터 인덱스는 데이터 위치를 결정하는 키 값이다. 2. MySQL의 PK는 클러스터 인덱스다. 3. MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있다. 클러스터 키는 정렬된 자료구조이고 클러스터 키 위치에 따라서 데이터의 주소가 결정된다. 이를 다르게 말한다면 클러스터 키 순서에 따라서 데이터 저장 위치가 변경된다는 뜻이고 데이터 저장 위치가 변경된다는 것은 클러스터 키 삽입 / 갱신 시에 성능이슈가 발생한다. 인덱스를 만들 때마다 pk를 만들게 되므로 PK의 사이즈가 인덱스의 사이즈를 결정하게 된다. 🔎 클러스터 인덱스의 장점 1. PK를 활용한 검색이 빠름(특히 범위 검색) 2. 세컨더리 인덱스들이 PK를 가지고 있어 커버링..

Database/MySQL 2023.03.07

[MySQL] 인덱스 자료구조

인덱스의 핵심은 탐색 범위를 최소화 하는 것이다. 그렇다면 탐색이 빠른 자료구조들은 어떤 것이 있을까? Hash Map, List, Binary Search Tree 등이 있는데, 하나씩 간단하게 살펴보도록 하자. ✅ HashMap - 단건 검색 속도 O(1) - 범위 탐색 O(N) - 전방 일치 탐색 불가 Ex) like 'AB%' 해시맵은 키와 밸류가 있다. 그렇기 때문에 단건 검색 속도는 빠른편이며 상수 시간이 걸리게 된다. 범위 탐색에는 O(N) 시간이 걸리게 된다. ✅ List - 정렬되지 않은 리스트의 탐색은 O(N) - 정렬된 리스트의 탐색은 O(logN) - 정렬되지 않은 리스트의 정렬 시간 복잡도는 O(N) ~O(N * logN) - 삽입 / 삭제 비용이 매우 높음 정렬되지 않은 리스트는..

Database/MySQL 2023.03.06

[AWS] AWS S3(Simple Storage Service)란?

✅ AWS S3(Simple Storage Service) AWS의 S3는 Simple Storage Service의 약자로 파일 서버의 역할을 하는 서비스이다. 일반적인 파일서버는 트래픽이 증가함에 따라서 장비를 증설하는 작업을 해야 하는데 S3는 이와 같은 것을 대행한다. 그에 따라 트래픽에 따른 시스템적인 문제는 걱정할 필요가 없어진다. 또한 앞서 언급한 IAM 사용자에 대한 권한 등을 통해 파일에 대한 접근 권한을 지정 할 수 있어서 서비스를 호스팅 용도로 사용하는 것을 방지 할 수 있다. ✅ AWS S3의 특징 많은 사용자가 접속을 해도 이를 감당하기 위해서 시스템적인 작업을 하지 않아도 된다. 저장할 수 있는 파일 수의 제한이 없다. 최소 1바이트에서 최대 5TB의 데이터를 저장하고 서비스 할..

AWS 2023.03.06

[AWS] IAM 이란?

프로젝트를 하면서 백엔드 부분 배포를 담당하게 됐다. 간단할 줄 알았던 배포에 3일이라는 시간을 쏟으면서 어느 한 부분을 놓치고 있다는 생각이 들었고, 놓친 부분을 확인하기 위해 전체적인 흐름에 대한 파악이 중요하다고 느껴 블로그에 정리하면서 공부해보고자 한다. ✅ IAM 이란? IAM(AWS Identity and Access Management)은 AWS 리소스에 대한 엑세스를 안전하게 제어할 수 있는 웹 서비스이다. 키 모양의 그림에서도 알 수 있듯이, IAM을 사용해 리소스를 사용하도록 인증 및 권한 부여된 대상을 제어할 수 있다. AWS 서비스에서는 어떠한 요청을 처리하기 전에 자격 증명에 대한 것을 IAM에 보내게 되는데 IAM에서는 해당 자격 증명을 보고 유저가 올바른 유저인지(인증), 유저..

AWS 2023.03.06

[python] 백준 7569번: 토마토(BFS)

# 7569 토마토 https://www.acmicpc.net/problem/7569 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque move = [(0,0,1), (0,0,-1), (1,0,0), (0,1,0), (-1,0,0), (0,-1,0)] M, N, H = map(int, input().split()) graph = [[list(map(int, i..

Algorithm 2023.02.23

[DRF] retrieve 메서드와 router 변수 사용하기

# APIvew와 ViewSet으로 Response하기 [DRF] DB에 저장된 데이터를 APIview와 ViewSet으로 Response하기 Django REST Framework에서 views.py 파일은 API 엔드포인트를 처리하는 함수를 정의하는 곳이다. 기본적으로 DRF에서 제공하는 APIview나 ViewSet 클래스를 상속하여 사용하며, 각 클래스는 HTTP 요청 메서드(GE emhaki.tistory.com 이전에 포스팅했던 내용의 확장으로 News 리스트를 출력하고 detail페이지까지 넘겨주는 방법에 대해 정리해보고자 한다. 🔎 views.py class NewsViewSet(viewsets.ModelViewSet): queryset = News.objects.all() serializ..

Python/DRF 2023.02.18

[python] 백준 2293번: 동전1(DP)

# 2293 동전1 https://www.acmicpc.net/problem/2293 2293번: 동전 1 첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline n, k = map(int, input().split()) coins = [] for _ in range(n): coins.append(int(input())) dp = [0] * (k + 1) dp[0] = 1 for i in coins: for j in range(i, k+1): if j - i >=..

Algorithm 2023.02.18

[python] 백준 12865번: 평범한 배낭(DP)

# 12865 평범한 배낭 https://www.acmicpc.net/problem/12865 12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline N, K = map(int, input().split()) bag = [(0,0)] # 인덱스 0자리 차지하기 for _ in range(N): W, V = map(int, input().split()) bag.append((W,..

Algorithm 2023.02.18

[DRF] DB에 저장된 데이터를 APIview와 ViewSet으로 Response하기

Django REST Framework에서 views.py 파일은 API 엔드포인트를 처리하는 함수를 정의하는 곳이다. 기본적으로 DRF에서 제공하는 APIview나 ViewSet 클래스를 상속하여 사용하며, 각 클래스는 HTTP 요청 메서드(GET, POST, PUT, DELETE)에 대한 처리 함수를 가지고 있다. DB에 저장된 데이터를 출력하는 방법을 살펴보기전에 views.py의 기본적인 구조는 다음과 같다. 🔎 views.py from rest_framework.views import APIView from rest_framework.response import Response class MyView(APIView): def get(self, request): # GET 요청 처리 # 결과 데이..

Python/DRF 2023.02.17
728x90