분류 전체보기

    [Django] 테스트 코드 작성해보기

    [Django] 테스트 코드 작성해보기

    Django 튜토리얼의 챕터 5가 테스트 작성에 대한 내용이다. '테스트 코드'에 대해 들어는 봤지만 실제로 작성해보기는 처음이기 때문에 왜 필요한지, 어떻게 작성하는지 기록해두고자 한다. https://docs.djangoproject.com/ko/4.2/intro/tutorial05/ Django The web framework for perfectionists with deadlines. docs.djangoproject.com 테스트 코드란? 말 그대로 내가 개발한 것에 대한 테스트를 수행하는 코드이다. 내가 개발한 코드가 원하는 대로 동작을 하더라도, 비정상 상황에 대해 정상인것 처럼 작동한다면 문제가 있는 코드이다. 특히 코드를 수정할 때 기존 코드와 꼬여 예상치 못한 동작을 하게 될 수 있는..

    [Python] 백준 4179번 - 불!

    [Python] 백준 4179번 - 불!

    문제: https://www.acmicpc.net/problem/4179 4179번: 불! 입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문자 www.acmicpc.net 처음에는 1초마다 불을 번지게 하고, 지훈이가 나갈 루트를 BFS로 찾아 이동시켜주면 되겠다고 생각했다. 내가 생각한 로직은 다음과 같다. - 불의 개수는 1개 이상일 수 있다. - 지훈이가 있는 곳은 다시 '.'으로 바꿔주기 - 1초가 지났을 때, 불을 먼저 퍼트리고 지훈이를 BFS하여 출구로 갈 수 있는지 확인 - BFS가 아니고 DFS로 풀어야할 것 같다. 탈출 루트를..

    [Python] 백준 1700번 - 멀티탭 스케줄링

    [Python] 백준 1700번 - 멀티탭 스케줄링

    문제: https://www.acmicpc.net/problem/1700 1700번: 멀티탭 스케줄링 기숙사에서 살고 있는 준규는 한 개의 멀티탭을 이용하고 있다. 준규는 키보드, 헤어드라이기, 핸드폰 충전기, 디지털 카메라 충전기 등 여러 개의 전기용품을 사용하면서 어쩔 수 없이 각종 전 www.acmicpc.net Greedy 알고리즘을 이용해서 풀면 되는 문제다. Edge case짜는게 약하다는걸 많이 느낀 문제였다. 내가 처음 짠 로직은 다음과 같다. 1. 일단 멀티탭 구멍 개수만큼 전자기기를 꽂는다 2. 다음 전자기기가 이미 꽂혀있는 경우, 그냥 넘어간다. 3. 다음 전자기기가 꽂혀있지 않은 경우, 무슨 전자기기를 뺄지 선택한다. 3-1. 꽂힌 전자기기 중 남은 전자기기에 없는 전자기기가 있으면..

    [Python] 백준 1012번 - 유기농 배추

    [Python] 백준 1012번 - 유기농 배추

    문제: https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 자주 접하던 BFS 유형이라 다음과 같이 풀었다. from collections import deque dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y): global board global visited q = deque() q.append([x, y]) while q: x, y = q.popleft() visited[x][y] = 1 for i in ran..

    [알고리즘] CodeForce 해시 알고리즘 구현 (Python)

    [알고리즘] CodeForce 해시 알고리즘 구현 (Python)

    저번에 Python에서 set 과 list의 시간복잡도를 비교하는 글을 쓴 적이 있다. list를 사용하는 경우 in 연산을 할 때 O(n)시간이 걸리는 반면, set은해시테이블을 기반으로 구현되기 때문에 O(1)의 시간만에 값을 찾을 수 있다는 내용이었다. https://jjung0326.tistory.com/66 [Python] Set과 List의 시간 복잡도 차이 코딩테스트 공부를 하는데, List를 사용하면 시간 초과가 나왔던 문제가 Set을 사용하자 통과가 됐었다. 관련 포스팅: https://jjung0326.tistory.com/65 [Python] 백준 1987번 - 알파벳 문제: https://www.acmicpc.net/p jjung0326.tistory.com 이때 사용되는 해시 알고..

    [시스템 설계] 데이터센터 이중화

    [시스템 설계] 데이터센터 이중화

    하나의 데이터센터에 있는 서버들을 사용해 시스템을 구축한다고 가정하자. 이때 해당 데이터센터에 문제가 발생하면 시스템이 제대로 동작하지 못하게 된다. 이러한 경우를 대비해 두개의 데이터 센터(혹은 그 이상)을 사용해서 시스템을 구축해보자. 먼저 두개의 데이터 센터를 사용하는 경우, 평소에(장애가 없을 때)는 사용자 입장에서 지리적으로 가까운 데이터센터로 트래픽이 전달된다. 이것을 지리적 라우팅 (geo-routing)이라고 한다. DNS가 요청을 받을 때 사용자 위치에 따라 가까운 IP주소를 변환해준다. 위의 그림에 대한 플로우를 설명하면 다음과 같다. 1. 사용자가 DNS에 도메인네임을 질의한다. 2. DNS는 사용자 위치에 기반하여 가까운 데이터센터의 서버 IP를 반환한다. (geo-routing) ..

    [Flask] MVC pattern

    [Flask] MVC pattern

    MVC 패턴이란? Model-View-Controller 패턴으로 소프트웨어 코드를 작성하는 것이다. MVC 패턴을 사용하여 코드를 작성하면 유지보수가 쉬워진다는 주장이있는데, 꼭 그렇지만은 않다고 한다. 왜냐하면 하나의 기능에 대해 M V C 각각이 파일로 쪼개져있어서 코드 이해와 디버깅이 어려울 수 있다. Model - DB와 소통하며 데이터를 가지고 오거나 데이터를 가지고 있다. - 컨트롤러에게 데이터를 전달한다. - Database 영역 View - 유저가 보는 화면을 나타낸다 - 컨트롤러에게 데이터를 전달받아 유저에게 보여주거나, 유저 액션을 전달한다. Controller - Model과 View 사이를 중간에서 제어하는 역할을 한다. - 뷰로부터 사용자 액션과 인풋 값아 모델에게 전달하고, 모..

    [SQLite] SQLite 특징

    Flask로 간단한 앱을 만드는 프로젝트를 하는데 데이터베이스로 SQLite를 사용했다. SQLite는 파이썬에 내장되어있는 db라서 따로 서버에 설치할 필요가 없어서 간단하게 사용하기 좋다. 다만 입력이 동시에 들어오는 경우, 이를 하나씩 처리하기 때문에 시스템이 느려질 수 있다. 작은 프로젝트를 할 때는 사용하기 편하지만, 큰 애플리케이션을 만들때는 다른 DB사용을 고려해보는 것이 좋을 것 같다.