분류 전체보기 9

구현이란?

머릿속에 있는 알고리즘을 소스 코드로 바꾸는 과정기본적으로는 어떤 문제를 풀든 간에 소스 코드를 작성하게 되고, 작성된 코드는 시간/메모리 제한 사항울 충족해야 한다. 그러므로 이 유형은 모든 유형의 문제를 포함하는 개념이기도 한다. 또한 문제를 잘 풀이하기 위해서는 프로그래밍 언어에 능숙하고 코드 작성 속도가 좋은 것이 유리하므로 피지컬을 요구한다고 볼 수 있다.이 책에서는 구현 유형을 별도의 챕터로 분류하여 알고리즘을 설계하고 제시된 조건에 맞게 코드로 작성하기 위해 알아야 내용들을 다룬다.구현 유형에는 완전 탐색, 시뮬레이션 유형이 존재한다.완전 탐색 : 모든 경우의 수를 주저 없이 다 계산하는 방법시뮬레이션 : 문제에서 제시한 알고리즘을 한 단계씩 차례대로 직접 수행구현 시 고려해야 할 제한 사항..

알고리즘 2025.10.03

Websocket과 Socket.IO 개념 정리

Websocket이란?Client와 Server 간의 실시간 양방향 통신을 위한 프로토콜이다.Socket IO란?Client와 Server가 Low-Latency(낮은 지연 시간), Bidirectional(양방향 소통), Event-Based(이벤트 기반)으로 통신할 수 있게 Websocket 프로토콜을 기반으로 만들어진 라이브러리다.Socket IO 통신 방식기본적인 통신 방법on 메서드에서 이벤트를 감지하고자 하는 Event Name을 미리 등록한다.Event Name과 함께 전달하고자 하는 데이터와 Callback 함수를 emit 메서드로 이벤트를 발생시켜 전송한다.의도적으로 Callback 함수를 전달하지 않으므로써 단방향 통신으로 처리되게 할 수도 있다.on 메서드를 통해 미리 등록된 Even..

통신 2025.09.12

그리디 알고리즘(탐욕법)이란?

현재 상황에서 지금 당장 좋은 것만 고르는 방법그리디 알고리즘 유형의 문제는 창의력, 즉 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구하며, 문제의 유형이 매우 다양하다. 그래서 사전 지식 없이도 풀이가 가능성이 높은 유형이지만, 정렬/최단 경로 탐색 등과 같이 알고리즘을 미리 알고 있어야 하는 문제에 적용되어 출제되기도 한다.이 유형은 기준에 따라 좋은 것을 선택하는 알고리즘이므로 가장 큰 순서대로, 가장 작은 순서대로와 같은 기준을 문제에서 알게 모르게 제시해준다. 대체로 이 기준은 정렬 알고리즘을 사용했을 때 만족시킬 수 있으므로 정렬 알고리즘과 자주 짝을 이뤄 출제된다.다만 빠르게 떠올린 아이디어인만큼 그 정당성 분석이 중요하다. 아래와 같은 풀이 방법을 통해 항상 최적의 해를..

알고리즘 2025.09.02

시간 복잡도와 연산량

시간 복잡도와 연산량알고리즘 문제를 풀이할 때, 제한 조건에 시간 제한이라는 것이 존재한다.작성한 알고리즘이 의도한 결과를 잘 만들어 낼 수 있다고 해도 제한 시간 안에 결과를 내지 못하면 안된다는 것이다. 그러기 때문에 우리는 알고리즘을 작성하기 전에 내가 작성할 알고리즘의 시간 복잡도를 계산하여 제한 시간 안에 결과를 만들어 낼 수 있는지 검증해야 한다.이를 위해서는 내가 사용할 라이브러리나 알고리즘의 시간 복잡도를 알고 있어야 한다. 그러면 이들을 종합한 시간 복잡도를 확인하여 내가 작성할 알고리즘이 제한 시간 범위 안에 있다는 것을 검증할 수 있게 된다.빅오(Big-O) 표기법알고리즘의 입력 크기가 충분히 클 때, 최악의 경우를 기준으로 가장 영향력 있는 항만 남겨서 표기하는 방법알고리즘의 시간 ..

알고리즘 2025.09.02

JWT 패키지 비교

