전체 글

인프라 (Infra)

EC2 T instance VS M instance 비용 비교

AWS EC2(Elastic Compute Cloud)에는 t2, t3, t4g처럼 t로 시작하는 T instance가 있습니다. 이런 T type instance는 공유 코어를 사용한다는 특징이 있는데요, 이로 인하여 항상 높은 CPU 사용률을 보이지 않는 경우 M instance에 비해 비용을 줄일 수 있습니다.하지만 어느정도 사용할 때 M instance보다 저렴한지 비교하기 어려운데요, 이를 정리해 보았습니다.시작하기 전에 알아둘 점1. T instance는 M instance 특정 종류와 동일한 프로세서를 사용합니다.T instanceM instance프로세서 종류T2M4#2.4GHz 인텔 제온: 하스웰 E5-2676 v3(2.4~3.0Ghz, 15Q4?) 브로드웰 E5-2686 v4(2.3~3..

인프라 (Infra)

AWS ELB 구조 간단 정리

AWS의 로드밸런서 서비스인 ELB는 L4 로드밸런서인 NLB와 L7 로드밸런서인 ALB 등을 지원합니다. ELB를 사용해 보며 경험한 ELB 아키텍처의 구조를 간단하게 정리해 보았습니다. 아래의 에시는 ALB를 기준으로 합니다. 아키텍처의 가장 앞단에는 ELB가 위치합니다. ELB에는 IP가 아닌 DNS 주소가 하나 할당되는데, 이를 Route 53등을 이용해서 연결해서 사용할 수도 있고, 해당 주소를 그냥 사용할 수도 있습니다. ELB에는 각 입력 방식마다 리스너를 설정해 줍니다. 예를 들면 HTTP 80번 포트에 Listner1, HTTP 81번 포트에 Listner2를 할당할 수 있는 방식입니다. 각 리스너에는 대상 그룹(Target Group)을 하나씩 연결해 줍니다. 타깃그룹의 종류는 인스턴스..

파이썬 (Python)

파이썬 이진탐색 모듈

