본문 바로가기
반응형

전체 글170

[NestJS] 2. 환경변수 적용 (ConfigModule) 환경변수 적용 서버를 돌리기 위해 꼭 필요한 값들이 있다. 예를 들자면, DB Connection 정보나 서버 Port, AWS Key와 같은 값들이 있다. 이런 값들은 주로 환경변수로 분리하는데, 분리함으로서 아래와 같은 이점들을 얻을 수 있다. 보안: 외부에 노출되면 큰일나는 민감한 값들을 소스코드에 하드코딩하지 않음으로써, 소스코드가 노출되어도 외부에서 민감한 정보들을 알 수 없도록 보안을 강화할 수 있다. 유연성: 소스코드를 직접 수정하지 않고도 값들을 변경할 수 있기에, 서버를 다시 빌드하지 않고도 환경을 설정할 수 있다. 배포 관리의 용이: .env.development, .env.production과 같이 서버가 실행되는 환경에 따라 불러올 환경변수 파일을 다르게 함으로써, 여러 환경에 쉽게.. 2023. 12. 21.
[NestJS] 1. 프로젝트 개발환경 구성 NestJS 프로젝트 개발환경 구성 조현영님의 Slack 클론 코딩 강의를 따라 NestJS 공부를 시작했다. 대부분 강의 내용대로 세팅했지만, 그렇지 않은 부분도 있기에 세팅한 내용을 정리해두려 한다. Slack 클론 코딩[백엔드 with NestJS + TypeORM] 강의 - 인프런 Node.js의 스프링이라고 불리는 NestJS를 배우고, Dependency Injection의 편리함을 맛봅시다. API 개발부터, 익스프레스와의 비교, 배포, 테스팅까지 모두 배워봅시다., 내 손으로 만드는 채팅 앱, 서버 개 www.inflearn.com Node.js 설치 강의에선 Node.js 14를 사용한다. 당시엔 Node 14가 가장 최신의 LTS였는데, 현재는 최신 버전이 Node 20이라 충돌이 생길.. 2023. 12. 19.
[Javascript] 비동기를 통해 프로그램의 효율 향상시키기 (Callback, Promise, async / await) 동기와 비동기 자바스크립트에서 코드가 실행되는 방법은 동기 / 비동기 두 가지로 나뉠 수 있다. 동기 (Synchronous): 코드가 순서대로 실행된다. 작업이 시작되면 끝날떄까지 대기한 후, 다음 작업을 실행한다. 비동기 (Asynchronous): 코드가 동시에 실행된다. 실행중인 작업이 끝나지 않더라도 다음 작업을 실행된다. 동기는 실행 흐름을 파악하기 쉽지만 느리다는 특징이 있고, 비동기는 빠르고 효율적이지만 실행 흐름을 파악하기 어렵다는 특징이 있다. 이번 시간엔 비동기로 코드를 실행하는 방법들에 대해 알아보자. Callback 비동기로 대부분 콜백을 가장 먼저 접한다. 매개변수로 함수 실행 시 실행이 필요한 값들과, 또 다른 함수를 전달한다. 함수의 실행이 완료되면, 전달했던 함수가 호출되는.. 2023. 5. 13.
[Javascript] Array Method 정리 Javascript를 사용하다보면 array를 다뤄야 할 일이 많다. 일일이 알고리즘을 작성해 다룰 수도 있겠지만, 기본적으로 제공하는 함수들을 이용하면 훨씬 효율적으로, 가독성 있게 작성할 수 있다. 이번 시간에는 Javascript에 내장되어있는 array util method들에 대해 알아보자. length 함수가 아닌 속성이다. 배열의 길이를 반환한다. arr.length = 5 와 같이 length에 값을 직접 대입해 배열의 길이를 변경할 수 있다. 구문 arr.length 예시 length 읽기 /* length 읽기 */ const arr = [1, 2, 3]; console.log(arr.length); // 3 for(let i = 0; i < arr.length; i++) { conso.. 2023. 4. 3.
[Javascript] var, let, const의 특징과 var의 문제점 ES6에 들어서며 var의 문제점을 해결하기 위해 새로운 변수 선언 방법인 let, const가 등장했다. var, let, const의 특징과, var를 사용하면 안 되는 이유에 대해 알아보자. var ES6 이전의 변수 선언 방식으로, 재할당 및 재선언이 가능하다. 초기값을 주지 않으면 undefined가 들어간다. var a; // undefined a = 2; // 재할당 var a = 3; // 재선언 아래와 같이 여러 변수를 한꺼번에 선언할 수도 있다. var a = 1, b = 2, c, d = a; 또한 var 키워드를 주지 않고 변수에 값을 할당하면, 암묵적으로 전역 변수를 생성한다. a = 1; console.log(a); // 1 function test() { b = 2; } tes.. 2023. 3. 10.
[OpenRoadmaps] Github Actions를 통한 CI/CD 구축하기 테스트 코드와 AWS를 통한 배포환경이 준비되었으니 이제 CI/CD를 구축할 수 있다. CI/CD의 간단한 정의는 다음과 같다. CI (Continuous Integration): 레포지트로의 코드가 변경될 때, 자동으로 빌드와 테스트를 해준다. CD (Continuous Deployment): CI를 통과한 변경사항을 적용하여 자동으로 배포한다. Github Actions에서는 push, pull request 등 다양한 변경사항과 cron 등의 스케줄에 대해 테스트, 빌드 배포 등의 workflow 자동화를 지원한다. 이를 사용해 CI/CD를 적용했고, 이에 대해 정리해보려 한다. 전체 workflow 파일은 Github에서 확인할 수 있다. GitHub - DevJaewoo/OpenRoadmaps .. 2023. 3. 8.
[OpenRoadmaps] 10. SSL 인증 + NginX Proxy 적용기 EC2에 배포한 후 Elastic IP에 가비아에서 구입한 도메인을 연동했다. IP는 어차피 nslookup 하면 볼 수 있어서 가리진 않았다. NginX 설치 및 HTTPS 리다이렉트 적용 프록시를 적용하기 위해 NginX를 설치하자. sudo apt-get install nginx NginX를 설치하면 /etc/nginx 폴더와 /var/log/nginx 가 생기는데, 각각 NginX를 설정하고, 로그를 남기는 역할을 한다. .conf 파일을 /etc/nginx/conf.d 폴더에 넣어두면, NginX가 켜질 때 설정을 읽어 적용한다. /etc/nginx/openroadmaps.conf 파일을 생성하고, HTTP로 온 요청을 HTTPS로 리다이렉트 해주는 코드를 작성하자. server { listen.. 2023. 3. 1.
[OpenRoadmaps] 9. Docker 빌드 + AWS 배포하기 우선 기능 구현은 잠시 보류하고, CI / CD를 위한 배포부터 먼저 하기로 했다. 배포 구상도는 다음과 같다. Backend는 EC2에, Frontend는 S3에 배포하고, NginX를 통해 SSL 인증과 사용자의 요청에 따른 프록시 작업을 수행한다. /api 경로로 들어오는 요청은 Spring 컨테이너로 보내주고, 나머지는 S3으로 보내주게 설정했다. HTTP 요청이 들어올 경우 HTTPS로 리다이렉트 시켜주도록 설정했다. Docker 빌드 Backend는 Docker 이미지로 빌드해서 배포했다. Docker-Compose로 묶은 채로 배포하고 싶었지만, 이미지를 빌드할 때 환경변수를 설정해야 하는데, Docker 이미지는 이를 plain text로 저장한다. 이런 값들은 노출되면 큰일나기 때문에, .. 2023. 2. 13.
[Java] String Pool 저장 조건 Java는 메모리 공간을 절약하기 위해 Heap 영역에 String Pool 영역을 만들고, 이 영역에 Constant 문자열을 저장한다. 그런데 이 String Pool 영역에 들어가는 조건이 애매하다. 예를 들어, 아래의 s2, s3, s4는 비슷해보이만 다른 결과가 나온다. String s1 = "abc1"; // String Pool에 저장됨 int i = 1; final int j = 1; String s2 = "a" + "bc" + 1; // s1 == s2: true String s3 = "a" + "bc" + i; // s1 == s3: false String s4 = "a" + "bc" + j; // s1 == s4: true 이유가 뭘까? String이 String Pool에 저장되는 .. 2023. 2. 8.
반응형