전체 글 121

TDD(Test Driven Development)란?

✅ TDD란 무엇인가? TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다. 테스트 주도 개발(TDD)은 소프트웨어 개발 방법론 중의 하나로, 선 개발 후 테스트 방식이 아닌 선 테스트 후 개발 방식의 프로그래밍 방법을 말한다. 다시 말해 먼저 자동화된 테스트 코드를 작성한 후 테스트를 통과하기 위한 코드를 개발하는 방식의 개발 방식을 말한다. ✅ TDD를 이용한 개발방법 TDD는 기본적으로 위 3단계의 반복으로 진행하며 점진적으로 개발이 진행된다. Red 단계에서는 실패하는 테스트 코드를 먼저 작성한다. Green 단계에서는 테스트 코드를 성공시키기 위한 실제 코드를 작성한다. Blue 단계에서는 중복 코드 제거, 일반화 등의 리팩토링을 수행한다. 중요한 것은 ..

Computer Science 2023.01.31

[MongoDB] Replica Set

✅ Replica Set Members Status Description Primary - Read / Write 요청 모두 처리할 수 있다. - Write를 처리하는 유일한 멤버이다. - Replica Set에 하나만 존재할 수 있다. Secondary - Read에 대한 요청만 처리할 수 있다. - 복제를 통해 Primary와 동일한 데이터 셋을 유지한다. - Replica Set에 여러개가 존재할 수 있다. ✅ Replica Set Election(Fail-Over) Replica Set으로 자동 Fail-Over가 가능하기 때문에 멈춤 없이 서비스를 지속적으로 운영할 수 있는 특징이 있다. 하지만 위의 그림처럼 Primary가 죽게 되면 Read에 대한 요청을 처리할 수 없고, 2개의 Second..

Database/MongoDB 2023.01.30

[MongoDB] MongoDB 구조

MongoBD는 MySQL과 같은 관계형 RDBMS와 다른 구조를 가진다. RDBMS의 Cluster와 DataBase는 동일하지만 RDBMS의 Table, Row, Column의 개념이 MongoDB에서는 Collection, Document, Field의 개념으로 보면 될 것 같다. ✅ MongoDB 구조 🔎 Database 특징 Database Description admin - 인증과 권한 부여 역할 - 일부 관리 작업을 하려면 admin Database에 대한 접근이 필요 local - 모든 mongodb instance는 local database를 소유한다. - oplog와 같은 replication 절차에 필요한 정보를 저장한다. - startup_log와 같은 instance 진단 정보를..

Database/MongoDB 2023.01.30

[DB] 데이터베이스 인덱스(Index)란 무엇인가?

아직까지 미미한 양의 DB를 다뤄보았기 때문에 데이터 양이 증가할수록 실행 속도가 눈에 띄게 느려지는 경험을 해보지는 못했다. 하지만 DB데이터의 양이 증가할수록 쿼리를 잘 사용해야하고, 쿼리의 성능을 높이는 데 중요한 것은 인덱스를 적재적소로 활용해야 함은 잘 알고 있다. 오늘은 인덱스의 개념과 구조, 그리고 필요성, 사용했을 때 장단점들에 대해 정리해보고자 한다. ✅ 인덱스(Index)란? 인덱스(Index)는 데이터베이스 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다. 테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 컬럼의 값과 물리적 주소를 (key, value)의 한 쌍으로 저장한다. 인..

Computer Science 2023.01.30

[python] 백준 3184번: 양(BFS)

# 3184 양 https://www.acmicpc.net/problem/3184 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque R, C = map(int, input().split()) graph = [list(map(str, input().strip())) for _ in range(R)] visited = [[0] * C for _ in range(R)] dx,..

Algorithm 2023.01.30

[DRF] 게시판에 Authentication과 Permission 적용하기

게시판을 작성하는데 있어서 유저가 로그인이 되어있는지 아닌지를 구별해줄 필요성이 있다. 익명 게시판이 아닌경우에는 글을 작성하는 사용자가 로그인 상태인지를 확인해야 하는데 이때 사용하는 개념이 authentication과 permission이다. ✅ Authentication 먼저 authentication에 대해 먼저 알아보면 authentication은 인증이라는 뜻으로 특정 서비스를 사용하는 데 있어 사용자의 신원(회원/비회원/관리자 등)을 확인하는 절차를 의미한다. 즉, user의 id와 password를 확인하는 것이라고 생각할 수 있다. Django의 REST Framework authentication의 종류로는 크게 5가지가 있다. 1. BasicAuthentication HTTP 제어 h..

Python/DRF 2023.01.29

[python] 백준 2468번: 안전 영역(BFS)

# 2468 안전 영역 https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque N = int(input()) graph = [list(map(int, input().split())) for _ in range(N)] high = 0 for i in range(N): for j in range(N): if graph[i][j] > ..

Algorithm 2023.01.28

[python] 백준 2178번: 미로 탐색(BFS)

# 2178 미로 탐색 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque N, M = map(int, input().split()) graph = [list(map(int, input().strip())) for _ in range(N)] visited = [[-1] * M for _ in range(N)] dx, dy = [0,0,-1,1], [-..

Algorithm 2023.01.27

[python] 백준 14226번: 이모티콘(BFS)

# 14426 이모티콘 https://www.acmicpc.net/problem/14226 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만 www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque S = int(input()) visited = [[-1] * (S + 1) for _ in range(S + 1)] queue = deque() queue.append((1,0)) visited[1][0] = 0 while queue: scree..

Algorithm 2023.01.26

[python] 백준 14940번: 쉬운 최단거리(BFS)

# 14940 쉬운 최단거리 https://www.acmicpc.net/problem/14940 14940번: 쉬운 최단거리 지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이 www.acmicpc.net ⭐ 코드 import sys input = sys.stdin.readline from collections import deque N, M = map(int, input().split()) graph = [list(map(int, input().split())) for _ in range(N)] visited = [[-1] ..

Algorithm 2023.01.26
728x90