🔬Computer Science 51

숫자를 하나씩 쪼개는 방법 / 백준 2588번 곱셈

이번 문제에서는 (3), (4), (5), (6)위치에 들어갈 값을 구하는 프로그램을 작성하는 것이었다. 내가 생각한 해결 방법은 (1)에 (2)의 자리수 별 숫자를 곱하는 것이었다. 그래서 (2)에 들어간 숫자를 하나씩 뽑아와야했다. 타입이 숫자인 경우 split을 사용할 수 없기 때문에 숫자에 ''를 더해서 문자로 만들어주고, split('')을 사용해서 배열로 만들고, 배열을 풀어주는 방식을 썼다. 그리고 여기서 자릿수는 세자리 수로 정해져 있기 때문에 구조분해 할당을 써서 깔끔하게 썼다. const [a, b, c] = (num2 + "").split("").map(Number); 👇전체 코드👇 const fs = require("fs"); const [num1, num2] = fs .readFi..

웹 캐시란, 캐시의 장점, 캐시가 사용되는 곳

캐시란 많은 시간이나 연산이 필요한 작업의 결과를 저장해두는 것 (일시적인 데이터를 저장하기 위한 목적으로 존재하는 고속의 데이터 저장 공간이다. ) 첫 작업 이후에 이 데이터에 대한 요청이 있을 경우, 데이터의 기본 저장 공간에 접근할 때보다 더 빠르게 요청을 처리할 수 있다. 캐싱을 사용하면 이전에 검색하거나 계산한 데이터를 효율적으로 재사용할 수 있다. 기본 스토리지 계층인 SSD, HDD에 액세스하는 것이 아니라서 데이터 검색의 성능을 높인다. 캐시의 데이터는 일반적으로 RAM과 같이 빠르게 액세스할 수 있는 하드웨어에 저장되며, 소프트웨어 구성 요소와 함께 사용될 수 있다. 캐시의 장점 - 애플리케이션 성능 개선 - 데이터베이스 비용 절감 - 백엔드 부하 감소 - 예측 가능한 성능 캐시가 사용되..

가비지 컬렉션이란

가비지 컬렉션이란 프로그램에서 더 이상 사용하지 않는 메모리를 자동으로 정리하는 것. => JAVA, C#, JAVASCRIPT 등이 있다. 가비지 컬렉션 방법 ✔️ 트레이싱 : 한 객체에 flag를 두고, 가비지 컬렉션 사이클마다 flag에 표시 후 삭제하는 mark and sweep 방법 객체에 in-use flag를 두고, 사이클마다 메모리 관리자가 모든 객체를 추적해서 사용 중인지 아닌지를 표시(mark)한다. 그리고 표시되지 않은 객체를 삭제(sweep)하는 단계를 통해 메모리를 해제한다. ✔️ 레퍼런스 카운팅 : 한 객체를 참조하는 변수의 수를 추적하는 방법 객체를 참조하는 변수는 처음에는 특정 메모리에 대해 레퍼런스가 하나뿐이지만, 변수의 레퍼런스가 복사될 때마다 레퍼런스 카운트가 늘어난다...

컴퓨터의 기본 구조, 중앙처리장치 CPU의 구성

컴퓨터의 기본 구조 하드웨어 = 입출력장치, 중앙처리장치(CPU), 기억장치 소프트웨어 = 하드웨어 위에서 제어하며 작업을 수행하는 프로그램 ✔️ 입출력장치 모니터, 스피커 등등 ✔️ 중앙처리장치 CPU의 구성 1. 산술/ 논리 연산 장치(ALU) = 레지스터에 저장된 데이터를 이용하여 덧셈, 곱셈 같은 산술 연산을 한다. 2. 제어장치 = 프로그램에 따라 명령과 제어 신호를 생성하여 각종 장치의 동작을 제어한다. 3. 레지스터 = CPU의 내부 메모리로서 CPU에서 사용하는 데이터를 일시적으로 저장하는 장소 (용량 적음) ✔️ 기억장치의 구성 - 주기억장치 = 데이터나 프로그램을 보관하기 위한 1차 기억 장치 / RAM & ROM / 시스템 꺼지면 지워짐 - 보조 기억장치 = 주기억장치보다 읽는 속도 ..

스레드란, 스레드 특징, 싱글 스레드, 멀티 스레드

스레드란? 명령어가 CPU를 통해서 수행되는 객체의 단위이다. 하나의 프로세스 내에는 1개 이상의 스레드가 반드시 존재하고, 이러한 스레드는 같은 프로세스에 있는 자원과 상태를 공유한다. 하나의 스레드가 수정한 메모리는 같은 메모리를 참조하는 스레드에 영향을 미친다. 예를 들어 하나의 스레드에서 오픈한 파일을 다른 스레드가 사용할 수 있다. 프로세스가 종료되면 그 프로세스에 속해있던 스레드도 함께 종료된다. ✔️ 스레드의 필요성 하나의 프로세스 안에서 여러 개의 루틴을 동시에 수행해서 수행 능력을 향상하려고 할 때 스레드를 사용하게 되는데, 독립적으로 수행하여 처리하려고 할 때 사용하게 됩니다. 즉 여러 개의 작업 단위로 구성된 프로그램에서 요청을 동시에 처리하기 위해서! ✔️ 스레드의 특징 - 프로세스..

