Cardinality

Cardinality Cardinality는 데이터베이스 분야에서 주로 두 가지 의미로 사용된다. 테이블 간의 관계에서의 Cardinality 이는 두 엔티티 간의 최대 연관성을 나타낸다. 주요 유형은 다음과 같습니다: 1:1 (일대일) 관계: 예를 들어, 사원과 사원증의 관계 1:N (일대다) 관계: 예를 들어, 교수와 학생의 관계 N:M (다대다) 관계: 예를 들어, 학생과 강좌의 관계 컬럼에 있는 고유한 값의 Cardinality 이는 특정 컬럼에 존재하는 고유한 값의 개수를 의미한다. Cardinality의 정도에 따라 다음과 같이 분류할 수 있다: 높은 Cardinality: 주민등록번호, 이메일 주소와 같이 대부분의 값이 고유한 경우 중간 Cardinality: 우편번호, 도시 이름과 같이 일부 값이 고유하지만 많은 값이 반복되는 경우 낮은 Cardinality: 성별, 상태 코드와 같이 적은 수의 고유 값을 포함하는 경우 데이터베이스 성능에 여러 가지 중요한 영향을 미친다. ...

October 22, 2024 · 2 min · Me

HATEOAS (Hypermedia As The Engine Of Application State)

HATEOAS (Hypermedia As The Engine Of Application State) 서버가 클라이언트에게 하이퍼 미디어를 통해 정보를 동적으로 제공해주는 것을 말한다. RESTful API 설계의 중요한 개념으로, 클라이언트와 서버 간의 동적이고 유연한 상호작용을 가능하게 하는 방식. 하이퍼미디어를 애플리케이션의 상태를 관리하기 위한 메커니즘으로 사용한다. 이는 클라이언트가 서버와 동적으로 상호작용할 수 있도록 하며, API 응답에 관련 리소스에 대한 링크를 포함시키는 방식으로 구현된다. 전통적인 API와 HATEOAS API의 차이점 기존 API: 1 2 3 4 5 { "orderId": "123", "total": 100, "status": "pending" } HATEOAS API: ...

October 19, 2024 · 4 min · Me

멱등성 (Idempotency)과 안전한 메서드 (Safe Methods)의 비교

멱등성 (Idempotency)과 안전한 메서드 (Safe Methods)의 비교 멱등성과 안전한 메서드는 HTTP 메서드의 중요한 특성으로, 서버의 상태 변화와 관련이 있다. 멱등성(Idempotency)은 동일한 요청을 여러 번 수행해도 서버의 상태가 동일하게 유지되는 특성을 말한다. 즉, 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 유지된다. 안전한 메서드(Safe Methods)는 서버의 상태를 변경하지 않는 HTTP 메서드를 의미한다. 이는 주로 리소스를 조회하는 용도로 사용되며, 서버의 데이터나 상태를 수정하지 않는다. ...

October 19, 2024 · 1 min · Me

안전한 메서드 (Safe Methods)

