S3 Presigned URL
0. S3 Presigned URL을 사용하는 이유 서버 부하 감소 서버에 파일을 통째로 저장하는 경우: 서버는 그 파일을 저장하고 처리해야 하므로, 트래픽과 저장 공간에 부담을 준다. presigned URL을 사용하는 경우: 클라이언트가 S3에 직접 파일을...
0. S3 Presigned URL을 사용하는 이유 서버 부하 감소 서버에 파일을 통째로 저장하는 경우: 서버는 그 파일을 저장하고 처리해야 하므로, 트래픽과 저장 공간에 부담을 준다. presigned URL을 사용하는 경우: 클라이언트가 S3에 직접 파일을...
1. Dirty Read (오손 읽기) A에서 insert한 데이터를 B에서 조회한 뒤, A가 Rollback되면, B에서는 조회했던 정보가 사라진 셈이 되며, 트랜잭션의 일관성이 훼손된다. 이 문제는 Read Uncommited 격리 수준에서만 발생하며, 격리 수준을 Read Commited로 올리면 오손 읽기 문제는 발생하지 않는다. 하지...
0. 트랜잭션의 격리 수준이 필요한 이유 트랜잭션의 격리 수준이 4가지나 존재하는 이유는 같은 데이터에 동시에 접근했을 때, 데이터의 일관성과 정합성, 무결성을 보장하기 위해서다. 현재 진행하고 있는 프로젝트의 특성을 고려하지 않고, 무턱대로 격리 수준을 높이면, 불필요하게 데이터베이스의 성능이 낮아지고, 격리 수준을 너무 낮추면, 많은 동시성 문제...
1. 문제 상황 인텔리제이에서 MySQL 데이터베이스에 연결하지 못했다는 오류가 발생해서, mysql 내부에서 port 번호를 검색해보았는데, 3306으로 나오지 않고, 0으로 나왔다. parkjinhong@bagjinhong-ui-MacBookPro ~ % mysql -u root -p mysql> SHOW VARIABLES LIKE 'po...
1. 테스트 코드가 필요한 이유 빠른 피드백 기존의 개발 방식 다음과 같다. 코드 작성 프로그램 실행 API 테스트 도구(Postman 등)로 HTTP 요청(POST, GET, PUT 등등) 요청 결과를 눈으로 검증 결과가 의도대로 나오지 않으면, 다시 프로그램을 중지하고 코드 ...
중간발표 미션 이번 미션은 다음과 같다. 지난번 미션이 아이디어 선정이었으니, 이번에는 본격적으로 IA 및 와이어프레임을 설계했다. 그리고 프론트엔드 & 백엔드 개발 진행 일정을 계획했고, Repository와 ISSUE & PR template 설정도 완료했다. 1. IA 및 와이어프레임 + UI를 통한 기능 공유 와...
Spring REST Docs 1. gradle 파일에 Asciidoctor 관련 설정 넣어주기 플러그인 넣어주기 plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '...
Presentation Layer(Controller) 테스트 1. WebMvcTest와 MockBean // 테스트 하고자하는 컨트롤러 명시 @WebMvcTest(controllers = ProductController.class) class ProductControllerTest { @Autowired private Mock...
자주 쓰이는 assertThat 메서드 1. 단순 값 비교 @Test public void testSimpleValueComparison() { int a = 3 + 5; assertThat(a).isEqualTo(8); } 2. 문자열 비교 @Test public void testStringComparison() { ...
TDD(Test-Driven Development) 테스트 주도 개발 프로덕션 코드보다 테스트 코드를 먼저 작성하여 테스트가 구현 과정을 주도하도록 하는 방법론 간단하게 TDD의 순서를 표현하자면, 실패한 테스트 코드를 짠다. 어떻게든 성공시킨다. 코드를 개선시킨다. 이 사이클을 반복하는 것이 바로 테스트 주도 개발, TDD이다...
SW마에스트로 15기 2차 코딩테스트 복기 문제는 총 5문제였고, 알고리즘 4문제, SQL 1문제가 나왔다. 난이도는 체감상 1차보다 훨씬 어려웠다. 난이도가 높아서 내 실력으로는 가늠할 수가 없었다. 최소 평균 골드3 정도? 제한시간은 1차 때와 똑같이 문제당 10초였고, 메모리는 2GB였다. 시험시간은 똑같이 총 120분이었다. SQL을 먼저 푸...
나의 첫 코딩테스트 문제는 총 5문제였고, 알고리즘 4문제, SQL 1문제가 나왔다. 난이도는 생각보다 쉽게 나왔다. 체감상 브론즈2~골드5 정도였던 것 같다 제한시간은 문제당 10초였고, 메모리는 2GB였다. 백준에서는 많아봐야 512MB였는데 2GB나 줘서 편안하게 풀었던 것 같다. 시험시간은 총 120분이었다. SQL을 먼저 풀었고, 알고리즘...
크루스칼 알고리즘 간선들의 비용을 기준을 정렬한 뒤, 사이클을 이루지 않게끔 최소 신장 트리를 형성하는 알고리즘 비용을 기준으로 간선들을 오름차순으로 정렬한다. 간선들을 하나씩 확인하며 사이클을 발생시키는지 확인한다. 사이클을 발생시킬 경우 포함 x 사이클을 발생시키지 않으면 최소 신장 트리에 포함시킨다. ...
서로소 집합 공통 원소가 없는 두 집합 서로소 집합들로 나누어진 원소들의 테이터를 처리하기 위한 자료구조는 union 연산과 find 연산으로 조작할 수 있다. union 연산 : 서로 다른 두 원소에 대하여 합집합을 수행하는 것이다. 각각의 루트 노드를 찾아서 그 두 노드 중 더 작은 루트 노드를 가리키도록 하는 방식이다. find 연산 : 특...
유클리드 호제법 기초 지식이지만, 두 번이나 까먹어서 정리해둬야할 것 같다. 나머지로 나누고, 또 그 나머지로 나누고 … 반복 최대공약수 def gcd(a,b): while b > 0: remainder = a%b a = b b = remainder return a 최소공배수 def...
최단 경로 말 그대로 가장 짧은 경로를 찾는 알고리즘 학교 알고리즘 수업시간에 다익스트라 알고리즘과 플로이드 워셜 알고리즘 이 두 가지를 배웠었는데, 이코테에서도 이 두 가지를 설명하고있다. 한 지점에서 다른 특정 지점까지의 최단 경로를 구해야하는 경우 - 다익스트라 알고리즘 모든 지점에서 다른 모든 지점까지의 최단 경로를 구해야하는 경우 -...
이진 탐색 정렬된 리스트에서 찾으려는 데이터와 중간점 위치의 데이터를 반복적으로 비교하는 알고리즘 따라서 이분 탐색을 하기 전에 필수적으로 리스트를 정렬시켜줘야한다. 기본적인 코드는 다음과 같다. 재귀 함수로 구현 def binary_search(arr, target, start, end): if start > end: # 데이터를 못...
나의 레퍼지토리에 협업 프로젝트 가져오기 협업 프로젝트 클론하기 Github Desktop을 이용하여 로컬 저장소에 클론한다. 원격 저장소 생성하기 나의 Github 계정의 레퍼지토리에 새로운 저장소를 생성한다. 저장소 이름은 EC_page로 했다. 로컬 저장소에 원격 저장소를 add & push 하기 해당 로컬 저장소로 cd한 뒤,...
에라토스테네스의 체 1부터 n까지의 수들을 소수판별하는 코드이다. n = int(input()) check = [False, False] + [True]*(n-1) prime = [] for i in range(2,n+1): if check[i]: prime.append(i) for j in range(i+...
정렬 데이터를 특정한 기준에 따라서 순서대로 나열하는 알고리즘 이코테에서는 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬 이렇게 4가지의 정렬 알고리즘을 다루고 있다. 사실 처음에는 파이썬 sort() 함수를 쓰면 끝 아닌가? 라는 생각을 했었는데, 백준에서 정렬 알고리즘 문제에서 계속 막히는 부분이 생겨서 학교 알고리즘 수업에서 배운 몇 가지 정렬 ...
DFS와 BFS 그래프를 탐색하기 위한 대표적인 두 가지 알고리즘 DFS(깊이 우선 탐색) 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 기본적인 코드는 다음과 같다. graph = [ [], [2, 3, 8], [1, 7], [1, 4, 5], [3, 5], [3, 4], [7], [2, 6, 8], [1, 7...
동적 프로그래밍 학교 알고리즘 수업시간에 배운 동적 계획 알고리즘을 적용해보기 위해서 백준 사이트에 동적 프로그래밍 문제 위주로 풀어보았다. 리스트에서 다음 요소를 어떻게 셋팅할 것인지의 점화식을 세우고 고민하는 과정이 정말 재미있었다. 백준 - 1로 만들기 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨...
수들의 합 아주 간단한 문제인데, 얼마전 피보나치 수열을 비효율적으로 짰던 비슷한 경험이 떠올라서 간단히 정리하기로 했다. 문제 서로 다른 N개의 자연수의 합이 S라고 한다. S를 알 때, 자연수 N의 최댓값은 얼마일까? 입력 첫째 줄에 자연수 S(1 ≤ S ≤ 4,294,967,295)가 주어진다. 출력 첫째 줄에 자연수 N의 최댓값을 출력한...
경력 직원 고용하기 구현하는데는 성공했지만, for문을 3개나 들여써서 time limited가 떴다. for문을 3개나 들여써서 어떻게 하면 줄일 수 있을지 많이 고민한 문제이다. 문제 어느 IT 회사에서 경력 직원을 고용하려고 한다. 이 회사에는 모바일 앱 개발, 3D 그래픽스, C/C++, 데이터 베이스, 서버 보안 등 M개의 기술을 필요로 ...
트로미노 타일 이해하는데 너무 오랜 시간이 걸렸다. 두고두고 봐야할 코드인 것 같다. 코드를 뜯어보면서 공부해보자. # 정사각형 영역이 비어있는지 확인하는 함수 def check(x, y, size): for nx in range(x, x + size): for ny in range(y, y + size): ...
분할 정복 알고리즘을 이용하여 최근접점 찾기 구현하기 정말 어려웠던 알고리즘 중 하나였다. 아래의 코드를 뜯어보면서 다시 한 번 공부해보자. import math # 두 점 사이의 거리를 계산하는 함수 def calculate_distance(point1, point2): return ((point1[0] - point2[0]) ** 2 +...
구현 풀이를 떠올리는 것은 쉽지만 소스코드로 옮기기 어려운 문제 이코테에서는 이 유형에서 완전 탐색과 시뮬레이션을 다루고 있는데, 완전 탐색은 모든 경우의 수를 주저 없이 다 계산하는 해결 방법을 의미하고, 시뮬레이션은 알고리즘을 한 단계씩 차례대로 직접 수행해야하는 문제이다. 구현에서는 채점 환경을 고려하는 것이 중요하다. 특히 파이썬은 C/C+...
그리디 알고리즘 당장 좋은 것만 선택하는 알고리즘 그리디 알고리즘은 전체적으로 최적의 해를 보장하지는 못하지만, 그 순간에 대해서는 최적인 알고리즘이다. 따라서 각 단계의 선택이 최종적인 결과에 미치는 영향을 고려하지 않고 진행된다. 실전문제 이코테-그리디 알고리즘에는 3문제가 수록되어있는데 모두 어렵지 않게 해결할 수 있었다. 문제의 목적만 잘...
creat() #include <fcntl.h> int creat(const char *pathname, mode_t mode); // 파일 경로 및 이름, 파일의 권한 예시 #include <stdio.h> #include <fcntl.h> int main(void) { int fd; ...
📋 퀵정렬 알고리즘 def quick_sort(input): if len(input) <= 1: return input # 리스트의 길이가 1 이하면 바로 리턴 pivot = input[0] # 피벗을 리스트의 첫 번째 요소로 선택 left = [] # 피벗보다 작은 값을 담을 리스트 right...
📋File i/o 파일을 열고, 생성하고, 읽고, 쓰고, 닫는 과정 nano openfile.c #include <stdio.h> // 표준 입력 및 출력 함수를 제공 #include <stdlib.h> // 일반적인 유틸리티 함수들을 제공 #include <fcntl.h> // 파일 제어 관련 상수들과 파일 제어...
📋GIT branch 미리해야할 일 git log --all --graph --oneline 모든 branch들을 시각적으로, 한줄로 표현 git branch branch 목록 보여주기 branch 정리 git branch 브랜치이름 현재 버전으로 브랜치 만들기 git check out 브랜치이름 HEAD가 해당 브랜치로 전환하기 ❕bas...
📋GIT 명령어를 복습해보자. 미리해야할 일 git config --global core.editor "nano" 에디터 바꾸기 git init . 현재 디렉토리 버전관리 시작 cd .git repository로 들어가기 git 문법 정리 git status git의 상태를 보여주기 git add 파일이름 파일을 Working...
📋TCP/IP Protocol Suite 인터넷 프로토콜 스위트(Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다. 인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다. 📌TCP/IP Protocol Suite의 ...
def normalize_data(n_cases, n_people, scale): # Calculate the number of cases per its population norm_cases = [] for idx, n in enumerate(n_cases): norm_cases.append(n_cases[idx]...
#Nice to meet you, #everyone :) 크기0 크기1 크기2 크기3 크기4 크기5 크기6 1층 2층 3층 그냥 텍스트 강조된 텍스트 기울어진 텍스트 강조된&기울어진 텍스트* 취소된 텍스트 밑줄친 텍스트 노란 글씨입니다.