오늘의 목표

더보기

✔️ 프로그래머스 코테 문제 풀기

✔️ CS 강의

✔️ Node.js 강의 듣기


⏱️ 오늘의 일정

9:00 ~ 10:00 - 프로그래머스 코테 문제 풀기
10:00 ~ 12:00 - CS 강의

12:00 ~ 13:00 - 점심
13:00 ~ 16
:00 - Node.js 강의 듣기

16:00 ~ 18:00 - 밍글 데이 참여

18:00 ~ 19:00 - 저녁

19:00 ~ 21:00 - Node.js 강의 듣기


 

📜 프로그래머스 코테 문제 풀기

9:00 ~ 10:00 - 프로그래머스 코테 문제 풀기

 

모의 고사

https://github.com/YamSaeng/AlgorithmCodingTest/blob/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/42840.%E2%80%85%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC/%EB%AA%A8%EC%9D%98%EA%B3%A0%EC%82%AC.js

 

AlgorithmCodingTest/프로그래머스/1/42840. 모의고사/모의고사.js at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

📜 CS 강의

10:00 ~ 12:00 - CS 강의

 

수강생 2분이서 조사해온 OSI 7계층에 관한 발표를 듣고,

튜터님의 게임 서버에 관한 강의를 들었다.

 

2024.08.25 - [네트워크] - [네트워크] OSI 모델

 

[네트워크] OSI 모델

개방형 시스템 상호 연결( OSI ) 모델은 표준 프로토콜을 사용해 다양한 통신 시스템이 통신할 수 있도록 국제표준화기구에서 만든 개념 모델이다. 쉽게 말하면 OSI는 상이한 컴퓨터 시스템이 서

program-yam.tistory.com

 

내가 조사해본 OSI 모델 7계층

 

📜 Node.js 강의 듣기

13:00 ~ 16:00 - Node.js 강의 듣기

 

Node.js 강의 입문을 복습하면서 강의 내용을 정리했다.

 

2024.08.29 - [Javascript] - [Javascript] Module

 

[Javascript] Module

모듈은 Javascript를 파일 단위로 분리된 코드 덩어리를 말한다.모듈은 하나의 모듈에서 다른 모듈을 호출해 사용할 수 있다.모듈은 대개 클래스 하나 혹은 특정한 목적을 가진 복수의 함수로 구성

program-yam.tistory.com

 

2024.08.29 - [Javascript] - [Javascript] API

 

[Javascript] API

API는 서로 다른 다른 소프트웨어나 어플리케이션 간을 연결해주는 매개체이자 약속이라고 볼 수 있다. API를 작성한다는 의미웹 어플리케이션에서 원하는 기능을 수행하는 URL과 인터페이스를

program-yam.tistory.com

 

📜 밍글 데이 참여

16:00 ~ 18:00 밍글데이

 

캠프에서 개인 과제 제출 완료를 기념해서 밍글 데이라는 프로그램을 진행해서 참여했다.

상품으로 치킨과 커피를 걸고 OX 문제와 퀴즈, 음악 이름 맞추기 게임을 했고, 아쉽게도 모두 당첨은 되지 못했다. ㅠㅠ

 

🌙 하루를 마치며

이번주를 끝으로 개인 과제 주차도 모두 끝났다.

내일부터 Chapter 3인 주특기 입문/숙련 주차가 시작 된다고 공지를 받았다.

개인적으로 매우 기대되는 Chapter인데, 이번주 안으로 제공 받은 Node.js 강의 입문과 숙련을 모두 수강하고 정리해서

Chapter3 수업을 수강하는데 있어서 어려움이 없도록 해야겠다.

API

 

API는 서로 다른 다른 소프트웨어나 어플리케이션 간을 연결해주는 매개체이자 약속이라고 볼 수 있다.

 

API를 작성한다는 의미

  • 웹 어플리케이션에서 원하는 기능을 수행하는 URL과 인터페이스를 제공한다는 의미다.
  • API에서 원하는 데이터를 받아 DB에 데이터를 저장하고, 저장되어 있는 데이터를 읽어 웹 어플리케이션에 데이터를 제공하는 행위를 통해 사용자가 원하는 목적을 이룰 수 있게 해야 한다.

REST API

