일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 최장공통부분문자열
- error:0308010C:digital envelope routines::unsupported
- Python
- 문자열
- 깊이 우선 탐색
- npm start
- 다이나믹 프로그래밍
- Docker 원리
- Container vs VM
- 너비 우선 탐색
- 클래스
- 파이썬
- db replication
- bfs
- 냅색 알고리즘
- 그래프탐색
- 최장공통부분수열
- 배낭 문제
- 일단 시도
- 정처기 필기
- LCS 알고리즘
- 수학
- lazy evaluation
- 모듈러 연산 분배법칙
- 구현
- dfs
- 그래프 이론
- 나는 바보야...
- 그래프 탐색
- 동적 계획법
- Today
- Total
목록전체 글 (48)
Save my data
이번에 입사한 우리 회사에서는 Github 대신 Bitbucket이라는 걸 사용한다고하여 조사해보았다.Bitbucket이란?2008년 스타트업에서 개발하기 시작했고, 2010년에 Atlassian이라는 회사에 인수되었다.웹 기반 버전 관리 저장소 호스팅 서..
AWS EC2 instance는 ubuntu 22.04 버전으로 생성했다. 아래와 같이 VS Code SFTP 확장을 설치한다. 설치 후 fn + f1을 눌러 config를 연다. 자신의 환경에 맞게 설정을 한다. name 임의로 정해도 되는 서버의 이름이다. fn + f1을 누르면 나오는 SFTP: List All에서 표시될 이름을 정한다. host EC2 인스턴스의 호스트명을 입력한다. EC2 인스턴스의 연결 탭을 누르면 알 수 있는 도메인 네임이다. protocol sftp 방식으로 연결하겠다는 것을 정의한다. 수정하지 않는다. port 해당 번호의 포트를 사용하겠다는 의미이다. 기본적으로 수정하지 않는다. username 유저 네임을 입력한다. EC2 인스턴스를 생성할 때 설정된 유저 이름을 입력..
요새 하고있는 크롤링 프로젝트를 하다가 고민했던 부분이다. 데이터를 dict형태로 바로 반환하면 되는데, jsonify로 굳이 한줄 더 써서 직렬화 하는 절차에 대해,왜 그럴까 잠깐 고민했다. 지금 하고 있는 프로젝트에서는 특정 메서드가 작업을 수행한 후 결과값을 dictionary형태로 반환하고 있다. 그리고 flask view 함수에서는 dict형태의 반환값은 자동으로 직렬화 해주기 때문에, 사실 이것을 그대로 전달해버려도 response.json() 해서 쓸 수가 있다.디테일한 구성이 필요하다면 data에 status code나 message 등을 덧붙이면 되는 일이고, 어쨌든 dict 형태로 반환이 가능하다. 그리고 직렬화 하기 전에도 결국 dict 형태로 바꿔줘야 하는건 마찬가지였다. 그럼 그냥..
요청 부하 설계에 대해서, 서버의 부하 분산 외에도 DBMS 서버의 부하도 신경을 써야한다. 이 경우 DBMS 서버를 이중화하여 부하를 해결할 수 있다. DB Replication Replication은 복제를 뜻하며 DB Replication은 두 대 이상의 DBMS에 데이터를 나눠서 저장하는 방식이다. 사용하기 위해 최소 Master / Slave 구성을 취해야 한다. Master DBMS 서버로부터 데이터 등록, 수정, 삭제 요청시 바이너리 로그(Binarylog)를 생성하여 Slave DBMS로 전달한다. 주로 웹서버가 요청한 데이터의 등록, 수정, 삭제를 하는 용도로 사용된다. Slave DBMS Master DBMS로부터 전달받은 바이너리 로그를 데이터로 반영하게 된다. 주로 데이터를 불러오고..
사전적인 의미는 '(비용등의) 간접비'라는 의미를 가지고 있다. 컴퓨터 공학에서는 함수가 아닌 함수를 호출하는데 드는 비용을 의미한다. 다른 블로그나 위키 보면 거의 초 단위로 몇 초 늘어나고 줄어들었다 설명 정도밖에 없어서 조금 더 찾아보았다. 예를 들어, 재귀함수의 오버헤드가 큰 이유는 다음과 같다. 함수를 호출할 때마다 프로그램은 현재 함수의 상태를 저장하고 새로운 함수 호출을 만들어야 한다. 이 작업은 스택 메모리를 사용하여 이루어진다. 재귀 호출이 깊어질수록 다시 원점으로 복귀하기까지 시간이 오래 걸린다. 즉 오버헤드가 커진다. 네트워크에도 Overhead라는 용어가 있다. Overhead는 일반적으로 패킷이나 프레임 등의 선두에 위치하기 때문에 Header라고도 한다. 올바른 목적지에 도달하기..
가상화 기술의 변천사 VM(Virtual machine) 가상화 기술이 등장하기 이전, 하나의 컴퓨터에서는 오직 하나의 OS만 작동시킬 수 있었다. 이로 인해 자원의 많은 낭비가 생겼다. 이러한 잉여 자원의 효율적인 사용을 위해 하나의 컴퓨터에 여러 개의 OS를 설치해서 활용하는 가상화 기술이 등장했다. 가상화 기술은 기존 운영체제 위에 하드웨어를 에뮬레이션 하고, 그 위에 운영체제를 올리는 것이다. Hypervisor 기반의 가상화 기술이 가장 많이 사용되었다. VM간에는 분리되어있기 때문에 오류가 발생해도 다른 VM에 영향이 없다는 것이 가상화 기술의 장점이다. Hypervisor: 논리적으로 분할된 어떤 공간에서 독립적인 환경을 구성하고 호스트 OS 커널에서 게스트 OS를 관리하는 기술 Docker..
처음에는 아래와 같이 별 생각없이 풀긴 했다. N = int(input()) if N: for i in range(N - 1, 1, -1): N *= i N = str(N)[::-1] cnt = 0 for i in N: if not int(i): cnt += 1 else: break print(cnt) else: print(0) 다만 이것은 파이썬이라 풀리는 방법이고, 아마 다른 언어였으면 오버플로우가 발생해서 풀지 못했을 것이다. 다른 사람은 아래와 같이 풀었다. n = int(input()) def five_count(n): cnt = 0 while n != 0: n //= 5 cnt += n return cnt print(five_count(n)) 왜 5로 나눴을까? 에 대해서 생각하다보니 글이 조..
dfs 개념이 활용된 문제이다. 처음에는 아래와 같이 깊이를 의미하는 d를 추가를 안했다. 그런데 아래와 같이 하면 idx를 층으로 쓴다는 얘기인데 그렇게 되면 '층'을 의미하는 원소와, '값(크기)'을 의미하는 원소간 의미 구분이 안된다. import sys def ans(idx): if idx >= 7: print(*res) return 0 for i in range(idx, t[0] + 1): res.append(t[i]) ans(i + 1) res.pop() while 1: t = [*map(int, sys.stdin.readline().split())] res = [] if t[0]: ans(1) else: break 그래서 '값(크기)'이 커져버리면 현재 '층' 수가 높은 것으로 착각되면서 탐..