전체 글

· 이것저것
회사에서 출시했던 앱에서 간혈적으로 에러페이지로 이동되는 현상이 확인되었다재현 경로는 파일 업로드 API 호출시 토큰이 만려된 서버에서 401 응답을 하지만 확률적으로 Nginx에서 502를 뱉던것 참 난감했던게 10번중 10번 다 502가 뜨면 원인이 명확할텐데10번중 1~2번만 502가 뜨니까 이게 뭐지? 싶었다 Nginx error log를 확인해 봤는데 에러는 찍혀있어서 다행이다sendfile() failed (32: Broken pipe) while sending request to upstream 파이프가 부서졌다는데 Nginx와 통신을 위해 연결된 무언가가 연결을 끊었다? 는 느낌이 들긴했지만 저게 뭔데?3일동안 삽질만하다가 나와 같은 현상의 레퍼런스를 찾았다 https://github.c..
· Nestjs
AI에게 꿈 해몽을 요청후 첫 메세지가 넘어온 시점부터 즉각적으로 클라이언트에게 전송하고 싶었다 이렇게 하면 AI응답 지연시간도 줄어들고 사용자도 로딩 시간없이 실시간으로 해몽 내용을 볼 수 있다 Nest에서 sse 통신 Nest 문서에는 @Sse 데코레이터를 통해서 간단하게 구현이 가능했다 그리고 해당 컨트롤러는 Observable 객체를 반환을 해야한다(Observavle은 Rxjs 라이브러리를 사용한다)  하지만 문제가 하나 있었는데 SSE는 GET요청만 지원하는 것이다 꿈에 대한 내용이 DB에 저장되어 있다면 경로 파라미터를 이용해 id값을 통해서 조회할 수 있지만 꿈에 대한 내용이 DB에 없는경우는 데이터를 어떻게 받아야 할지 막막했다 내가 생각한 방법은 2가지 정도가 있었는데쿼리 파라미터로 꿈..
· Nestjs
Nest 프로젝트를 진행하며 특수한 상황의 유효성 검사를 해야할 경우가 생겼다 구현해야 할 유효성 검사 로직export class ContentDto { @ApiProperty({ required: false, type: Sections, example: '[{ section: 등장 인물, detail: 나용환 }] | null', }) @IsOptional() @IsArray({ message: 'sections 리스트 형식이여야 합니다' }) @ArrayNotEmpty({ message: 'sections 리스트가 비어있습니다' }) @ValidateNested({ each: true, message: '유효하지 않은 sections 형식' }) sections?: Sec..
· javaScript
Symbol심볼은 유일한 식별자를 만들기위해서 사용한다 ES6 버전부터 새롭게 추가된 자료형이다. Symbol 특징1. 유일성이 보장된다유일성이 보장되기 때문에 동일한 설명의 Symbol을 만들어도 각각 다른 값을 가진다const id = Symbol('설명');const id2 = Symbol('설명');console.log(id === id2); // false 2.자동 형 변환이 되지 않는다JavaScript에서는 암시적 형 변환이 자유롭게 일어나지만 Symbol은 형 변환이 안된다const id = Symbol('설명');const id2 = Symbol('설명');console.log('' + id); //TypeError: Cannot convert a Symbol value to a stri..
· javaScript
프로토타입이란?JavaScript는 프로토타입 기반 언어라고 한다 JavaScript를 처음 만든 개발자는 다른 언어들에 존재하는 class 개념을 만들지 않고class와 비슷하게 동작하는 프로토타입 개념으로 객체지향적 언어를 만들었다 프로토타입은 객체를 참조 하여 새로운 객체를 생성하는 방식으로 동작하는데 프로토타입에는 Prototype Object와 Prototype Link가 존재한다이 둘을 통틀어 프로토타입 이라고 한다 * ES6 버전부터 JavaScript는 class를 지원하지만 껍데기만 class지 내부적으로 prototype이다 Prototype의 생성 과정함수를 정의하는 시점에는 2가지의 작업이 내부적으로 수행이 되는데 1.Prototype Object 생성 생성함수를 정의하면 함수와 P..
· Network
인터넷이란?인터넷은 네트워크의 네트워크이다 즉 네트워크 통신 망을 인터넷이라고 부른다 그림을 통해서 자세하게 알아보자 먼저 근거리 통신망 부터 알아보자 위의 사진에서 처럼 하나의 지역 에서 컴퓨터들이 통신을 하려면 어떻게 해야 할까?  switch라는 장치를 이용해서 컴퓨터들 끼리 패킷을 주고 받을수 있다(통신이 가능하다)switch는 근거리 내에 기기들을 연결해 서로 패킷을 주고 받게 해주는 장치이다 이렇게 switch와 연결하는 선은 구리 케이블, 광섬유 케이블을 사용한다 우리가 흔히 말하는 랜선이 이 경우에 해당한다 그리고 이것이 컴퓨터들 간의 네트워크를 형성한 것이고이러한 네트워크를 형성한 것을 LAN(Local Area Network) 또는 근거리 통신망 이라고 부른다  하지만 이렇게 형성된 L..
· 회고록
2024.02 ~ 2024.08 약 6개월의 기간 동안 프로그래머스 웹 풀사이클 데브코스교육을 받으며 성장에 대한 회고를 작성하고자 한다 개발자로서 나의 성향을 알 수 있었다혼자서 프로젝트를 하고 혼자서 독학하며 공부할때보다부트캠프의 팀프로젝트를 하며 내가 어떤 사람인지에 대해 알 수 있었다 생산직종에 근무하며 하루에 주어진 일의 할당량만 채우면서 지낼때는내가 맡은 역할만 잘 하면 되는거 아니야? 내가 맡은 할당량만 채우면 끝이지~라는 생각이 있었다 하지만 팀 프로젝트를 진행하며 내가 맡은 역할만 잘한다고, 내가 맡은 할당량만 채운다고프로젝트의 완성도가 높아지지 않는다 그래서 나 스스로는 내가 맡은 역할 이외에도 팀의 이슈가 발생했거나팀원의 코드를 읽고 버그가 있다면 문제를 제기하고 원인과 해결 방법을 ..
· 이것저것
현재 여행지 추천로직에서 ChatGPT를 도입했다그런데 응답 속도가 평균 약 35초가 걸린다.. 너무 느리다AI 응답 속도를 개선해 보자 지금 사용하고 있는 모델은 GPT-4o-mini 이다포스트맨으로 요청했을때 34초 정도 내가 최적화한 방법응답 길이를 줄이자필요한 데이터만 요청가공할 수 있는 데이터는 직접 코드를 짜자 응답 길이를 줄이자현재 응답 포멧이다 const jsonFormat = `{ transportOption : car | publicTransport , routes: { date : 'xxxx-xx-xx' detail : { address: string; placeTitle : string ..
nyh98
코린이 일기장