배워서 남주는 개발자 :)
반응형

분류 전체보기 132

[TDD] 챕터1 회고

챕터1로 TDD에 대해서 익히고 테스트코드를 작성해보는 시간을 가졌다. 처음에 우리 팀은 JS에 Express를 선택했지만, 팀모임을 하는 시간에 TS와 Nest.js를 써보자는 모두의 의견이 있어서 방향을 조정했다. 나도 개인적으로 회사에서는 백엔드 개발을 JS로만 진행중이어서 TS를 경험해보고 싶다는 생각을 했다. 그래서 강의와 공식문서를 참고하면서 프로젝트를 진행했다. 나를 제외한 다른 분들은 모두 스프링 프레임워크를 다루시는 분들이라서 조금은 익숙하다고 이야기하셨다. 아직 나는 새로운 언어나 프레임워크를 찾아보고 바로 적용하는데 시간이 걸리는것 같다. 그래도 이번에 TDD에 대해서 공부하고 적용해볼 수 있어서 좋았다. 테스트코드의 중요성은 이전부터 익히 들어서 알고는 있었지만, 이렇게 작성해본 적..

항해99 2023.07.03

VSCode 자동완성 키워드 단축키 생성하기

(해당 글은 내가 나중에 다시 확인하기 위한 목적도 포함되어 있다.) 코드를 입력하다 보면 매번 비슷한 코드를 입력하는 경우가 종종있다. console.log() 내게는 로그를 찍는 코드가 그런 코드였다. 찾아보니 로그를 찍는 단축키는 없고, 자동완성 기능에서 키워드를 추가로 생성할 수 있었다. 가보자고!!💪🏼 1. 설정 탭 - User Snippets 클릭 vscode 하단의 톱니바퀴(설정탭)을 클릭해서 User Snippets 메뉴를 클릭한다. 2. 최상단의 Existing Snippets 클릭하여 파일 열기 👉🏾 (기존 스니펫이 없는 경우) New Snippets 클릭 ➡️파일이름 설정 후 생성한 파일 열기 3. 파일에서 코드를 추가 아래의 양식에 맞추어 작성하면 완성이다. console.log p..

Tip 2023.06.01

[실시간 통신 / 채팅 기능] Web Socket 과 Socket.io

저희 채팅 기능이 필요해요! 회사에서 미션이 주어졌다. 평소에는 서비스와 관련하여 기능 개발을 하고, 외부 api를 붙이는 작업을 진행했지만, 이번에는 큰 기능이 들어왔다. 채....팅... 언젠가 하게될 거라고 생각했다. 스타트업 특성상 속도가 중요하기 때문에, 처음에는 서비스를 제공하는 외부 업체를 찾아봤다. 그런데 제공하는 기능과 조건들이 우리의 니즈에 부합하지 않았다. 일단 채팅을 구현하기 위해 강의를 지르고 클론코딩으로 형태를 만들어보기로 했다. 그런데 하다보니 왠지 할 수 있을것 같은 느낌이 들었다. 아래는 내가 채팅 관련 강의를 들으면서 공부하고 이해한 내용을 바탕으로 작성한다. (정리 목적이기 때문에 참고만 하길 바란다.) 목차 1. 네트워크 통신 2. 웹 소켓과 socket.io 1. 네..

Web 2023.05.19

[ JS 딥다이브 ] 13주차 : 프로퍼티 어트리뷰트

1. 내부 슬롯과 내부 메서드 내부 슬롯과 내부 메서드는 JS엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드이다. JS엔진에서 실제로 동작하지만, 개발자가 직접 접근할 수 있도록 외부로 공개된 객체의 프로퍼티는 아니다. 즉, 내부 슬롯과 내부 메서드는 JS 엔진의 내부 로직이므로 원칙적으로 JS는 내부 슬롯과 내부 메서드에 직접 접근하거나 호출할 수 있는 방법을 제공하지는 않는다. 단, 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단을 제공한다. 2. 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체 JS엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다. 프로퍼티의 상태란 프로퍼..

JS 2023.05.06

[ JS 딥다이브 ] 12주차 : let, const 키워드와 블록레벨 스코프

1. Var 키워드로 선언한 변수의 문제점 ES5까지 변수를 선언할 수 있는 방법은 var키워드를 사용하는 것이 유일했다. 특히 var 키워드는 아래와 같은 특징이 있다. 이는 다른 언어와 구별되는 독특한 특징으로 주의하지 않으면 심각한 문제가 발생할 수 있다. 1-1. 변수 중복 선언 허용 var 키워드로 선언한 변수는 중복 선언이 가능하다. var x = 1; var y = 1; // var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용한다. // 초기화문이 있는 변수 선언문은 JS엔진에 의해 var키워드가 없는 것처럼 동작한다. var x = 100; // 초기화문이 없는 변수 선언문은 무시된다. var y; console.log(x); // 100 console.log(y); // ..

JS 2023.05.06

