본문 바로가기

분류 전체보기

(83)
[백준] 16934번 게임 닉네임 (Java) 오랜만에 알고리즘이다... 알고리즘은 꾸준히 해야 하는데, 이 꾸준히라는 게 너무 어려운 것 같다. 코딩 테스트를 몇 번 보면서 느낀점이 있었다. "문자열" 문제 진짜 많이 나오는데, 아슬아슬하게 맨날 못 풀고 있는 것 같았다. 그래서 문자열 유형을 한번 혼내주기로 했다. 16934번 게임 닉네임 1. 문제 분석 문자열의 Prefix를 확인해야 하고, 이미 포함되어 있는지에 대한 여부도 확인하면서 문제에 접근해야 했다. 여기서 생각났던 알고리즘은 "트라이" 알고리즘이다. (사실 써보고 싶었습니다.) 왜 "트라이"인가? 새롭게 추가되는 문자열을 이미 추가되어 있는 문자열의 prefix에 해당하는지 확인을 해야 한다. 문자열 접두어 확인을 할 때는 "트라이" 알고리즘을 선택하면 빠르게 해결할 수 있다. 트라..
[Postgresql] Enum 타입에 요소 추가하기 Enum 타입 조회하기 select enum_range(null::membership_enum); membership_enum이라는 enum 타입을 만들어서 "FREE", "STANDARD", "DELUXE"를 저장해 놨었습니다. 여기서 만약 "VIP"라는 membership_enum 타입이 추가된다면 어떻게 요소를 추가할 수 있을까요? Enum 타입에 Value 추가하기 alter type membership_enum add value 'VIP'; 위와 같은 SQL문으로 membership_enum에 "VIP"라는 요소를 추가할 수 있습니다. 근데 만약 VIP가 사라지고, VVIP가 추가되었다면 어떻게 해야 할까요? Enum 타입 Value 이름 변경하기 alter type membership_enum..
[디프만] 새로운 도전 디프만 14기 서버 개발 합격 디프만을 선택한 이유 이번에 백엔드 부트캠프를 마무리하고, 지금까지 배웠던 기술 스택을 종합해서 프로젝트를 만들어 보고 싶다는 생각을 했습니다. 그리고 내가 만든 서비스를 런칭해보고 싶다는 생각을 많이 했었는데, 디프만에 들어오시는 분들 대부분이 같은 목표와 열정을 가지고 있다고 생각을 했습니다. 13기 때 디프만을 알게 되었었는데, 그때는 사실 "넣어도 떨어지겠지..?"라는 생각으로 도전 조차 못해봤었습니다. 백엔드 부트캠프에서 Java, Spring을 학습하고, 프로젝트도 참여해 보면서 사실 자신감도 많이 얻었던 것 같습니다. 부트캠프에서도 열정적인 분들과 만나서 치열하게 고민하고, 프로젝트를 했던 경험이 너무 의미 있었습니다. 그래서 지금까지 배운 지식들을 가지고, 새로운 개발자, 디자이너분들과 함..
[AWS] Application Load Balancer에 Cloud Front의 요청만 허가하기 최근 아키텍처를 설계해야 하는 일이 있어서 위와 같이 Cloud Front를 앞단에 두고, ELB에 요청을 전달해서 EC2로 가는 방향으로 설계를 했습니다. 예상했던 결과대로 서버 도메인을 입력하면 API 서버에 접근할 수 있었습니다. 하지만, 원하는 결과와는 조금 다르게 ELB의 DNS 서버로도 아무나 접근이 가능했습니다. 서버에 접근하는 경로는 단 하나만 있는 게 보안상으로도 좋을 거 같아서 ELB(Origin)에서는 내가 배포한 Cloud Front에서 오는 요청만 받고, 나머지 요청은 모두 403 Forbbiden으로 처리하도록 하고자 했습니다. 1. Cloud Front에 등록된 Origin(ELB)로 보내는 요청에 헤더 추가하기 위에서는 헤더 이름을 "X-Custom-Access-Token"이..
[NestJS] nest start --watch와 node dist/main의 차이 "scripts": { ... "start:dev": "cross-env NODE_ENV=dev nest start --watch", "start:prod": "cross-env NODE_ENV=prod node dist/main", ... }, 환경을 dev와 prod로 나누기 위해서 실행 명령어를 확인하던 도중 둘 다 실행을 하는 것이지만, start:dev는 nest start --watch라는 명령어로 실행을 하고, start:prod는 node dist/main으로 실행을 했습니다. 둘 다 실행해 보면 동일하게 프로젝트를 실행하는 것 같은데 뭐가 다를까라는 의문이 들었습니다. 1. nest start --watch Nest 공식 문서에 들어가 보면 nest start 명령어에 대한 설명이 존재합..
[NestJS] AWS S3, Multer로 이미지 업로드 구현하기 1. S3 버킷 생성 S3 서비스를 이용하려면 AWS 사이트에 들어가서 S3 버킷을 생성해야 합니다. AWS 사이트에 로그인한 후 위에 검색창에 S3라고 검색하면, S3를 시작할 수 있습니다. 노란색 버튼 "버킷 만들기"를 클릭해서 버킷 생성을 시작합니다. 버킷 이름을 먼저 작성해 줍니다. 버킷 이름에는 지켜야 하는 규칙이 있습니다. "버킷 이름 지정 규칙 보기"라는 파란색 링크를 클릭하면 확인해보실 수 있습니다. 규칙을 지켜서 내 버킷이름을 입력해 줍니다. 객체 소유권은 권장되는 방향인 "ACL 비활성화됨"을 선택했습니다. 저는 역할별로 IAM 사용자를 만들어서 사용할 예정입니다. 일단 저는 퍼블릭 액세스 차단 설정을 기본적으로 선택되어 있는 대로 하고 넘어갔습니다. 나중에 버킷에 가서 권한에 대한 설..
[NestJS] FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1. 문제 상황 자동화 배포 과정에서 Nest 애플리케이션을 빌드하는데, 빌드 실패가 나면서 이런 오류 메시지가 출력됐습니다. FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 말 그대로 할당된 Javascript 힙 메모리를 넘어섰다는 것입니다. 2. 문제 해결 방법 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 위 명령어를 터미널에 쳐보면 현재 설정되어 있는 힙 메모리를 확인할 수 있습니다. 확인해 보니 저는 495라고 떴습니다. 로컬에서는 동작이 됐으니 로컬에서 확인한 값과 동일..
[NestJS] winston 라이브러리를 이용하여 파일에 로그 남기기 Nest로 진행하고 있던 프로젝트가 있었습니다. InternalServerError(500)가 터지면 디버깅을 하거나, 오류에 대응할 때 효율을 높일 수 있도록 로그를 파일에 남기려고 적용하고자 했습니다. Java에서는 LogBack으로 로그를 관리하는 것 같은데, Nest에서는 Winston이라는 라이브러리를 사용한다. Winston Github에 가서 Winston이 제공하는 기능, 사용법을 확인해 볼 수 있습니다. GitHub - winstonjs/winston: A logger for just about everything. A logger for just about everything. Contribute to winstonjs/winston development by creating an ac..