여태껏 파이썬에서 기본적으로 제공되는 이진탐색 함수가 없는 줄 알았는데, bisect라는 배열 이진 분할 알고리즘 모듈을 찾았습니다. from bisect import bisect_left 위와 같은 방법으로 import 할 수 있습니다. bisect_left(), bisect_right() 코드 def bisect_left(a, x, lo=0, hi=None, *, key=None): """Return the index where to insert item x in list a, assuming a is sorted. The return value i is such that all e in a[:i] have e = x. So if x alrea..

Troubleshooting

MacOS Github organization repository 접근 오류 remote: Repository not found. 해결기

Github Organization Private Repository 접근 시 remote: Repository not found. fatal: repository 'https://github.com/~~~/~~~.git/' not found 오류가 발생했다. 원래 사용하던 SourceTree에 crediential 인증창이 뜨기도 하는 등 전조증상이 있긴 했었다. 그러나 정확히 어떤 것이 문제가 되었는지 모르겠다. xz 백도어로 인해 다운그레이드하기 위해 brew upgrade를 한 것 밖에 짐작 가는 것이 없는데... 아무튼 문제의 까다로운 점은 일반 private repository는 문제없이 접근이 가능한데, organization에 있는 private repository만 접근 시 404가 발생..

서버(Server)/장고 (Django)

Django 테스트 개선기(의존성 벗어나기)

잠깐 방치해 두었던 장고로 제작된 서비스의 테스트를 개선해야 할 필요성을 느꼈습니다. 개선이 필요한 사항은 1. ci. 커밋 시 자동으로 테스트를 진행이 필요 2. 테스트 시 api를 이용한 특정 작업이 자동으로 실행되는데, 이를 막기 3. 이미지 업로드 시 사용하는 S3을 실제 production bucket에 올라가게 해 두었는데, 이를 막기 커밋 시 자동 테스팅 우선 기존에 release 브랜치에 push시, Github Action을 이용하여 자동으로 실제 배포 서버의 워커를 실행시켜 자동으로 배포되도록 설정해 두었습니다. 이를 활용하여 Github Action을 다시 활용해 자동 테스트를 진행하도록 만들었습니다. name: Test app concurrency: group: production ..

알고리즘 (Algorithm), PS/Baekjoon Online Judge

[BOJ 2252] 줄 세우기(풀이, Python)

문제를 보았을때 대략 단계가 있는 그래프 형태를 생각했습니다. 각 학생들이 저런식으로 있고, 1번 레이어는 의존성이 없는 학생들, 2번 레이어는 최대 1번 레이어에 의존성을 가지는 학생들, n+1번 레이어는 커야 n번 레이어에 의존성을 가지는 학생들입니다. 저런식으로 분류가 가능하다면, 각 레이어들을 순서대로 출력하는 방식으로 문제를 해결할 수 있습니다. 다만 가장 간단한 방식으로 순서대로 구현해보기로 했습니다. 우선 학생수가 32000명이니, 32000^2 = 10억 정도로 가능성이 있다고 봤습니다. 브루트 포스 방식 student_left = student_count for i in range(student_count): if student_left == 0: break for student in s..

알고리즘 (Algorithm), PS/Baekjoon Online Judge

[BOJ 30049] 영업의 신(풀이, C++)

BOJ 30049 영업의 신 문제에 대한 글입니다. 문제 입력은 조금 복잡해 보일 수 있으나 1 ~ N+2번 줄에서 base 입력을 받고, N+3번 줄부터 매출 변경에 관한 입력을 받으며 입력을 받을 때마다 계산하여 답을 출력해 주는 문제입니다. 크게 어려운 부분은 없는 구조이나, 관건은 시간복잡도를 잘 맞추는 것입니다. 조건으로 인하여 구현에 번거로운 부분 없이 편하게 문제를 풀 수 있습니다. 초기 입력 부분은 인원 300명에 가게 10000명으로 많아야 300만 정도의 입력을 받지만, N+3번부터 들어가는 계산은 N = 1,000,000 이기에 마지막 부분의 시간복잡도를 잘 고려해서 문제를 풀어야 합니다. 저의 초기 코드는 아래와 같은 방식으로 작성했습니다. int time; cin >> time; ..

하나도 안 중요함

Gateway 글 메모

https://toss.tech/article/slash23-server 토스는 Gateway 이렇게 씁니다 더 안전하고 안정적인 서비스 운영을 위해서 ‘gateway’를 어떻게 사용해야 할까요? 토스의 수많은 마이크로서비스 로직을 공통화하기 위한 gateway 운영 방법에 대해 소개합니다. toss.tech https://velog.io/@yeomyaloo/Spring-security-MSA-환경에서는-어떻게-인증을-진행할까-부제-인증-인가-서버의-분리 [Spring security] - MSA 환경에서는 어떻게 인증을 진행할까? (부제: 인증, 인가 서버의 분리) 여러 서버로 구성한 msa서버에서는 어떻게 인증, 인가를 분리해서 작업하고 또한 분리한 인증,인가 서버와 어떻게 클라이언트 서버는 통신을 ..

프론트엔드 (Frontend)

Next.js App Router 변경사항 메모

Next.js App Router가 업데이트되며 이전에 보았던 강의도 추가적인 업데이트가 올라와서 해당 강의를 수강하며 App Router가 되면서 변경된 사항을 정리해보려한다. # route 방식 변경 기존 pages/에서 app/ 폴더로 바뀌고, page.js, layout.js 등의 파일 이름으로 고정. 경로는 이제 무조건 폴더를 만들어 설정해야한다. SvelteKit과 비슷해진 느낌. # 동적 경로 props.params에 접근해 slug 이름에 따라 params.slug 처럼 접근하면 된다. # 클라이언트 실행 App Router로 변경되며 기본적으로 서버 컴포넌트가 되었다. 컴포넌트를 클라이언트 실행하기 위해서는 파일의 위에 "use client"; 를 적어주면 된다. 이런 서버 컴포넌트의 장..

서버(Server)/장고 (Django)

Django에 redis 캐싱 적용하기

환경 설정 개발환경(MacOS) 맥을 기준으로 사전 환경 설정을 설명합니다. 1. brew를 이용하여 redis를 설치해 줍니다. brew install redis 2. redis를 작동시킵니다. redis-server redis-cli 간단 사용법 redis 서버에 접근 가능한 redis-cli에 대한 간단한 사용법입니다. 1. redis-cli 실행 redis-cli 2. db 선택 select 1 redis는 여러 개의 데이터베이스를 둘 수 있고, 저희는 1번으로 settings에 설정해 두었으므로 1번에 접근합니다. 3. keys 보기 keys * 현재 생성된 key를 확인합니다. 배포 환경(docker-compose) docker-compose를 사용할 때 배포 환경 설정입니다. version:..