본문 바로가기

전체 글49

Iwinv 에서 AWS Lightsail 과 EC2로 서버이전하기1 현재 운영은 아니지만 사이드 프로젝트로 제작하고 있는 프로그램을 Iwinv에서 AWS Lightsail 과 EC2로 이전하고자 한다. 처음에 Iwinv를 택했었던 이유 처음 사이드 프로젝트를 시작할 때 세가지 착오가 있었다. 1. 빠르게 제작할 수 있을 것 같다. 2. 값이 저렴한 서버로도 충분할 것 같다. 3. 빠르게 오픈해서 광고수익으로 서버비용보다 더 수익을 벌 수 있을 것 같다. 위 예상에 따르면 굳이 고환율시기에 AWS EC2나 Lightsail을 쓰지 않아도 될 것이라고 생각했고 Iwinv가 서버적인 측면에서 확실하게 AWS보다 저렴하다. 이제와서 AWS로 이전하려는 이유 위 세가지 착오는 나로하여금 오버엔지니어링을 야기하게 하였다. 사실 오버엔지니어링이라고 할 수도 있고 아니라고 할 수도 있.. 2022. 11. 5.
테스트/공부용 VPS 생성 - 저렴한 해외가상서버호스팅 + 비밀번호 없이 SSH 벌써 여기 회사에서 입사한지 3달하고도 반이 넘었다. 입사를 하고나서 적응하고, 익숙해지며 영어를 계속 익히면서 이사를 두번이나 하였더니 지금껏 정신이 없었다. 그러나 이정도 시간이 흐르고 나니 이제서야 공부를 할 여유가 조금 생겨서 공부용 서버를 하나 마련해보기로 마음먹었다. 일단 가상서버 호스팅을 신청을 해보게 된 계기는 세가지이다. 1. 로컬 맥북에다가 이것저것 설치했다가 지웠다가 하기가 무섭다.(실수로 잘못설치하거나 config실수로 인해서 포멧하고싶지않다..) 2. 도커를 공부해볼것이다. 3. Kafka, Rabbit MQ를 공부해볼것이다. 가장 큰 이유는 로컬에서는 별로 테스트해보고싶지 않았다.. 그래서 테스트해보기에 좋은 가상서버 호스팅을 찾아보았는데, 생각보다 다들 너무 비싸다.. 나는 월.. 2021. 12. 19.
일반함수와 화살표함수(Arrow Function) 의 차이 일반함수와 화살표함수의 차이를 적어보고자 한다. 화살표함수는 항상 익명이다. 따라서 항상 변수명을 선언해주어야 원하는대로 사용이 가능하다. var test = () => { console.log('test') }; test(); 위와 같이 선언이 가능하다. function 선언문과 비교했을때 정말 깔끔하고 예쁘게 생겼다. 다만 앞서 올린 글과같이 함수 자체가 호이스팅 되지는 않기 때문에 함수가 할당 된 이후에만 해당 함수를 사용할 수 있다. 일반함수와 화살표함수의 차이는 깔끔한 것도 있지만, 가장 큰 차이점은 this이다. 일반함수가 실행될 때 this가 새로 정의되지만, 화살표함수는 this를 새로 정의 하지 않는다. function test_func(){ this.test = 'hi'; setTime.. 2021. 8. 9.
호이스팅(Hoisting)이란? 호이스팅이란? Hoist는 사전적으로 '들어[끌어]올리다' 라는 의미를 가진 단어이다. Javascript에서 var 로 선언된 모든 변수들은 변수를 정의하는것이 범위에 따라 선언과 할당으로 분리된다. 즉, 변수가 함수 내에서 정의된 경우, 선언이 함수의 최상위로, 함수 바깥에서 정의되었을 경우 전역 컨텍스트의 최상위로 선언된다. console.log(test); // undefined console.log(test2); // ReferenceError: Can't find variable: test22 var test = 1; console.log(test); // 1 변수가 뒤에 어디서든 정의가 된다면 일단 선언이 되었으므로 undefined 가 리턴될것이고, 정의 즉 선언조차 되지 않은 변수는 에러.. 2021. 8. 9.
블록스코프, 함수스코프 란(feat. var, const, let) 오늘은 Javascript의 기본기를 다져보는 시간을 가져보려고 한다. var 과 const, let의 차이를 알아보려고 한다. 일단 블록 스코프, 함수 스코프의 차이를 말하기에 앞서 스코프란 무엇인지 알아보자. 스코프(Scope)란? 단순하게 한국말로 직역하면 '범위' 이다. Javascript 에서의 스코프는 '변수에 접근할 수 있는 범위'라고 생각하면 된다. 블록스코프, 함수스코프란? 블록스코프에는 let(수정가능), const(수정불가)가 있고, 블록({ })마다 새로운 스코프가 새로 재정의 된다라고 생각하면 된다. function test_func(){ let test1 = 'hi1'; const test1 = 'hi2'; console.log(test1, test2); // hi1 hi2 } .. 2021. 8. 9.
NestJS + Websocket으로 채팅만들기 #4 (feat. 채팅 구색갖추기) 이번에는 채팅에 필요한 기능들을 정리하여 제작해보려고 한다. 일단 기본적으로 내가 만들고 싶은 채팅방은 입장했을 시 lobby에 입장한다. 물론 로비에 있는 다른 회원과 대화가 가능하다. 채팅방을 임의로 제작할 수 있고, 채팅방을 만들면 자동으로 채팅방 목록에서 채팅방이 추가된다. 아무도 없는 채팅방은 자동으로 소멸된다. 1유저는 1개의 채팅방에만 들어갈 수 있다. 닉네임은 언제든지 변경이 가능하고, 창을 껐다 켰을시에도 해당 닉네임이 유지되야한다. 이 형태의 채팅방이고 부가적인 기능인 방장이 나갔을 경우 랜덤으로 방장이 바뀐다거나, 채팅방 혹은 닉네임 중복 방지와 같은 부가기능은 일단 제외하고 기본적으로 채팅방으로서의 형태를 제작해보려고 한다. 이렇게 되면 만들어야 하는 함수목록이 대강 정리가 된다. .. 2021. 7. 26.
NestJS + Websocket으로 채팅만들기 #3 (feat. 채팅 "방" 만들기) 채팅방 만들기 채팅 "방"을 만들기 위해서는 각각 개별적인 구분이 필요하다. 입장 해 있는 회원목록이나 회원수가 필요할 것이고, 누가 방장이고, 방 이름이 무엇인지 입력이 필요하다. 직접 room의 Object를 컨트롤 해주는 방법 도 좋지만, Socket.io 에서는 Room 이라는 기능을 제공한다. 👉 [Namespace 와 Room 이란?] 단순하게 //채팅방 들어가기 @SubscribeMessage('enterChatRoom') enterChatRoom(client: Socket, roomId: string) { client.join(roomId) } 이런 형태로 client를 room 에 들어갈 수 있다. room은 별도로 생성 할 필요는 없고 단순히 join을 할 경우 room이 생성된다. 마.. 2021. 7. 26.
NestJS + Websocket으로 채팅만들기 #2 (feat. Socket.io) 이전까지 페이지에 접속하면 채팅방에 접속하여 채팅방으로서의 역할만을 하는 기능을 제작했다. 이번에는 채팅방을 생성할 수 있다. 채팅방 목록 페이지에서 본인의 닉네임을 설정하고, 변경은 목록페이지에서만 가능하다. 채팅방에 접속하면 이전 채팅글을 볼 수 있고, 100개단위로 이전 채팅글을 불러올 수 있다. 글자수 혹은 json size의 제한을 통해 바이너리형태의 직접적인 데이터 전송, xss 등의 보안부분도 추가해준다. 닉네임등록시 금지어를 설정하여 비속어 등을 제한한다. 사이트를 껐다 킬 경우에도 채팅방에 닉네임은 유지된다. 1번 6번에 해당하는 작업을 진행해보려고 한다. 1번 6번 작업하기에 앞서 현재 NestJS 서버의 Websocket이 Socket.io 가 아닌 ws 이다. 따라서 Websocke.. 2021. 7. 25.
Prisma의 단점 - Timezone, 다른ORM은? Prisma 를 사용하다보면 모든사람이 느끼고있는 고통이 하나가 있다. 바로 DateTime 이다. 이게 왜 문제가 되냐하면 문제는 이러하다. prisma.member.create({ data:{ mem_name: '이름', mem_wdate: new Date() } }) mem_wdate 칼럼이 DateTime 으로 설정되어있다고 한다면, 위와같이 row를 생성해줄 수 있다. 문제는 생성된 Row가 문제다. 데이터베이스에 저장이 될 때 UTC기준으로 저장이된다. 분명 DB에 등록한시간이 2021년 7월 23일 오후 7시 0분이기 때문에 2021-07-23 17:00:00 을 기대했지만, 정작 데이터베이스에는 2021-07-23 08:00:00 이 저장되어있다. 그 이유는 Prisma에서는 Timezon.. 2021. 7. 23.