REST API ( 출처 : https://mannhowie.com/rest-api )

 

  • REST는 'Representational State Transfer'의 줄임 말로, 월드 와이드 웹과 같은 분산 하이퍼미디어 시스템을 위해 네트워크 상에서 자원을 쉽고 명확하게 식별하고 조작할 수 있게 도와주는 소프트웨어 아키텍처의 한 형식이다.
  • URL, Headers, Method 등 네트워크 표현 수단을 이해하기 쉬운 표현으로 정의하는 것을 말하고, 'REST 아키텍쳐'는 쉽게 이해할 수 있도록 '자원'을 정의하고 이 '자원'을 중심으로 표현을 구성하는 원칙을 제시한다.
  • REST API는 HTTP를 통해 웹 서비스의 자원에 접근하는 방식을 'REST 아키텍쳐'의 규칙을 따라 구현된 API라고 생각하면 된다.

REST API의 구성 요소

REST API의 구성은 크게 세 가지로 이루어 진다.

1. 자원 ( Resource ) - URL

  • 소프트웨어가 관리하는 모든 것을 자원으로 표현할 수 있다.

2. 행위 - HTTP method

  • http method인 GET, POST 등으로 자원에 대한 행위를 표현할 수 있다. ( 예를 들어, GET 메서드는 '조회'와 관련이 있어서 데이터를 읽는 작업을 수행하고, POST 메서드는 '생성'과 관련이 있어서 새로운 데이터를 생성하는 작업을 수행한다. )
  • 자원에 대한 생성/조회/수정/삭제를 각각의 method로 나누어 놓고, 이를 보통 CRUD라 한다.
Create : 생성(POST)
Read : 조회(GET)
Update : 수정(PUT),(PATCH)
Delete : 삭제(DELETE)

 

3. 표현

  • 해당 자원을 어떻게 표현할지에 대한 방법으로, 보통 JSON, XML 같은 형식을 이용해 자원을 표현한다.
  • HTTP에서는 Content-Type 이라는 헤더를 통해 표현 방법을 서술한다.

REST API 예시

router.get('/books', (req, res) => {
	res.json({ success: true, data: getAllBooks() });
});
  • 위 예시코드는 /books 라는 URL을 통해 전체 책 목록을 불러와 응답해 주는 역할을 하는 API다.
  • http 메서드인 GET은 리소스를 조회하는 역할을 담당하므로, 위 코드는 전체 책 목록을 조회하고, 그 결과를 JSON 형식으로 반환한다. 이렇게 API가 "REST 원칙"에 따라 구현되었으므로, 이 API는 RESTful 하다고 볼 수 있다.

Routing의 이해

Routing은 클라이언트의 요청 조건( http 메서드, 주소 등)에 대응해 응답하는 방식을 말한다.

여기서 말하는 Router는 클라이언트의 요청을 쉽게 처리 할 수 있게 도와주는 Express.js의 기본 기능중 하나다.

  • 일반적으로 Router는 아래와 같은 구조를 가진다.
router.METHOD(PATH, HANDLER);
  • router : Express.js의 라우터를 정의하기 위해 사용한다
  • METHOD : http method를 나타낸다. ( 예 : get, post, put, patch, delete, ... )
  • PATH : 실제 서버에서 API를 사용하기 위한 경로를 나타낸다. ( 예 : users, posts, URL, ... )
  • HANDLER : 라우트가 일치할 때 실행되는 함수다.

 

'Javascript' 카테고리의 다른 글

[Javascript][Node.js] Request, Response  (0) 2024.08.30
[Javascript] API Client ( Insomnia API Client )  (0) 2024.08.30
[Javascript] Module  (0) 2024.08.29
[Javascript] Express.js 프레임 워크  (0) 2024.08.28
[Javascript] Node.js  (0) 2024.08.27

모듈 ( 출처 : hacks.mozilla.org )

 

모듈은 Javascript를 파일 단위로 분리된 코드 덩어리를 말한다.

모듈은 하나의 모듈에서 다른 모듈을 호출해 사용할 수 있다.

모듈은 대개 클래스 하나 혹은 특정한 목적을 가진 복수의 함수로 구성된 라이브러리 하나로 구성된다.

 

모듈의 필요성

  • 코드 베이스를 분리할 수 있고, 이를 통해 코드를 구조적으로 관리할 수 있다.
  • 코드를  재사용 가능하게 만들어준다. ( = 모듈화 )
  • 코드의 함수와 변수중 일부만 외부에서 사용하도록 노출시킬 수 있다. ( 즉, 모듈 내부의 코드 세부사항을 외부로 부터 은닉하는 정보은닉을 표현할 수 있다. )
  • 해당 모듈이 참조하고 있는 다른 모듈에 대한 종속성을 관리하는 역할을 담당한다.

 

CJS ( CommonJS )

Node.js 환경에서 기본적으로 사용되는 모듈 시스템이다.

설정을 따로 추가하지 않은 이상, Node.js에서는 CommonJS를 기본으로 사용한다.

require 함수를 사용하여 다른 모듈을 불러올 수 있다.

require 함수는 경로 혹은 문자열을 가지고 내부 알고리즘을 통해 모듈을 가져오고 종속성을 처리한다.

 

ESM ( ECMA Script Module )

최신 Javascript에서 지원하는 모듈 시스템이다.

모든 Javascript 환경에서 통합적인 인터페이스를 제공하기 위해 시작된 체계다.

CommonJS 와는 다르게 정적으로 모듈을 가져오며 비동기적 모듈 로딩과 순환 종속을 처리한다.

 


모듈의 사용법

모듈 사용법 ( 출처 : hacks.mozilla.org )

 

export 명령어를 변수나 함수 앞에 붙이면 외부 모듈에서 해당 변수나 함수에 접근할 수 있다. 

import, require 명령어를 사용해 외부 모듈의 기능을 가져올 수 있다.

 

 ● import는 ES6( ES2015 )로 모듈 시스템을 관리할 때 사용한다.

  • 이 방식은 정적 로딩을 지원한다.
  • import 문은 코드의 최상위에 위치해야 한다

 ● require는 CommonJS로 모듈시스템을 관리할 때 사용한다.

  • 이 방식은 동적 로딩을 지원한다.
  • require 문은 코드의 어디에서든 사용할 수 있다.

 

ES6 Module 사용

// 📁 sayHi.js
export function sayHi(user) {
  console.log(`Hello, ${user}!`);
}

 

export 지시자를 사용해 sayHi.js 내부의 함수 sayHi를 외부로 내보낸다.

 

// 📁 main.js
import {sayHi} from './sayHi.js';

console.log(sayHi); // function
sayHi('John'); // Hello, John!

 

import 지시자를 사용해 상대 경로 ( ./sayHi.js ) 기준으로 모듈을 가져오고 sayHi.js 에서 내보낸 함수 sayHi를 상응하는 변수에 할당한다.

 

상대 경로

import {sayHi} from './sayHi.js';

 

위 코드에서 ./sayHi는 파일 경로를 나타내는데, ./ 으로 시작하는 경로는 '상대 경로' 라는 것을 나타낸다.

여기서, '상대 경로'란 현재 파일의 위치에 따라 다르게 해석되는 파일 또는 디렉토리의 위치는 나타내는 방식이다.

즉, ./sayHi.js 는 현재 파일이 위치한 디렉토리에서 sayHi.js라는 이름의 파일을 찾는 것을 의미한다.

상위 디렉토리에서 파일을 찾으려면 ../ 을 이용하면 된다. 

즉, ../sayHi.js 라고 상대경로를 설정하면 현재 파일이 위치한 디렉토리의 상위 디렉토리에서 sayHi.js 를 찾는 것을 의미한다.

 

화살표 함수 export, import

/** 화살표 함수 export **/

// 모듈을 호출했을 때, addArrowFunction 키 값에는 addArrowFunction 변수 함수가 가지고 있는 값이 할당된다.
export const addArrowFunction = (a, b) => {
  return a + b;
}

 

/** 화살표 함수 import **/

import { addArrowFunction } from './math.js'

console.log(addArrowFunction(5, 3));

// Print: 8

 

'Javascript' 카테고리의 다른 글

[Javascript] API Client ( Insomnia API Client )  (0) 2024.08.30
[Javascript] API  (0) 2024.08.29
[Javascript] Express.js 프레임 워크  (0) 2024.08.28
[Javascript] Node.js  (0) 2024.08.27
[Javascript] 자료형  (0) 2024.08.24

오늘의 목표

더보기

✔️ 알고리즘 풀이 세션 듣기

✔️ 프로그래머스 코테 문제 풀기

✔️ Node.js 강의 듣기


⏱️ 오늘의 일정

9:00 ~ 11:00 - 알고리즘 풀이 세션 듣기
11:00 ~ 12:00 - 프로그래머스 코테 문제 풀기

12:00 ~ 13:00 - 점심

13:00 ~ 19:00 - Node.js 강의 듣기, 알고리즘 조사

 

19:00 ~ 20:00 - 유튜브 알고리즘 문제 풀기


📜 알고리즘 풀이 세션 듣기

9:00 ~ 11:00 - 알고리즘 풀이 세션 듣기

 

월, 화에 캠프에서 제공했던 알고리즘 문제 풀이 세션이 있어서 참여해 수업을 들었다.

튜터님이 풀어준 방식이 나와는 좀 달라서 유익한 시간이였다.

 

📜 프로그래머스 코테 문제 풀기

11:00 ~ 12:00 - 프로그래머스 코테 문제 풀기

 

 과일 장수

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/135808.%E2%80%85%EA%B3%BC%EC%9D%BC%E2%80%85%EC%9E%A5%EC%88%98

 

AlgorithmCodingTest/프로그래머스/1/135808. 과일 장수 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

📜 Node.js 강의 듣기, 알고리즘 조사

13:00 ~ 19:00 Node.js 강의 듣기, 알고리즘 조사

 

1주차 Node.js 강의를 복습하고 내용을 정리하고 있다.

 

2024.08.27 - [Javascript] - [Javascript] Node.js

 

[Javascript] Node.js

Node.js는 "Javascript를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경"을 말한다.이는 Core Library와 V8 Engine, 그리고 libuv라는 라이브러리를 통해 가능해진다. V8 Engine은 구글이

program-yam.tistory.com

 

2024.08.28 - [Javascript] - [Javascript] Express.js 프레임 워크

 

[Javascript] Express.js 프레임 워크

웹 프레임 워크  웹 프레임 워크는 프로그래밍의 특정 부분을 추상화해서 개발자가 더 높은 수준에서 프로그램을 작성할 수 있게 도와주는 도구다. 프레임워크는 '틀'이라는 의미로, 개발하는

program-yam.tistory.com

 

2024.08.28 - [IT] - [IT] Javascript - Package Manager

 

[IT] Javascript - Package Manager

패키지 ( Package )Node.js에서 코드의 재사용성을 높이기 위해 작성된 독립적인 코드 조각을 '모듈'이라고 부르고,이러한 모듈을 npm이나 yarn과 같은 패키지 매니저를 통해 업도르하여 다른 개발자들

program-yam.tistory.com

 


알고리즘 조사

 

튜터님이 언급한 퀵 정렬, 합병 정렬, 삽입 정렬과 슬라우딩 윈도우 알고리즘에 대해 조사해봤다.

 

2024.08.28 - [알고리즘] - [알고리즘] 퀵 정렬

 

[알고리즘] 퀵 정렬

퀵 정렬은 불안정 정렬에 속하며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다.분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법이다. 

program-yam.tistory.com

 

2024.08.28 - [알고리즘] - [알고리즘] 합병 정렬

 

[알고리즘] 합병 정렬

일반적으로 구현했을 때 안정 정렬에 속하며, 분할 정복 알고리즘의 하나다. 합병 정렬 알고리즘의 구체적인 방법하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬

program-yam.tistory.com

 

 

2024.08.28 - [알고리즘] - [알고리즘] 삽입 정렬

 

[알고리즘] 삽입 정렬

삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여,자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.매 순서마다 해당 원소를 삽입

program-yam.tistory.com

 

2024.08.28 - [알고리즘] - [알고리즘] 슬라이딩 윈도우 알고리즘 ( Sliding Window )

 

[알고리즘] 슬라이딩 윈도우 알고리즘 ( Sliding Window )

슬라이딩 윈도우 알고리즘고정 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이용해 문제를 풀이하는 알고리즘.배열이나 리스트의 요소 중 일정 범위의 값을 비교할때 사용하면

program-yam.tistory.com

 

 

📜 유튜브 알고리즘 문제 풀기

19:00 ~ 20:00 - 유튜브 알고리즘 문제 풀기

 

유튜브 알고리즘 강의에서 정리한 알고리즘 문제들을 c++로 풀고 있다.

아무래도 c랑 c++은 꾸준히 기억하고 있어야 좋을 것 같아서 강의에서 제시한 알고리즘 문제들은 모두 c++로 풀 예정!

 

핸드폰 요금

https://github.com/YamSaeng/AlgorithmCodingTest/tree/main/%EB%B0%B1%EC%A4%80/Bronze/1267.%E2%80%85%ED%95%B8%EB%93%9C%ED%8F%B0%E2%80%85%EC%9A%94%EA%B8%88

 

AlgorithmCodingTest/백준/Bronze/1267. 핸드폰 요금 at main · YamSaeng/AlgorithmCodingTest

This is an auto push repository for Baekjoon Online Judge created with [BaekjoonHub](https://github.com/BaekjoonHub/BaekjoonHub). - YamSaeng/AlgorithmCodingTest

github.com

 

합병 정렬 ( 출처 : https://ko.wikipedia.org/wiki/합병_정렬 )

 

일반적으로 구현했을 때 안정 정렬에 속하며, 분할 정복 알고리즘의 하나다.

 

합병 정렬 알고리즘의 구체적인 방법

하나의 리스트를 두 개의 균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음,

두 개의 정렬된 부분 리스트를 합해 전체가 정렬된 리스트가 되게 하는 방법이다.

합병 정렬은 다음의 단계로 이루어진다.

  • 분할 : 입력 배열을 같은 크기의 2개의 부분 배열로 분할한다.
  • 정복 : 부분 배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않으면 순환 호출을 이용해 다시 분할 정복 방법을 적용한다.
  • 결합 : 정렬된 부분 배열들을 하나의 배열에 합병한다.

 

 

 

퀵 정렬 ( 출처 : https://ko.wikipedia.org/wiki/퀵_정렬 )

 

 

퀵 정렬은 불안정 정렬에 속하며, 다른 원소와의 비교만으로 정렬을 수행하는 비교 정렬에 속한다.

분할 정복 알고리즘의 하나로, 평균적으로 매우 빠른 수행 속도를 자랑하는 정렬 방법이다.

 

분할 정복 방법

문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다.

분할 정복 방법은 대개 순환 호출을 이용해 구현한다.

 

퀵 정렬 알고리즘의 구체적인 방법

하나의 리스트를 피벗을 기준으로 두 개의 비균등한 크기로 분할하고 분할된 부분 리스트를 정렬한 다음,

두 개의 정렬된 부분 리스트를 합해 전체가 정렬된 리스트가 되게 하는 방법이다.

 

퀵 정렬은 다음의 단계로 이루어진다.

  • 분할 : 입력 배열을 피벗을 기준으로 비균등하게 2개의 부분 배열 ( 피벗을 중심으로 왼쪽 : 피벗보다 작은 요소들, 오른쪽 : 피벗보다 큰 요소들 )로 분할한다.
  • 정복 : 부분 배열을 정렬한다. 부분 배열의 크기가 충분히 작지 않으면 순환 호출을 이용해 다시 분할 정복 방법을 적용한다.
  • 결합 : 정렬된 부분 배열들을 하나의 배열에 합병한다.
  • 순환 호출이 한번 진행될 때마다 최소한 하나의 원소 ( 피벗 )는 최종적으로 위치가 정해지므로, 이 알고리즘은 반드시 끝난다는 것을 보장할 수 있다.

삽입 정렬 ( 출처 : https://ko.wikipedia.org/wiki/삽입_정렬 )

 

삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여,

자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘이다.

매 순서마다 해당 원소를 삽입할 수 있는 위치를 찾아 해당 위치에 넣는다.

 

삽입 정렬의 구체적인 개념

삽입 정렬은 두 번째 자료부터 시작해 그 앞 ( 왼쪽 )의 자료들과 비교해 삽입할 위치를 지정한 후 자료를 뒤로 옮기고

지정한 자리에 자료를 삽입해서 정렬하는 알고리즘이다.

 

void InsertionSort(int list[], int n)
{
	for (int i = 1; i < n; i++)
	{
		int j;
		int key = list[i];

		for (j = i - 1; j >= 0; j--)
		{
			if (list[j] > key)
			{
				list[j + 1] = list[j];
			}
			else
			{
				break;
			}
		}

		list[j + 1] = key;
	}
}

 

웹 프레임 워크

 

출처 : https://blog.back4app.com/backend-frameworks/

 

웹 프레임 워크는 프로그래밍의 특정 부분을 추상화해서 개발자가 더 높은 수준에서 프로그램을 작성할 수 있게 도와주는 도구다. 프레임워크는 '틀'이라는 의미로, 개발하는 동안 준수해야하는 규칙과 구조를 제공하게 된다.

이미 만들어진 기능을 재사용하고, 이를 조립해서 웹 서비스를 만드는 것이다.


Express.js

Expree.js는 Node.js로 서버를 빠르고 간편하게 만들 수 있게 도와주는 가장 대표적인 웹 프레임워크다.

Expree.js의 가장 큰 특징 중 하나는 미들웨어를 지원하는 것이다.

미들웨어는 사용자의 요청과 응답 사이에 위치하며, 특정 기능을 수행하는 함수로 생각할 수 있다.

예를 들어 인증 ( Authentication ), 로깅 ( Logging ), 에러 처리 핸들러 ( Exception Handler ) 등을 담당하는 다양한 미들웨어를 사용할 수 있게 된다.

 

Express.js로 백엔드 서버 구현

yarn 패키지 매니저로 expree.js 프레임워크를 우선 설치해야한다.

yarn add express

 

터미널에서 위 명령어를 입력해 express.js 프레임워크를 설치한다.

package.json에 express 패키지가 기록되어 있는 모습

 

// app.js

import express from 'express';

const app = express();
const PORT = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(PORT, () => {
  console.log(PORT, '포트로 서버가 열렸어요!');
});

 

app.js에 위 내용을 입력하고 터미널에서 node app.js 를 입력해 실행하면 서버가 열린다.

 

 

웹 브라우저 주소에 localhost:3000을 입력하면 위 그림 처럼 Hello World!가 출력된 것을 확인할 수 있다.

'Javascript' 카테고리의 다른 글

[Javascript] API  (0) 2024.08.29
[Javascript] Module  (0) 2024.08.29
[Javascript] Node.js  (0) 2024.08.27
[Javascript] 자료형  (0) 2024.08.24
[Javascript] 화살표함수  (0) 2024.08.22

슬라이딩 윈도우 알고리즘

고정 사이즈의 윈도우가 이동하면서 윈도우 내에 있는 데이터를 이용해 문제를 풀이하는 알고리즘.

배열이나 리스트의 요소 중 일정 범위의 값을 비교할때 사용하면 유용하다.

  • 선형 공간 ( 1차원 배열 )을 2회 이상 반복적으로 탐색해야 할 경우 O(N^2) 이상 걸릴 시간 복잡도를 부분 배열을 활용하여 O(N)으로 줄일 수 있다.

예제 )

 

const n = 10; // N일 - 배열의 길이
const k = 3; // W 창문의 넓이
const arr = [12, 15, 11, 20, 25, 10, 20, 19, 13, 15]; // 1차원 고정배열

function solution(n, k, arr) {
  let result = 0; // 길이 k의 부분 수열의 요소 전체 합의 최댓값
  let sum = 0; // 특정 부분 수열의 전체 합

  // 배열의 가장 왼쪽부터 k까지의 값의 합을 sum에 담음
  for (let i = 0; i < k; i++) {
    sum += arr[i];
  }

  result = sum;

  // k는 고정적이므로 새롭게 갱신되는 arr[i]와 기존 arr[i - k]를 빼줌
  for (let i = k; i < arr.length; i++) {
    sum += arr[i] - arr[i - k];
    // 최대 합을 비교해서 갱신
    result = Math.max(result, sum);
  }

  return result;
}

console.log(solution(n, k, arr));

 

참고 :https://velog.io/@ninto_2/%EC%8A%AC%EB%9D%BC%EC%9D%B4%EB%94%A9-%EC%9C%88%EB%8F%84%EC%9A%B0-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

'알고리즘' 카테고리의 다른 글

[알고리즘] 퀵 정렬  (0) 2024.08.28
[알고리즘] 삽입 정렬  (0) 2024.08.28
[알고리즘] 선택 정렬  (0) 2024.08.19
[알고리즘] 버블 정렬  (0) 2024.08.19
[알고리즘][백준허브] 프로그래머스, 백준 Git 연동  (0) 2024.08.07

패키지 ( Package )

Node.js에서 코드의 재사용성을 높이기 위해 작성된 독립적인 코드 조각을 '모듈'이라고 부르고,

이러한 모듈을 npm이나 yarn과 같은 패키지 매니저를 통해 업도르하여 다른 개발자들과 공유할 때,

이를 패키지라고 한다.

 

 - 모듈은 일반적으로 프로젝트 내에서 사용되는 코드 조각을 의미하며, 패키지는 이러한 모듈을 포함하고 있거나

   다른 패키지에 의존하고 있는 코드의 집합을 의미한다.

 - 패키지는 다른 패키지를 사용할 수 있다. 이런 관계를 의존 관계라고 부른다.

 

패키지 매니저 ( Package Manager )

패키지 매니저 ( 출처 : https://devopedia.org/package-manager )

  • 패키지 매니저는 패키지를 손쉽게 다루는 작업을 안전하고 편리하게 사용하기 위한 툴이다.
  • Node.js 패키지의 설치, 업데이트, 삭제 등을 할 수 있고, 패키지간의 의존성을 관리해준다.
  • Node.js에서 대표적으로 사용하는 패키지 매니저는 npm과 yarn이 존재한다.

 

NPM ( Node Package Manager )

  • npm은 자바스크립트에서 사용할 수 있는 패키지(모듈) 관리자다.
  • Node.js와 관계없이 프론트엔드에서만 사용 가능한 Javascript Package들도 등록되어 있다

 

yarn

  • npm의 대체제로 Facebook이 2016년에 출시한 패키지 매니저로, npm의 대체제로서 등장했다.
  • npm의 부족한 부분을 보완하고 보안 성능이 향상된 패키지 매니저다.
  • yarn은 패키지를 다운로드 하는 과정에서 해당하는 패키지의 보안 검사를 수행한다. 패키지 내부에 위험한 스크립트가 다운로드 되거나, 종속성 문제가 발생하는 것을 방지할 수 있다.
  • yarn은 병렬 처리를 도입해서, 패키지 설치 속도가 npm보다 빠르다는 장점이 있다.

 

package.json

package.json

  • package.json은 Node.js 프로젝트의 가장 핵심적인 파일로 프로젝트에 대한 정보와 설치한 패키지들의 버전을 관리할 때 사용하는 파일이다.
  • package.json 파일에는 프로젝트명, 작성자, 라이센스 정보 등 일반적인 프로젝트의 메타 데이터 뿐만 아니라, 스크립트를 실행할 수 있는 필드도 포함되어 있다.
  • npm과 yarn 모두 동일한 package.json 파일을 참조한다.

 

package-lock.json과 yarn.lock

  • package-lock.json 또는 yarn.lock 파일은 package.json에서 정의한 패키지 외에도 node_modules에 들어있는 패키지들의 버전과 의존 관계가 상사하게 정의되어 있다.
  • 만약, node_modules 폴더가 없더라도, 해당하는 lock 파일이 존재한다면 동일한 패키지 구조를 재설치 할 수 있다.
  • npm으로 패키지를 설치, 수정, 삭제할 때마다 패키지들의 정확한 의존 관계를 package-lock.json 파일에 저장한다.
  • yarn의 경우 패키지들의 상세한 의존 관계를 yarn.lock 파일에 저장한다.
  • 이러한 lock 파일들은 개발 환경 간에 일관된 패키지 버전을 보장해줘서 버전 관리에 매우 중요한 역할을 한다.

 

yarn 설치

글로벌 환경에서 yarn을 설치하기 위해서는 아래 명령어를 터미널에 입력한다.

# npm을 이용하여 전역 환경에 Yarn을 설치합니다!
npm install -g yarn
  • npm install -g yarn은 npm으로 전역 패키지를 설치할 때 사용하는 명령어다
  • yarn 패키지 매니저를 어디서든 사용할 수 있도록 설치한다.
  • 설치가 완료되었는지 확인 하기 위해서는 yarn -v를 입력해 확인한다.

만약, yarn: 이 시스템에서 스크립트를 실행할 수 없으므로... 라는 에러가 난다면,

권한문제로 powershell에서 명령어를 통해 해결할 수 있다.

 

1. powershell 프로그램을 실행한다.

2. get-executionpolicy를 입력해 권한 상태를 확인한다.

3. remotesigned 권한 상태가 아니라면 set-executionpolicy remotesigned를 입력후 y를 눌러 수락한다.

4. get-executionpolicy로 권한 상태가 remotesigned로 변경되었는지 확인한다.

5. npm install -g yarn으로 재설치한다.

 

 

'IT' 카테고리의 다른 글

[IT] Access Token, Refresh Token  (1) 2024.09.09
[IT] 인증, 인가  (0) 2024.09.09
[IT] JWT  (0) 2024.09.08
[IT] 쿠키와 세션  (0) 2024.09.08
[AWS] RDS 구매하고 사용하기  (0) 2024.09.05

+ Recent posts