개발 환경인 IntelliJ에서 실행시에는 문제 없이 실행 되는 스프링 앱이 빌드만 하면 어떻게 해서도 이상한 문자만이 무한으로 출력되는 오류가 발생했습니다. 위와 같은 방식으로 인코딩이 깨진채로 무한으로 출력되었습니다. 1. 우선 생각해본것은 단순히 인코딩이 깨진것을 의심해 보았습니다. 중간중간에 읽을 수 있는 코드들도 가끔 출력되기도 했고요.그러나 인코딩이 단순히 꺠진것으로 보기에는 로그가 무한으로 출력되고 있기 때문에 다른 것이 문제라 생각되었습니다. 2. gradle의 문제. 빌드시 사용하는 gradlew 파일이 잘못되었다면 이렇게 오류가 날 수 있다 생각해서 살펴보았지만, 기본 설정에서 달라진 것이 없었습니다. 3. 결국 코드와 설정들을 하나씩 삭제해보며 체크해본 결과 문제는 applicati..
GPT4를 사용하고 싶은데, 월 20달러를 내고 사용할정도로 자주 사용하지는 않아 API를 통해 사용하기 위해 찾아보던 중, LibreChat이라는 프로젝트를 찾았습니다. https://github.com/danny-avila/LibreChat GitHub - danny-avila/LibreChat: Enhanced ChatGPT Clone: Features OpenAI, Assistants API, Azure, Groq, GPT-4 Vision, Mistral, BinEnhanced ChatGPT Clone: Features OpenAI, Assistants API, Azure, Groq, GPT-4 Vision, Mistral, Bing, Anthropic, OpenRouter, Vertex AI, ..
brew를 이용해 설치한 postgreSQL을 시작하려면, brew services start postgresql 로 서비스를 시작할 수 있다. 이때 보통 접속을 위해 psql --username=postgres --dbname=postgres 을 시도하는데, 해당 방법으로 접속이 불가능했다. 그래서 psql postgres 로 접속 후 SELECT rolname FROM pg_roles; 로 확인해보니, postgres role이존재하지 않고, 내 컴퓨터 기본 이름으로 생성되어 있었다. 그리하여 CREATE ROLE postgres LOGIN SUPERUSER INHERIT CREATEROLE CREATEDB REPLICATION; 로 새로 생성해주고 pgAdmin4를 이용해 접속
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..
AWS의 로드밸런서 서비스인 ELB는 L4 로드밸런서인 NLB와 L7 로드밸런서인 ALB 등을 지원합니다. ELB를 사용해 보며 경험한 ELB 아키텍처의 구조를 간단하게 정리해 보았습니다. 아래의 에시는 ALB를 기준으로 합니다. 아키텍처의 가장 앞단에는 ELB가 위치합니다. ELB에는 IP가 아닌 DNS 주소가 하나 할당되는데, 이를 Route 53등을 이용해서 연결해서 사용할 수도 있고, 해당 주소를 그냥 사용할 수도 있습니다. ELB에는 각 입력 방식마다 리스너를 설정해 줍니다. 예를 들면 HTTP 80번 포트에 Listner1, HTTP 81번 포트에 Listner2를 할당할 수 있는 방식입니다. 각 리스너에는 대상 그룹(Target Group)을 하나씩 연결해 줍니다. 타깃그룹의 종류는 인스턴스..
여태껏 파이썬에서 기본적으로 제공되는 이진탐색 함수가 없는 줄 알았는데, 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..
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가 발생..
잠깐 방치해 두었던 장고로 제작된 서비스의 테스트를 개선해야 할 필요성을 느꼈습니다. 개선이 필요한 사항은 1. ci. 커밋 시 자동으로 테스트를 진행이 필요 2. 테스트 시 api를 이용한 특정 작업이 자동으로 실행되는데, 이를 막기 3. 이미지 업로드 시 사용하는 S3을 실제 production bucket에 올라가게 해 두었는데, 이를 막기 커밋 시 자동 테스팅 우선 기존에 release 브랜치에 push시, Github Action을 이용하여 자동으로 실제 배포 서버의 워커를 실행시켜 자동으로 배포되도록 설정해 두었습니다. 이를 활용하여 Github Action을 다시 활용해 자동 테스트를 진행하도록 만들었습니다. name: Test app concurrency: group: production ..
문제를 보았을때 대략 단계가 있는 그래프 형태를 생각했습니다. 각 학생들이 저런식으로 있고, 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..