전체 글323 Nginx 정의 - 경량 웹 서버의 한 종류 - 클라이언트로부터 요청을 받았을 때 요청에 맞는 정적 파일을 응답해주는 HTTP Web Server로 활용되기도 하고, Reverse Proxy Server로 활용하여 WAS 서버의 부하를 줄일 수 있는 로드 밸런서로 활용되기도 함 특징 1. 높은 성능과 적은 메모리 사용 비동기 I/O 처리 방식을 사용하여 높은 성능을 제공하여 대규모 웹 사이트에서도 빠른 응답 시간을 보장 적은 메모리 사용량으로도 높은 성능을 제공하여 서버 운용 비용을 절감 가능 2. 리버스 프록시(Reverse Proxy) 사용 가능 리버스 프록시 : 인터넷과 백엔드 그 사이에 있는 서버 영역 (포워드 프록시는 클라이언트 앞에 놓여져 있는 반면, 리버스 프록시는 웹 서버 앞에 놓여 있음) ※ 리버스.. 2023. 9. 5. docker-compose 정의 - Docker를 사용하여 멀티 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구 - docker-compose.yml 파일을 통해 여러 개의 컨테이너를 하나의 애플리케이션 스택으로 정의하여 이를 한 번에 실행, 관리 및 확장할 수 있음 - 개발 또는 테스트 환경에서 여러 개의 서비스나 컨테이너들을 조합하여 애플리케이션을 구성하고자 할 때 주로 사용 - 여러 개의 컨테이너를 동시에 실행하고, 서로 간의 네트워크 연결, 데이터 볼륨 공유 등을 손쉽게 설정할 수 있음 docker-compose.yml 형식 version: '3' # docker-compose 버전 지정 services: # 실행하려는 컨테이너들 정의 # 오픈소스 이미지를 사용하는 경우 redis-server: # 서비스명(다른 컨테이.. 2023. 9. 5. Redis 정의 Redis 기본 개념 및 특징 - Remote Dictionary Server (외부 딕셔너리 서버) - 원격에 위치하고 프로세스로 존재 - In-Memory 기반 ⇒ 서버가 꺼지면 모든 데이터가 삭제 + 저장&조회 **속도가 빠름 - key-value 구조의 비정형 데이터를 저장하고 관리 - 싱글 스레드 ⇒ 한 번에 한 가지 명령만 실행 가능 - 비관계형 데이터 베이스 관리 시스템 ⇒ NoSQL (쿼리 연산 X) - 메모리 기반(휘발성)이라 서버가 꺼지면 모든 데이터가 삭제되지만 RDB나 AOF 방식으로 메모리 데이터를 디스크에 저장하여 영속적인 데이터 보존 가능 - DB, 캐시 서버, 메시지 브로커(Pub/Sub)로 사용될 수 있음 Redis Pub/Sub(Publish/Subscribe) - 특정한.. 2023. 8. 28. Node.js 클러스터 클러스터(Cluster) - 기본적으로 싱글 스레드인 노드가 CPU 코어를 모두 사용할 수 있게 해주는 모듈 (작업 관리자 - 성능에서 개수 확인 가능) - 포트를 공유하는 노드 프로세스를 여러 개 둘 수 있음 - 요청이 많이 들어왔을 때 병렬로 실행된 서버의 개수만큼 요청이 분산 - 클러스터로 코어 하나당 노드 프로세스 하나를 배정 가능 => 멀티 프로세스 방식 - 멀티 프로세스 방식이라 자원 공유 X - Node.js 클러스터 = Primary 프로세스(1) + Worker 프로세스(나머지) 2023. 8. 28. Flutter 기초 (2) 배치 - MaterialApp() = 구글에서 제공하는 위젯 적용 가능 (만들어진 위젯을 불러오지 않고 그냥 커스터마이징할 경우에도 사용) - Cupertino~() = 아이폰 기본 위젯 적용 가능 - Scaffold() = 화면을 상중하로 나눠서 설정 가능 - Row(children: []) = children으로 지정한 여러 위젯을 가로로 배치 - Column(children: []) = children으로 지정한 여러 위젯을 세로로 배치 - mainAxisAlignment = 해당 축의 기준 정렬 설정 (CSS의 Flex와 비슷) ex) Row에서 mainAxisAlignment = 가로축, crossAxisAlignment = 세로 - crossAxisAlignment = 해당 축과 교차되는 축의.. 2023. 8. 7. Flutter 기초 (1) Flutter - 구글에서 개발한 오픈 소스 크로스 플랫폼 GUI SDK - 크로스 플랫폼 = 하나의 코드 베이스로 Android, iOS, Linux, Windows, MacOS 및 웹 브라우저에서 모두 동작 가능 - 구글에서 개발한 프로그래밍 언어인 Dart가 기반 - 위젯들을 이용해 위젯 트리를 쌓으며 User Interface를 코드로 구현하는 환경을 제공함 - Skia 그래픽 엔진을 통해 화면에 그려지는 모든 픽셀을 자체적으로 제어함 ※ Skia = C++로 개발된 오픈 소스 2D 그래픽 라이브러리 (OpenGL의 Canvas를 사용해 렌더링을 수행함) ※ Android Studio에서 ctrl+space = 자동완성 불러오기 Dart - 구글이 JavaScript를 대체하기 위해 개발한 웹 프.. 2023. 8. 6. java.util.Stack Stack - java.util 패키지로 LIFO 구조인 Stack을 구현할 때 사용 - push() = Stack에 데이터 추가 - pop() = Stack 맨 뒤의 데이터 출력 및 제거 - peek() = Stack 맨 뒤의 데이터 출력 (제거 X) - clear() = Stack 안에 있는 데이터 모두 제거 - size() = Stack 안의 데이터 개수 반환 - contains() = Stack에 지정한 데이터가 포함되어 있는지 여부(true/false) 반환 - empty() = Stack이 비어있는지(true/false) 여부 반환 Example https://school.programmers.co.kr/learn/courses/30/lessons/12973 프로그래머스 코드 중심의 개발자 채.. 2023. 6. 21. Node.js 정의 및 장단점 Node.js - Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임 환경 - 서버 사이드 애플리케이션 개발에 주로 사용되는 소프트웨어 플랫폼 - 브라우저 외부 환경에서 자바스크립트 애플리케이션 개발에 사용 장점 - 모든 API가 비동기로 동작 - HTTP 서버 모듈 내장 => 별도의 웹서버 설치 필요 X - 이벤트 기반 => 이벤트가 발생할 때 미리 지정해둔 작업 수행 - 논 블로킹 I/O = 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행되게 하고, 나중에 오래 걸리는 함수를 실행 (빨리 처리할 수 있는 작업부터 실행) - 노드 프로세스는 멀티 스레드이지만, 직접 다룰 수 있는 스레드는 하나(싱글 스레드) - npm을 기반으로 다양한 모듈 제공 => 효율성이.. 2023. 6. 6. Node.js Swagger 적용 Swagger.js const swaggerUi = require("swagger-ui-express"); const swaggereJsdoc = require("swagger-jsdoc"); const options = { swaggerDefinition: { info: { title: "", // 프로젝트 제목 version: "1.0.0", // 프로젝트 버전 description: "This is project" // 프로젝트 설명 }, host: "localhost:3000", // 요청 URL basePath: "/", }, apis: ["./routes/*.js"], //@Swagger 적용한 js 파일 연동 // (파일 경로 입력은 swaggerUi, specs를 import하여 사용하는 .. 2023. 6. 3. Socket.io Socket.io - 웹소켓에 기반하여 서버와 브라우저 간의 양방향 통신을 돕는 JavaScript 라이브러리 - 하나의 소켓 연결은 하나의 namespace를 가지며, 하나의 namespace 안에는 여러 개의 room을 생성할 수 있음 - 하나의 room 안에 특정 클라이언트들을 입장시키거나(join) 퇴장시킬(leave) 수 있음 기본 세팅 const express = require("express"); const app = express(); const http = require("http"); const { Server } = require("socket.io"); const server = http.createServer(app); const io = new Server(server, { co.. 2023. 5. 31. Nodemon/PM2 Nodemon(Node moniter) - npm install nodemon - 노드가 실행하는 파일이 속한 디렉터리를 감시하고 있다가 파일이 수정되면 자동으로 노드 애플리케이션을 재시작하는 확장 모듈 => 애플리케이션을 개발할 때 주로 사용 - 기존에 [node 파일명]으로 실행했던 것과 다르게 [nodemon 파일명]으로 실행 - [node 파일명] 방식 => 서버 구동 중에 코드를 수정하여 반영하려면 서버를 개발자가 수동으로 끈 후 재실행 - [nodemon 파일명] 방식 => 서버 구동 중에 코드를 수정한 후 파일을 저장하면 서버가 자동으로 재실행하면서 변경사항 반영 PM2(Process Manager) - npm install pm2 - Node.js 서버 운영 패키지 => 애플리케이션 배포에.. 2023. 5. 30. Winston (Node.js 로그 관리) Winston - Node.js에서 Log를 효율적으로 관리할 수 있도록 하는 모듈 winston 로그 레벨 - error(빨강) > warn(노랑) > info(초록) > http(초록) > verbose(하늘) > debug(파랑) > silly(보라) winston.format - 기본 포맷은 JSON이지만 combine을 통해 여러 형식을 혼합해서 지정할 수 있음 - timestamp = 로그 발생 시점 (날짜 형식 지정) - label = 로그가 발생한 어플리케이션 이름 지정 - level = 로그 레벨 - message = 로그 내용 - printf = 출력 형태 지정 ※ level과 message는 자동으로 지정됨 const winston = require('winston'); const w.. 2023. 5. 26. 의존성 주입 방식 의존성 주입 (DI, Dependency Injection) - 객체를 내부(사용자)에서가 직접 생성하는 것이 아니라 외부(Spring IOC container)에서 런타임 시점에 생성해서 사용하려는 주체에 주입시켜주는 방식 - 의존성(Dependency) = 코드에서 두 모듈간의 연결 (의존대상 B가 변하면, 그것이 A에 영향을 미치는 것) 생성자 주입 - 가장 권장되는 의존성 주입 방식 - private final + 클래스 생성자로 의존성 주입 장점 - 순환 참조 방지 - 테스트 용이 - final 선언 가능으로 불변성 보장 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter{ private final.. 2023. 5. 25. JWT JWT(JSON Web Token)- JSON 객체를 사용해서 토큰 자체에 정보들을 저장하고 있는 웹 토큰장점- 중앙의 인증서버, 데이터 스토어에 대한 의존성 X- 시스템 수평 확장에 유리- Base64 URL Safe Encoding > URL, Cookie, Header 모두 사용이 가능하다.단점- Payload의 정보가 많아지면 네트워크 사용량이 증가함- 토큰이 클라이언트에 저장되기 때문에 서버에서 클라이언트의 토큰을 조작할 수 없음 Authentication(인증) - 'A'라고 주장하는 주체(user, subject, principal)가 'A'가 맞는지 확인하는 것- 인증 시 ID와 Password를 담고 인증 검증을 위해 전달되어 사용- 인증 후 최종 인증 결과(user 객체, 권한 정보)를.. 2023. 5. 25. 블록체인 기술사업 교육 35일차 JavaScript로 KAS를 이용하여 토큰 생성, 전송, 조회 token.js const CaverExtKAS = require("caver-js-ext-kas"); const caver = new CaverExtKAS(); // KAS에 접속하기 위한 KAS ID, password (kas.json에 따로 저장함) const kas_info = require("./kas.json"); const accessKeyId = kas_info.accessKeyId; const secretAccessKey = kas_info.secretAccessKey; // 테스트넷 chainID const chainId = 1001; caver.initKASAPI(chainId, accessKeyId, secretAcce.. 2023. 5. 23. 이전 1 ··· 4 5 6 7 8 9 10 ··· 22 다음