안전한 메서드 (Safe Methods) 서버의 상태를 변경하지 않는 HTTP 메서드. 특징 리소스 변경 없음: 요청을 여러 번 보내도 서버의 상태가 동일하게 유지됩니다. 읽기 전용 작업: 주로 데이터를 조회하는 용도로 사용됩니다. 부작용 없음: 서버의 상태를 변경하지 않으므로 안전하게 여러 번 호출할 수 있습니다. 중요성 신뢰성: 클라이언트가 서버의 상태를 변경하지 않고 안전하게 정보를 요청할 수 있습니다. 캐싱 최적화: 안전한 메서드는 캐시하기에 적합하여 성능 향상에 도움이 됩니다. 사용자 경험: 브라우저가 안전한 메서드를 자유롭게 호출할 수 있어 프리페칭 등의 기능을 구현할 수 있습니다. 구현 방법 읽기 전용 로직: 안전한 메서드 구현 시 서버의 상태를 변경하지 않는 로직만 포함해야 합니다. 멱등성 보장: 안전한 메서드는 멱등성도 가져야 하므로, 여러 번 호출해도 동일한 결과를 반환하도록 구현합니다. 예외 처리: 안전한 메서드가 서버 상태를 변경하지 않도록 주의깊게 예외를 처리해야 합니다. 이점 성능 최적화: 안전한 메서드는 캐싱이 가능하여 네트워크 트래픽을 줄이고 응답 시간을 개선할 수 있습니다. 보안 강화: 데이터를 변경하지 않으므로 무단 수정이나 삭제의 위험이 없습니다. 확장성: 안전한 메서드는 프록시나 중간 계층에서 자유롭게 처리할 수 있어 시스템 확장성이 향상됩니다. HTTP 메서드별 안전성 GET: 안전한 메서드. 리소스를 조회하는 용도로 사용됩니다. HEAD: 안전한 메서드. GET과 유사하지만 헤더 정보만 반환합니다. OPTIONS: 안전한 메서드. 서버가 지원하는 메서드 정보를 반환합니다. POST: 안전하지 않은 메서드. 새로운 리소스를 생성하거나 데이터를 제출합니다. PUT: 안전하지 않은 메서드. 리소스를 생성하거나 대체합니다. DELETE: 안전하지 않은 메서드. 지정된 리소스를 삭제합니다. PATCH: 안전하지 않은 메서드. 리소스의 부분적인 수정에 사용됩니다.— 참고 및 출처

October 18, 2024 · 2 min · Me

Cookies

Cookies HTTP 쿠키는 웹 서버가 사용자의 브라우저에 저장하는 작은 텍스트 데이터로, 사용자 세션 관리와 개인화된 경험 제공을 위해 설계되었다. HTTP의 무상태(Stateless) 특성을 보완하여 연속적인 요청 간 상태 유지가 가능하게 한다. 정의 및 목적 데이터 저장 형식: 키=값 쌍으로 구성된 텍스트 파일. 동작 원리: 서버 → Set-Cookie 헤더로 브라우저에 전송. 브라우저 → 이후 요청 시 Cookie 헤더에 포함. 1 2 3 4 5 6 7 // 서버 응답 예시 HTTP/2.0 200 OK Set-Cookie: session_id=abc123; Secure; HttpOnly // 클라이언트 요청 예시 GET /dashboard HTTP/2.0 Cookie: session_id=abc123 주요 용도 용도 설명 예시 세션 관리 로그인 상태, 장바구니 정보 유지 온라인 쇼핑몰 결제 과정 개인화 언어 설정, 테마 저장 다크 모드 자동 적용 트래킹 사용자 행동 분석 및 광고 타겟팅 구글 애널리틱스 세션 관리: 1 2 3 4 5 6 7 8 9 10 // 로그인 세션 관리 app.post('/login', (req, res) => { // 사용자 인증 후 const sessionId = generateSessionId(); res.cookie('sessionId', sessionId, { httpOnly: true, secure: true, maxAge: 24 * 60 * 60 * 1000 // 24시간 }); }); 개인화: 1 2 3 4 // 사용자 선호도 저장 function saveUserPreference(theme) { document.cookie = `theme=${theme}; max-age=31536000; path=/`; } 트래킹: 1 2 3 4 5 6 // 방문자 추적 function trackPageVisit() { let visits = getCookie('visitCount') || 0; visits++; document.cookie = `visitCount=${visits}; max-age=31536000`; } 쿠키의 구성 요소 이름=값: 쿠키는 기본적으로 이름과 값의 쌍으로 이루어진 문자열. 만료 날짜(Expires) 또는 최대 수명(Max-Age): 쿠키의 유효 기간을 지정하며, 이 기간이 지나면 브라우저는 해당 쿠키를 삭제한다. 도메인(Domain)과 경로(Path): 쿠키가 적용될 도메인과 경로를 지정하여 특정 범위에서만 쿠키를 전송하도록 제한할 수 있다. 보안 속성: Secure 속성을 설정하면 쿠키는 HTTPS 연결에서만 전송되며, HttpOnly 속성을 설정하면 JavaScript와 같은 클라이언트 측 스크립트에서 쿠키에 접근할 수 없다. 주요 속성 속성 설명 예시 Name 쿠키의 이름 sessionId Value 쿠키의 값 abc123xyz Domain 쿠키가 유효한 도메인 .example.com Path 쿠키가 유효한 경로 / Expires/Max-Age 쿠키 만료 시간 Wed, 21 Oct 2024 Secure HTTPS에서만 전송 Secure HttpOnly JS에서 접근 불가 HttpOnly SameSite CSRF 방지 설정 Strict, Lax, None Name과 Value: 1 2 // 쿠키의 기본 구성 document.cookie = "username=John Doe"; // 이름=값 형태 Expires/Max-Age: 1 2 3 4 // 만료 시간 설정 document.cookie = "username=John Doe; expires=Thu, 18 Dec 2025 12:00:00 UTC"; // 또는 Max-Age 사용 document.cookie = "username=John Doe; max-age=3600"; // 1시간 후 만료 Domain과 Path: 1 2 // 특정 도메인과 경로에서만 사용 가능한 쿠키 document.cookie = "user=John; domain=example.com; path=/blog"; Secure와 HttpOnly: 1 2 3 4 // 보안 관련 설정 // Secure: HTTPS에서만 전송 // HttpOnly: JavaScript에서 접근 불가 response.setHeader('Set-Cookie', 'sessionId=abc123; Secure; HttpOnly'); 주요 유형별 특징 기본 분류 유형 저장 위치 수명 사용 사례 세션 쿠키 브라우저 메모리 브라우저 종료 시 삭제 로그인 세션 지속형 쿠키 디스크 Expires/Max-Age 지정 자동 로그인 서드파티 쿠키 타 도메인 설정 장기적 크로스 사이트 광고 트래킹 특수 쿠키 (보안 리스크) 슈퍼쿠키: 일반 삭제로 제거 불가능 플래시 쿠키: Adobe Flash 기반, 브라우저 외부 저장 좀비 쿠키: 삭제 후 자동 재생성 쿠키 작동 방식 쿠키 설정 과정 클라이언트가 웹사이트 방문 서버가 Set-Cookie 헤더로 쿠키 전송 브라우저가 쿠키 저장 이후 요청시 자동으로 쿠키 전송 쿠키 전송 과정 브라우저가 HTTP 요청 준비 유효한 쿠키 확인 Cookie 헤더에 쿠키 포함 서버로 요청 전송 쿠키 관리 및 보안 HTTP 쿠키의 보안 속성은 XSS(교차 사이트 스크립팅), CSRF(교차 사이트 요청 위조) 등 웹 공격을 방어하고 사용자 데이터를 보호하기 위해 설계되었다. ...