[ JS 딥다이브 ] 11주차 : 전역 변수의 문제점

1. 변수의 생명주기 1-1. 지역 변수의 생명 주기 function foo() { //변수 x var x = 'local' // 변수 x에 local 값 할당 console.log(x) // local return x; // 변수 x 소멸 } foo(); console.log(x) // ReferenceError: x is not defined - 지역 변수 x는 foo가 호출되기 이전에는 생성되지 않는다. - 변수 선언문은 function foo가 실행되는 런타임 이전 단계에서 먼저 실행된다. - 함수가 종료될 때 변수 x는 소멸된다. (메모리에 저장된 값도 정리됨) - 즉, 지역 변수의 생명 주기는 함수의 생명 주기와 일치한다. 1-2. 전역 변수의 생명 주기 var x = 'global' // 전..

JS 2023.04.23

[ JS 딥다이브 ] 10주차 : 스코프

1. 스코프란? 스코프는 식별자가 유효한 범위를 말한다. 변수는 자신이 선언된 위치에 따라서 자신이 유효한 범위, 즉 다른 코드가 변수 자신을 참조할 수 있는 범위가 결정된다. let a = 'jason' function name() { let a = 'tom' console.log(a); // 1️⃣ } name() console.log(a); // 2️⃣ 위에서 코드의 가장 바깥 부분과 name 함수 내부에서 동일한 변수 a를 선언하고 1️⃣과 2️⃣에서 a 변수를 참조한다. 이때 JS엔진은 이름이 같은 두개의 변수 중에서 어떤 변수를 참조할지 결정한다. 이를 식별자 결정이라고 한다. JS엔진은 스코프를 통해 어떤 변수를 참조해야 할지 결정한다. 따라서 스코프란 JS엔진이 식별자를 검색할 때 사용하는..

JS 2023.04.22

EC2에 파일 업로드 하기 ( SCP)

기본적으로 하나의 뎁스씩 파일 업로드가 가능하다. 나의 경우 아래와 같은 구조였다. 로컬 linux - 베스쳔 - Dev SSH - Prod SSH *파일 업로드 명령어 // -i 옵션 : 경로 지정 옵션 sudo scp -i 키파일경로 업로드할파일경로 사용자이름@ip주소:업로드할파일경로 나의 경우 위의 명령어로 로컬에서 베스쳔으로 한 번/ 베스쳔에서 Dev SSH와 Prod SSH로 두번의 뎁스로 파일을 업로드 했다. ** 주의할 점! - ec2가 퍼블릭 인스턴스인 경우 : ip 주소 ➡️ 퍼블릭 IP DNS로 입력!!! - ec2가 프라이빗 인스턴스인 경우 : ip 주소 ➡️ 프라이빗 IP DNS로 입력!! 나의 경우처럼 여러번 파일 업로드를 하면 지나온 경로에 내가 업로드한 파일이 남아있게 된다. ..

Web 2023.04.11

[ JS 딥다이브 ] 9주차 : 함수

1. 함수란? 함수는 JS에서 가장 중요한 핵심개념이다. 일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행 단위로 정의한 것이다. // f(x,y) = x + y function sum(a, b){ return a + b } f(3, 9) = 12 sum(3,9) // 12 * 매개변수 - 함수 내부로 입력을 전달받는 변수 * 입력 - 인수 / 출력 - 반환값 함수는 정의를 통해 생성이 가능하다. 또한 인수를 매개변수로 통해 함수에 전달하면서 함수의 실행을 명시적으로 지시하는 함수의 호출을 해야 코드 블록에 담긴 문들이 실행된다. 2. 사용이유 함수는 필요할 때 여러번 호출할 수 있다. ➡️ 코드의 재사용 측면에서 매우 유용하다. 함수의 이름은 자신의 역할을 잘 설명하도록 작성되어야 한다...

JS 2023.03.25

[ JS 딥다이브 ] 8주차 : 원시 값과 객체 비교

JS의 데이터 타입은 7가지이고 이는 크게 원시 타입 / 객체 타입으로 구분할 수 있다. 구분하는 이유는 무엇일까? 🛑 [원시 타입 - 객체 타입] 은 크게 3가지 측면에서 차이점이 있다. 1. 원시값 1.1) 변경 불가능한 값 (원시 타입의 값 = 원시 값) 은 변경 불가능한 값이다. 다시 말해서 한번 생성된 원시 값은 읽기 전용 값으로서 변경할 수 없다. 변경 불가능하다는 말은 원시값 자체를 변경할 수 없다는 것이지 변수 값을 변경할 수 없다는 것이 아니다. 변수는 언제든지 재할당을 통해 변수 값을 변경할 수 있다. 하지만 상수는 단 한번만 할당이 허용되기 때문에 변수 값을 변경 할 수 없다. 원시값을 할당한 변수에 새로운 원시값을 재할당하면 메모리 공간에 저장되어 있는 재할당 이전의 원시 값을 변경..

JS 2023.03.25
728x90