본문 바로가기

전체 글35

GPTs 기반 신입 프론트 엔지니어 면접관 ChatGPT의 GPTs의 기능을 이용해서 신입 프론트 엔지니어 면접관을 만들어놨습니다. 마음껏 사용하시기 바랍니다. 주요기능 자기소개서, 포트폴리오, 이력서등을 읽고 해당 문서 기반으로 인터뷰 진행 가능. 확장자는 PDF나 docx파일을 추천드립니다. ChatGPT 정책 상 URL 첨부는 처리하지 못합니다. 코딩테스트 (언어는 javascript나 node.js를 기본으로 합니다.) 신입 수준의 서버 관련 질문 탑재. 질문에 대한 대답을 할 때마다 (꽤나 냉정한...ㅠㅠ) 피드백을 제공합니다. 어떤 점이 좋았고 나빴는지, 개선할 점은 무엇인지에 대해 설명해줍니다. ChatGPT - Senior Engineer Interviewer 프론트엔드 신입 면접을 담당하는 시니어 엔지니어. 자기소개서나 이력서도 .. 2024. 2. 22.
openAI api로 아웃페인팅을 (야매로) 싸게 이용하고 구현하기 openAI의 아웃페인팅을 해상도가 좀 낮더라도, 조금 노가다를 하더라도 싸게 이용할 수 없을까? 발상의 시작 openAI의 아웃페인팅은 dalle2 모델을 기반으로 하는데, 현재 115credits(총 460장의 이미지 생성)에 15달러, 즉 1장당 0.032달러이다. 그런데 openAI의 dalle2 모델의 api요금을 보면 1024*1024 해상도 이미지가 1장당 0.02달러이다. 여기서 뭔가 부조리함(?)을 느꼈다. 똑같은 생성모델을 이용하는데 api로 이미지를 만들면 60퍼센트 가격이라니. 이거 가격차이가 많이 나는 거 아니야? 그래서 혹시 이 dalle2 api가 아웃페인팅을 지원하고 있는가 찾아봤다. * openai api 가격표 * outpainting 홈페이지 사실 openai의 이미지 .. 2024. 2. 19.
opeaAI에서 api key가 disabled 되었다고 이메일이 와요. 그냥 평소처럼 로컬환경에서 개발하다가 이런 이메일이 날라왔다. 대충 내용은 이렇다. api key가 유출되었으니, 우리가 그 api키를 무효화시켰고, 새로 api 키를 만들어서 사용하라는 것이다. 일단 나는 로컬환경에서만 이 api key를 사용하고 있었고, 생성한지도 얼마안 된 key였다. 다른 사람에게 실제로 넘어갔을 염려는 없을 것이라고 판단했다. 그럼 외부에 내 apikey를 저장한 적이 있나 생각해보니... 그런 적 있긴 했었다. 바로 github다. github의 원격 저장소에 apikey가 담긴 javascript파일을 저장한 적이 있는데 푸쉬 시간과 이메일을 받은 시간을 보니 거의 비슷했다. 그래서 검증을 위해 apikey를 빨리 하나 만들어서 push를 해봤다. 얼마 있다가 그 key도 .. 2024. 2. 12.
Set 자료형에 중복되는 원소가 나타날 수 있을까? 원칙적으로 말하면 불가능하다. 이는 누구나 아는 사실이다. Set은 집합을 나타내기 위한 자료형이기 때문에, 중복값이 나타나면 안된다. 하지만 중복되는 원소가 나타나는 현상을 발견했기 때문에 이 글을 찾아왔을 것 같다. Set에 중복이 나타나는 상황은 언제일까? 이런 현상은 배열이나 객체와 같은 참조타입 데이터의 값을 Set에 넣을 때 발생한다. 이렇게만 말하면 잘 감이 안 잡히기 때문에 바로 예시를 들어보자. const set = new Set(); const obj1 = { key: 'value' }; const obj2 = { key: 'value' }; set.add(obj1); set.add(obj2); // obj1과 obj2는 값은 동일하지만 다른 객체 참조 console.log(set); .. 2023. 7. 3.
한 프로세스가 여러 개의 포트와 동시연결될 수 있을까? TCP 연결을 만지작 거리다가 생긴 의문이다. 과거에 대학교에서 컴퓨터 네트워크를 배울 때, 교수님이 가르쳐주신 게 있다. 1. 트랜스포트 레이어는 ‘호스트들이 실행하는 프로세스와 프로세스를 논리적으로 연결하는 레이어’이다. 2. 네트워크 레이어가 호스트와 호스트를 연결한다면, 트랜스포트 레이어는 호스트에서 실행되는 프로세스들을 서로 연결해주는 기능을 한다. 3. 두 호스트의 프로세스가 각각 연결되고, 이 프로세스들은 다른 프로세스와 동시에 연결될 수는 없다. 이 말을 인터넷에 적용시켜보자. 인터넷은 네트워크 레이어로 IP를 사용하고, 트랜스포트 레이어에 TCP를 사용한다. 데이터 패킷이 IP(네트워크 레이어)에 의해 컴퓨터(호스트)에 전달되면, 그 패킷들을 컴퓨터 내의 프로세스에 분배하는 일은 TCP가.. 2023. 6. 9.
배열을 객체로, 객체를 배열로 만드는 방법 배열을 객체로 혹은 거꾸로 객체를 배열로 만드는 작업은 참 많이 쓰인다. 코딩테스트에서도 그렇고, 실제 프로젝트를 함에 있어서도 구현할 일이 많이 있다. 이런 작업을 수행하는 방법이 여러가지가 있어서, 치팅시트 마냥 짧게 정리했다. 배열을 객체로 만드는 방법 Array.prototype.reduce()를 이용한 방법 문법 reduce(callbackFn) reduce(callbackFn, initialValue reduce는 본래 단어의 의미가 '줄이다.'이다. 의미에서 알 수 있듯이 reduce는 배열의 원소에 대해 콜백함수를 반복호출하고 최종적으로 하나의 값(여기선 객체)을 출력한다. 가장 흔하게 볼 수 있는 방법이다. 이 방법을 사용한 코드는 다음과 같다. const arr = [1, 2, 3]; .. 2023. 6. 9.
Window OS에서 자동으로 commit을 하도록 예약하고 싶어요 발생한 문제 내가 작성한 코드들이 특정 시간에 자동으로 커밋되도록 하고 싶은데, git에는 예약 기능이 없다. 리눅스/유닉스 계열 OS에선 쉘 스크립트(.sh)를 만들고 cron이라는 작업스케쥴러를 이용하여 예약기능을 어느정도 구현할 수 있다던데, 문제는 현재 사용하는 OS가 window다. 나는 리눅스는 몰라도 window OS에 대해서 공부한 적은 없다... 목표 이상적인 목표: git의 명령어들을 저장해놨다가 정해진 시간에 동기화하여 실행하고 싶다. 최소 목표: 로컬파일들이 정해진 시간에 로컬에 커밋되도록 하고 싶다. commit 예약기능은 왜 아직도 안 나왔는지 모르겠다. 1일 1커밋을 실천하려는 사람, 휴가 때도 커밋 이력을 남기고 싶은 사람, 그냥 안전하게 백업을 자동화하고 싶은 사람... 기.. 2023. 5. 22.
배열이나 문자열 자르는 메소드: slice, substring, splice 정리 공부하다가 배열이나 문자열 자르는 메소드들이 헷갈려서 예시코드와 함께 정리했다. slice, substring, splice 얘네들은 하는 일은 뭔가를 자른다는 점에서 비슷하다. 근데 조금 하는 일이 다르다. 모질라 재단의 공식문서를 참고해서 해당 내용들을 공부하고 정리했다. *String.prototype.substr()함수 같은 경우 ECMAScript 표준에서 Deprecated (사용 권장 X)으로 나타나있습니다. 이것 대신 slice나 substring을 사용하는 것이 권장되므로 이 글에서 substr() 함수는 정리하지 않았습니다. Array.prototype.slice() slice() 메서드는 어떤 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반.. 2023. 5. 18.
스네이크 케이스로 된 파일명을 케밥 케이스로 바꾸기(node.js) 학부 때 C를 사용할 때, 습관적으로 파일명으로 스네이크 케이스를 사용했다. 최근에서야 안 것인데 자바스크립트(node.js) 코드는 카멜 케이스와 파스칼 케이스를 사용하지만, 파일명으로는 대개 케밥 케이스를 사용한다. 이 참에 파일명을 전부 케밥 케이스로 바꾸려고 한다. *혹시 헷갈리는 분을 위해 스네이크 케이스 vs 케밥 케이스 ex) 'solve problem fast.js'라는 파일명을 사용하고자 할 때. 스네이크 케이스(Snake case): 영어 소문자와 언더스코어('_') 로 이름을 붙이는 방식. =>'solve_problem_fast.js' 케밥 케이스(Kebab case): 영어 소문자와 하이픈('-')으로 이름을 붙이는 방식. =>'solve-problem-fast.js' 둘 다 파일명.. 2023. 5. 16.