October 18, 2024 · 6 min · Me

서브넷팅 (Subnetting)

서브넷팅 (Subnetting) 서브넷팅(Subnetting)은 네트워크를 더 작은 단위의 네트워크로 분할하는 기술이다. 이 기술은 IP 주소의 효율적인 사용과 네트워크 관리를 개선하기 위해 사용된다. 서브넷팅은 하나의 IP 클래스를 효율적으로 이용하기 위해 Host ID 구간을 분할하여 원래 정의된 Network ID와 함께 Network ID로 사용하는 네트워크 관리 기법이다. 서브넷팅을 통해 분할된 네트워크를 서브넷(Subnet)라고 한다. 주요 목적 IP 주소 낭비 방지 브로드캐스트 도메인의 크기 축소 네트워크 성능 향상 보안성 강화 서브넷팅의 장점 네트워크 관리 용이성 향상 고급 네트워크 보안 구현 가능 네트워크 트래픽 감소 ISP로부터 추가 IP 주소 요청 필요성 감소 서브넷 (Subnet) 서브넷은 ‘Sub Network’의 줄임말로, 더 큰 네트워크의 논리적인 부분집합을 의미한다. 이는 마치 큰 건물을 여러 개의 사무실로 나누는 것과 비슷한데, 각 사무실(서브넷)은 자신만의 공간을 가지면서도 전체 건물(네트워크)의 일부로 기능한다. ...

October 17, 2024 · 6 min · Me

DNS 캐싱 (DNS Caching)