forEach, map, filter, reduce 메서드 작동원리 정리

forEach, map, filter, reduce 는 모두 함수를 인자로 받는 고차함수이다. forEach 인자로 함수, 배열이 들어간다. (배열은 생략가능하다!) 배열안의 값, 인덱스 넘버, 배열이 차례대로 출력된다. (찍으면) const a = [10,11,12,13,14,15]; a.forEach(function(v,i){ console.log(v,i,this); },[1,2]) // 출력값 10 0 [ 1, 2 ] 11 1 [ 1, 2 ] 12 2 [ 1, 2 ] 13 3 [ 1, 2 ] 14 4 [ 1, 2 ] 15 5 [ 1, 2 ] map 새로운 배열이 나온다. const a = [10,11,12,13,14,15]; let answer = a.map((v,i) => { return v * ..

TIL) 토큰 기반 인증 절차, OAUTH 2.0 이란, JWT

토큰의 개념(Refresh Token과 Access Token의 차이) 쿠키 / 세션 방식과 토큰 방식의 차이 JWT의 작동원리 header, payload, signature의 역할 JWT가 어떻게 토큰의 변조를 판별하는 지 토큰 방식의 한계 Authentication과 Authorization의 차이 Authorization Code와 Access Token의 차이 Authorization 서버와 Resource 서버의 차이에 대해 이해할 수 있다. 토큰 기반 서버나 db에 유저 정보를 담는 세션 기반 인증 방식을 보완한 방식 토큰은 클라이언트에서 인증 정보를 보관한다. 여기서 토큰은 유저 정보를 암호화한 상태로 담을 수 있고, 암호화했기 때문에 클라이언트에 담을 수 있다. 대표적인 토큰 기반 인증 ..

TIL) 프론트엔드 개발자가 알아두면 좋을 웹 공격 (SQL injection, XSS, CSRF, Clickjacking )

OWASP (The Open Web Application Security Project) 전세계의 보완 전문가들이 웹의 보완에 대한 표준을 정의하고 이에 대해 기업과 개발자들에게 효율적인 정보를 제공하는 오픈소스 커뮤니티 OWASP TOP 10 : 3년 정도의 주기로 발표하는 웹 10대 취약점 1. SQL injection 공격 : 데이터 베이스에서 임의의 SQL문을 실행할 수 있도록 명령어를 삽입하는 공격 유형 👉 응용 프로그램의 보안상의 허점을 이용해 데이터베이스를 비정상적으로 조작하여, 기록이 삭제되거나 데이터가 유출될 수 있다. 공격 시나리오 1. 공격자가 악의적인 SQL문을 넣어 서버에 전송한다. 2. 서버가 해당 SQL문을 기존 SQL에 삽입해서 데이터베이터스 쿼리를 보냄 👇 정상 SELECT..

TIL) Cookie 정의, Session 정의, 쿠키와 세션의 차이

인증에 필요한 기본 지식 Cookie Cookie 배경 쇼핑몰에서 살 아이텀을 장바구니에 넣고 여기저기 돌아다녀도 장바구니 안의 아이템은 유지가 된다. HTTP는 stateless (무상태성)인데 어떻게 정보가 유지 될까? 바로 쿠키 Cookie 덕분이다! 🍪 Cookie 란? 어떤 웹 사이트에 들어갔을 때, 서버가 일방적으로 클라이언트에 전달하는 작은 데이터 서버에서 클라이언트에 영속성있는 데이터를 저장하는 방법이다. 그러므로 서버가 원한다면 서버는 클라이언트의 쿠키를 이용하여 데이터를 가져올 수 있다. 해당 도메인에 대해 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달한다. 그러므로 쿠키를 이용하는 것은 단순히 서버에서 클라이언트에 쿠키를 전송하는 것만 의미하지 않고 클..

TIL) 암호화, hashing이란, 해싱이란, salt 란?

암호화는 일련의 정보를 임의의 방식을 사용하여 다른 형태로 변환하여 해당 방식에 대한 정보를 소유한 사람을 제외하고 이해할 수 없도록 '알고리즘'을 이용해 정보를 관리하는 과정이다. Encryption 예 const shiftBy = function(content, offset) { return content.split('').map(function(letter) { return String.fromCharCode(letter.charCodeAt() + offset); }).join(''); } shiftBy('apple',2) // 출력 'crrng' shiftBy('crrng',-2) // 출력 'apple' Hashing 이란? 어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것 ..