본문 바로가기

전체 글36

에러코드 설계 벤치마킹 & NestJS에서 에러 응답 커스텀 방법 문제상황 Nest.js에서 기본 에러 응답 형식은 위와 같습니다. 이렇게 응답을 주면 협업에 어려움이 있을 것 같습니다.일단 에러가 어느 API에서 발생했는지, 언제 발생했는지 알기 어렵습니다.하나의 상태 코드에 대해서도 세부적으로 분류하기 위한 에러 코드도 필요해보입니다. 벤치마킹다른 기업들에서는 어떤 에러 코드 체계를 가지고 운영 중인지 살펴보겠습니다. 1. NAVER WORKS Developers링크 : https://developers.worksmobile.com/kr/docs/error-codesHTTP 상태 코드와 별도의 에러 코드 체계를 가지고, 해당 코드를 응답 본문에 포함시켜주고 있습니다.동일한 상태 코드에 대해서 여러 종류의 에러 코드를 지정해놓았다는 점에서 어떤 에러인지 파악하기 쉬워.. 2024. 8. 1.
[Jest] Jest 함수 실행 순서 Jest Globals테스트 프레임워크 중 하나인 Jest에는 다음과 같은 전역 객체와 함수들을 제공하고 있습니다.  beforeAll파일 안의 각 테스트가 실행되기 전 실행됩니다.콜백 함수가 promise를 반환하는 경우, promise가 이행(fulfilled)될 때까지 기다립니다.여러 테스트에서 사용되는 전역 상태를 설정(set up)하려는 경우 사용할 수 있습니다.beforeEach파일 안의 각 테스트가 실행되기 전 실행됩니다.콜백 함수가 promise를 반환하는 경우, promise가 이행(fulfilled)될 때까지 기다립니다.각 테스트에서 사용되는 전역 상태를 재설정(reset)하려는 경우 사용할 수 있습니다.afterAll파일 안의 모든 테스트가 완료된 후 실행됩니다.콜백 함수가 promi.. 2024. 7. 29.
[자료구조] 해시 테이블 해시 테이블이란?키(key)와 값(value)의 쌍으로 데이터를 저장하는 자료구조입니다.해시 테이블에서 삽입, 삭제, 탐색 시 평균적인 시간복잡도는 O(1) 입니다. 어떤 값을 찾더라도 한 단계만 소요된다는 의미입니다.사용 사례검색이나 저장이 빈번할 때 사용하면 좋은데, 특히 캐시를 구현할 때 해시 테이블을 사용할 수 있습니다.캐시는 이전에 계산된 결과를 임시로 저장하는 장소입니다. 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용됩니다. 작동 원리해시 테이블 내부에서는 index와 value로 이루어진 배열 구조를 사용하고 있습니다.키(key)를 해시 함수를 사용하여 배열의 인덱스로 변환한 후, 해당 인덱스에 값(value).. 2024. 7. 11.
[블록체인] 블록체인 개념 정리 유튜브 '노마드 코더'의 블록체인 시리즈 및 인터넷 검색을 통해 블록체인 기술과 산업에 대해 정리한 내용입니다.   1. 블록체인이란?말 그대로 블록들이 모여있는 체인으로, '공공 거래 장부'로 불리는 데이터 분산 처리 기술을 말합니다.블록체인은 수정, 삭제가 되지 않고 추가만 가능한 데이터베이스와 같습니다. 또한 블록체인은 탈중앙화된 데이터베이스입니다.은행이나 정부 등 특정한 중앙 관리자가 데이터를 관리할 수 없습니다. 네트워크에 참여하는 모든 사용자가 데이터의 복제본을 가지고 있습니다. 이러한 점 때문에 데이터의 위변조가 어렵고, 정부가 크립토커런시를 감시하거나 통제하기 힘듭니다.따라서 거래내역을 위변조하거나 통제하려면, 네트워크의 모든 사용자가 동시에 컴퓨터를 끄거나 모든 복제본을 공격해야 합니다... 2024. 7. 6.
[JS] JavaScript의 일급객체란? 자바스크립트의 일급 객체가 무엇인지 알아보기 전에 함수의 선언식과 표현식에 대해 짚고 넘어가보겠습니다.함수 선언식 & 함수 표현식자바스크립트 함수에는 선언식(Function Declarations)과 표현식(Function Expressions)이 있습니다.함수 선언식function f1() { // ...}함수 표현식표현식에는 아래와 같이 두가지 방식이 있습니다.const a = function f1() { //...};const b = () => { // 화살표 함수(Arrow Functions)};  표현식에서는 변수에 함수의 반환값이 아니라 함수 자체를 담는 모양새입니다.선언식과 달리 변수에 함수를 어떻게 대입할 수 있는 것일까요?이것을 이해하기 위해 자바스크립트에서 객체의 의미를 이해해야 .. 2024. 7. 5.
[Go] command not found: xxx 해결 방법 문제 boltbrowser는 bolt db를 cli로 확인할 수 있는 Go 패키지입니다.boltbrowser 패키지를 설치하고 명령어를 실행했으나 명령어를 찾을 수 없다고 뜹니다. 원인공식문서를 보면 Go 버전 1.17부터 go get을 통한 패키지 다운로드 후 실행이 deprecated 되었다고 합니다.-d 옵션이 default로 설정되어 go get 실행시 다운만 받고 빌드는 되지 않는다고 합니다.go install은 go.mod 파일에 지정된 버전을 무시하고 명령어에 지정한 버전으로 패키지를 설치하게 됩니다.앞으로는 패키지 설치는 go install로 사용하면 될 것 같습니다. 해결 방법MacOS 기준으로 작성해보겠습니다.go install 명령어로 필요한 패키지를 설치합니다.go install g.. 2024. 7. 3.
[JS] for...in 과 for...of의 차이 for...in 과 for...of의 차이에 대해 알아보겠습니다. for...infor...in 문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복합니다.for (variable in object) { statement;} 열거 가능한 속성(enumerable)객체를 선언하여 살펴보면 [[Prototype]] 이라는 것이 있습니다.열거 가능한 속성이 무엇인지 이해하기 위해 Prototype에 대해 먼저 정리해보겠습니다. PrototypeJS는 프로토타입 기반 객체지향언어이며, 프로토타입 체인을 통해 속성을 상속합니다.JS의 모든 객체는 부모 역할의 객체와 연결되어 있어, 부모 객체의 프로퍼티 또는 메소드를 상속받아 사용할 수 있습니다.이러한 부모.. 2024. 6. 28.
PRG 패턴, 303 상태코드로 양식 다시 제출 방지하기 문제 & 원인위와 같이 양식을 제출하고 나서 새로고침을 할 때마다 계속 '양식 다시 제출 확인' 알림창이 뜹니다.처음에 GET /add URL에서 웹 양식을 제출하면 POST /add로 전송됩니다.서버에서는 POST /add로 요청이 들어오면, 양식 데이터를 적절히 처리 후 308 상태 코드와 함께 홈화면으로 리다이렉션을 해주었습니다.리다이렉션을 해주었음에도 POST 요청이 발생하는 것을 보아, 308 상태 코드가 문제라는 생각이 들었습니다.  우선, 리다이렉트와 PRG 패턴의 개념에 대해 정리하고 해결 방법을 선택해보겠습니다.리다이렉트(Redirect)리다이렉트는 사용자(브라우저)가 처음 요청한 URL이 아닌, 다른 URL로 보내는 과정입니다.HTTP 리다이렉트는 서버에서 3XX 코드로 응답할 때 발생.. 2024. 6. 27.
[Go] Slice, Pointer, Struct Slice vs ArrayPython, JS와 달리 Golang의 array는 정해진 길이가 있습니다.// Arrayfoods := [3]string{"kimchi", "pizza", "pasta"}for _, food := range foods { fmt.Println(food)}// 또는for i := 0; i kimchi> pizza> pastaslice는 가변 길이의 배열이다. 대괄호 안의 숫자를 지우면 slice가 됩니다. (JS의 array처럼)slice에 요소를 추가할 때는 append 메서드를 사용하고 복사본으로 원본 slice를 업데이트 해줘야 합니다.// Slicefoods := []string{"kimchi", "pizza", "pasta"}fmt.Printf("%v\n", f.. 2024. 6. 26.
[Go] Go 프로젝트 설정 1. Go 런타임 설치Go 홈페이지에서 런타임을 설치합니다.저는 M1 맥을 사용하기 때문에 ARM64로 설치했습니다.버전 명령어로 올바르게 설치됐는지 확인합니다.go --version2. 프로젝트 실행프로젝트 초기화 명령어를 수행합니다.실행 후 go.mod 파일이 생기는데, 이는 NodeJS에서 package.json, Python의 requirements.txt와 같습니다.go mod init github.com/계정명/저장소명main.go 파일을 작성하고 그 안에 간단히 코드를 작성합니다.package main import "fmt" func main() { fmt.Println("Welcom to Nomad Coin!"); }다음 명령어로 실행해봅니다.go run main.go3. 에디터 설.. 2024. 6. 24.
체인지업 2024년 5-6시즌 후기 유튜버 이형님이 진행하시는 체인지업 24년 5-6시즌에 참여한 후기를 적어보았습니다.광고아님.. 진짜 후기입니다.  어떤 사람에게 도움이 될까?이런 분들에게 체인지업이 크게 도움되실 겁니다. 취준 중 생활 패턴 망가졌다.서류탈락, 면접탈락은 계속 되는데 문제 원인을 모르겠다.어느 직무, 어느 산업에 지원해야 할 지 모르겠다.스펙 채우기에만 집중하고 지원을 안 하고 있다.시간관리를 전혀 못한다.주변 사람들에게 서류/면접 피드백을 안 받아봤거나 받기가 어려운 상황이다. 체인지업에서 무엇을 하는가?1️⃣ 주차별 과제 진행 및 QNA 세션6주 동안 진행하는데 주차별로 과제가 주어집니다. 경험리스트업3C4P 분석자소서 작성비즈니스 레터 체크리스트 기반 피드백지원동기면접 준비경력 이직하는 경우 퇴직사유와 경력기술서.. 2024. 6. 20.
NFT(Non-Fungibility Token)의 활용 사례 NFT는 무엇인가?기술적 정의Non Fungibility Token, 직역하면 '대체할 수 없는 토큰'이라는 뜻이다.쉽게 말하면 암호화폐마다 고유번호가 매겨져 다른 암호화폐로 대체할 수 없다는 개념이다.비트코인은 내가 가진 1비트코인과 남이 가진 1비트코인은 같은 가치를 지니기 때문에 서로 교환 가능하다. 이를 '대체 가능한 토큰'이라 부른다.이에 반해 NFT는 각각의 고유한 속성을 지니고 있기 때문에 1:1 교환이 가능하지 않다. 이를 '대체 불가 토큰'이라 부른다.NFT는 블록체인 기술적 특성상 한 번 발행하면 제3자가 복제하거나 위조할 수가 없고, 소유권과 거래내역이 명시되므로 일종의 '디지털 소유 증명서'처럼 활용될 수 있다. 토큰상품권이나 서비스의 교환권을 의미한다.블록체인 기반으로 토큰을 발행.. 2024. 6. 19.