DNS 캐싱 (DNS Caching) DNS 캐싱은 이전에 조회한 도메인 이름과 IP 주소의 매핑 정보를 임시로 저장하는 메커니즘이다. 이를 통해 매번 전체 DNS 조회 과정을 거치지 않고도 빠르게 도메인 이름을 IP 주소로 변환할 수 있다. DNS 캐싱은 인터넷 성능 최적화에 중요한 역할을 하며, 적절한 관리를 통해 효율적이고 안전한 네트워크 환경을 유지할 수 있다. 작동 방식 DNS 서버나 클라이언트 장치가 도메인 이름에 대한 IP 주소를 조회하면, 그 결과를 캐시에 저장한다. 이후 동일한 도메인에 대한 요청이 있을 때, 캐시된 정보를 사용하여 빠르게 응답한다. 캐시 위치 DNS 캐싱 (DNS Caching)은 브라우저, 운영체제, 라우터, ISP 의 DNS 서버 등 다양한 단계에서 발생한다. ...

October 17, 2024 · 2 min · Me

Packet

Packet (패킷, 네트워크 패킷) 패킷은 네트워크에서 데이터를 주고받을 때 사용되는 형식화된 데이터 블록이다. 주요 목적은 다음과 같다: 효율적인 데이터 전송 네트워크 대역폭의 효율적 사용 오류 검출 및 복구 용이성 네트워크 혼잡 방지 패킷을 사용하는 이유는? 패킷이 모두 대상에 도착하는 한 동일한 대상에 대해 서로 다른 네트워크 경로를 사용할 수 있음을 의미한다. 특정 프로토콜에서 패킷은 각 패킷이 다른 경로를 사용하여 도착하더라도 올바른 순서로 최종 목적지에 도착해야 한다. 여러 컴퓨터의 패킷이 기본적으로 임의의 순서로 동일한 선로를 통해 이동할 수 있다. 동일한 네트워킹 장비를 통해 동시에 여러 연결을 수행할 수 있다. 그 결과로 수십억 개의 장치가 인터넷에서 동시에 데이터를 교환할 수 있다. 패킷의 구조 패킷은 일반적으로 세 부분으로 구성된다: ...

October 16, 2024 · 2 min · Me

Routing

Routing 데이터 패킷이 출발지에서 목적지까지 가장 효율적인 경로로 전달되도록 하는 과정. 네트워크 계층(3계층)에서 이루어지는 핵심 기능으로, 라우터가 패킷의 목적지 IP 주소를 확인하고 최적의 경로를 결정한다. 주요 특징 경로 결정: 라우팅 테이블을 참조하여 최적의 경로를 선택한다. 네트워크 연결: 서로 다른 네트워크를 연결하여 통신을 가능하게 한다. 패킷 전달: 선택된 경로를 통해 패킷을 다음 홉으로 전달한다. 중요성 효율적인 데이터 전송을 가능하게 한다. 네트워크의 안정성과 확장성을 향상시킨다. 트래픽 관리와 로드 밸런싱에 기여한다. 라우팅 방식 정적 라우팅: 관리자가 수동으로 라우팅 테이블을 구성한다. ...

October 16, 2024 · 3 min · Me

Network Hop

Network Hop 네트워크 홉(Network Hop)은 데이터 패킷이 출발지에서 목적지로 이동하는 과정에서 거치는 네트워크 장비(주로 라우터)의 횟수를 의미한다. 홉은 데이터 패킷이 한 네트워크 지점에서 다음 지점으로 이동할 때마다 발생합니다. 각 홉은 패킷이 목적지에 도달하기 위해 거치는 중간 단계를 나타낸다. 주요 역할은 다음과 같다: 경로 결정: 각 홉에서 라우터는 패킷의 다음 목적지를 결정한다. 네트워크 성능 측정: 홉 수는 네트워크의 복잡성과 데이터 전송 경로의 길이를 나타낸다. 패킷 전달: 각 홉은 패킷을 다음 네트워크 장비로 전달하는 역할을 한다. 홉 카운트(Hop Count) 홉 카운트는 패킷이 출발지에서 목적지까지 거치는 홉의 총 개수를 의미한다. 이는 네트워크 경로의 길이를 측정하는 중요한 지표이다. ...

October 16, 2024 · 2 min · Me