JWT 패키지 비교jsonwebtoken저수준 라이브러리로 JWT의 생성, 검증, 디코드 로직을 직접 구현해야 한다.장점: 가볍고 프레임워크에 의존하지 않으므로 Node 환경이면 어디서나 사용할 수 있다.단점: NestJS가 가진 강점을 활용할 수 없음. 검증/오류 처리를 직접 구현해야 한다.참고: 기본 알고리즘은 HS256(대칭키)이나 RS/ES 계열(비대칭키)도 지원한다.예외: TokenExpiredError, JsonWebTokenError 등 구체적 예외가 발생한다.사용 예시const jwt = require('jsonwebtoken');const token = jwt.sign({ sub: 1, email: 'a@b' }, process.env.JWT_SECRET, { expiresIn: '1h'..

2025.08.29

Encryption 개념 정리

Encryption비밀번호 등 민감 정보 보호에는 주로 해시 알고리즘을 사용하며, 대표적으로 bcrypt가 많이 쓰인다.Hash Function해시 알고리즘은 임의의 입력값을 빠른 데이터 검색을 목적으로 어떤 수학적 연산을 통해 고정된 길이의 값으로 변환하는 단방향 알고리즘이다.해시 함수를 통해 변환된 값를 다이제스트(Digest)라고 하며, 같은 입력값에 대해서 항상 동일한 결과값을 보장한다.해시 함수를 통해 변환된 값은 복호화할 수 없다.bcrypt는 해커가 레인보우 테이블이나 브루트포스 공격을 하지 못하도록 일부러 느리게 동작하게 설계된 해시 알고리즘이다.md5와 sha1은 보안상 취약하여 실무에서는 사용되지 않는다.Hash Collision알고리즘을 통해 고정된 값으로 변환한다는 해시의 특징을 고..

보안 2025.08.06

JWT 구조

JWT 구조Header, Payload, Signature로 구성되며, 각각을 "."으로 연결한 구조HeaderJSON 형식의 토큰 정보를 BASE 64로 인코딩한 값예시{ "typ": "JWT", "alg": "HS256"}typ토큰이 어떤 종류의 객체인지 식별하며 생략 가능한 헤더. 수신자가 토큰을 올바르게 처리할 수 있도록 힌트를 제공한다.JWT: JSON Web Token. 토큰이 JWT 표준을 따르고 있음을 나타낸다.JWS: JSON Web Signature. 서명된 구조의 토큰임을 나타낸다. 토큰의 무결성을 보장하며, 실무에서 대부분의 JWT는 JWS 구조를 사용한다.JWE: JSON Web Encryption. 암호화된 구조의 토큰임을 나타낸다. 토큰의 기밀성을 보장한다.JOSE: JSO..

2025.08.06

JWT 개념 정리

JWTJWT는 서버가 생성한 인증 정보를 JSON 형태로 담아 Base64로 인코딩한 토큰이며, 클라이언트에 저장되어 인증에 사용되는 방식이다.JWT의 특징JWT는 마이크로서비스 아키텍처나 수평적 확장이 중요한 서비스에 적합하다.JWT는 Header, Payload, Signature로 구성되어 있으며, Base 64로 인코딩 되어 있다.JWT는 서버에서 생성되며, 클라이언트에서 저장된다.클라이언트가 JWT를 포함해 요청하면, 서버는 토큰만으로 사용자를 식별할 수 있다.JWT는 DB에 저장되지 않고, Signature 값을 이용해서 검증할 수 있다. 그래서 매번 DB를 조회할 필요가 없다.인증 정보가 토큰에 담겨있고(Stateless), 클라이언트에서 토큰을 저장하기 때문에 정보 유출의 위험이 있다.DB..

2025.08.04

Session 개념 정리

Session이란?Session은 서버가 생성한 세션 ID를 통해 사용자의 인증 정보를 서버 저장소에 보관하고 관리하는 인증 방식이다.Session의 특징세션은 단일 서버에서 운영되는 서비스나 실시간으로 사용자의 상태를 관리해야 하는 서비스에 적합하다.서버에서 생성된 특수한 ID 값의 세션 ID가 클라이언트의 쿠키에 저장된다.클라이언트에서 세션 ID와 함께 요청을 보내어 서버가 사용자를 식별할 수 있다.세션 인증 정보 데이터는 서버에 저장된다(Stateful).서버 저장소에 세션 정보를 보관하므로, 로그아웃이나 권한 변경 시 즉시 반영할 수 있다.세션 만료 또는 삭제 시, 해당 사용자의 인증 상태를 즉시 무효화할 수 있다.세션은 인증 정보를 서버에서 보관하므로, 클라이언트 측의 세션 ID만으로는 정보가 ..

2025.08.04
반응형