프로시저 (Procedure)

프로시저 (Procedure) 데이터베이스 프로시저(Database Procedure)는 데이터베이스 내에 저장되고 실행되는 일련의 SQL 문들의 집합으로, 자주 사용하는 SQL 명령어들을 하나의 작은 프로그램으로 미리 작성해두고 필요할 때 호출하여 사용하는 것이다. SQL Server에서의 프로시저 예시: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 -- 주문 처리를 위한 저장 프로시저 생성 CREATE PROCEDURE ProcessOrder @OrderID int, @CustomerID int, @TotalAmount decimal(10,2) AS BEGIN -- 트랜잭션 시작 BEGIN TRANSACTION TRY -- 주문 정보 입력 INSERT INTO Orders (OrderID, CustomerID, OrderDate, TotalAmount) VALUES (@OrderID, @CustomerID, GETDATE(), @TotalAmount) -- 재고 수량 업데이트 UPDATE Inventory SET Quantity = Quantity - 1 WHERE ProductID IN ( SELECT ProductID FROM OrderDetails WHERE OrderID = @OrderID ) -- 고객 포인트 업데이트 UPDATE Customers SET Points = Points + (@TotalAmount * 0.01) WHERE CustomerID = @CustomerID -- 트랜잭션 완료 COMMIT TRANSACTION CATCH -- 오류 발생 시 롤백 ROLLBACK TRANSACTION -- 오류 정보 반환 SELECT ERROR_MESSAGE() AS ErrorMessage END END -- 프로시저 사용 예시 EXEC ProcessOrder @OrderID = 1001, @CustomerID = 500, @TotalAmount = 150000 프로시저의 주요 특징과 장점 성능 최적화 프로시저는 최초 실행 시 컴파일되어 캐시에 저장되므로, 반복 실행 시 더 빠른 성능을 제공한다: ...

October 24, 2024 · 4 min · Me

keyword

Keyword SQL(Structured Query Language)는 데이터베이스를 관리하고 조작하기 위한 표준 언어로, 다양한 키워드를 통해 데이터 정의, 조작, 제어, 트랜잭션 관리 등을 수행한다. 데이터 조회 (Query) 키워드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 -- SELECT: 데이터를 조회하는 기본 키워드 -- 지정된 컬럼의 데이터를 결과셋으로 반환 SELECT employee_id, first_name, salary FROM employees; -- FROM: 데이터를 가져올 테이블을 지정 -- 여러 테이블을 콤마로 구분하거나 JOIN을 사용할 수 있음 SELECT * FROM employees, departments; -- DISTINCT: 결과에서 중복된 행을 제거하는 데 사용 -- 기본 DISTINCT 사용 -- 부서별 unique한 직무 목록 조회 SELECT DISTINCT job_id FROM employees; -- 여러 컬럼에 DISTINCT 적용 -- 부서와 직무의 unique한 조합 조회 SELECT DISTINCT department_id, job_id FROM employees; -- COUNT와 함께 사용 -- 회사에 존재하는 직무 개수 조회 SELECT COUNT(DISTINCT job_id) as unique_jobs FROM employees; -- GROUP BY와 함께 사용 SELECT department_id, COUNT(DISTINCT job_id) as job_types FROM employees GROUP BY department_id; 결과 제한 1 2 3 4 5 6 7 8 9 10 11 12 13 14 -- LIMIT - 반환되는 결과의 최대 행 수를 제한합니다. SELECT * FROM employees LIMIT 10 -- 상위 10개 행만 반환 -- OFFSET - 결과의 시작 위치를 지정합니다. LIMIT와 함께 자주 사용됩니다. SELECT * FROM employees LIMIT 10 OFFSET 20 -- 21번째부터 30번째 행을 반환 -- FETCH - SQL 표준의 LIMIT와 유사한 기능을 합니다. SELECT * FROM employees FETCH FIRST 10 ROWS ONLY -- 페이지당 10개 항목, 3번째 페이지 조회 SELECT * FROM products ORDER BY name LIMIT 10 OFFSET 20; -- (페이지 번호 - 1) * 페이지 크기 = OFFSET 조건 연산자 키워드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 -- WHERE: 조건절을 지정하여 특정 조건을 만족하는 데이터만 조회 -- AND, OR을 사용하여 여러 조건 조합 가능 SELECT * FROM employees WHERE salary > 50000 AND department_id = 10; -- IN: 값 목록 중 포함 여부 -- BETWEEN: 범위 조건 -- LIKE: 패턴 매칭 -- IS NULL: NULL 값 확인 SELECT * FROM employees WHERE department_id IN (10, 20, 30) AND salary BETWEEN 40000 AND 60000 AND first_name LIKE '김%' AND manager_id IS NOT NULL; -- CASE - 조건에 따라 다른 값을 반환합니다. -- WHEN - CASE 문에서 조건을 지정합니다. -- THEN - 조건이 참일 때 반환할 값을 지정합니다. -- ELSE - 모든 조건이 거짓일 때 반환할 값을 지정합니다. SELECT name, CASE WHEN age < 20 THEN 'Young' WHEN age < 60 THEN 'Adult' ELSE 'Senior' END as age_group FROM users; 정렬과 그룹화 키워드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -- GROUP BY: 지정된 컬럼을 기준으로 데이터를 그룹화 -- 주로 집계 함수와 함께 사용 SELECT department_id, AVG(salary) FROM employees GROUP BY department_id; -- ORDER BY: 결과를 정렬 -- ASC(오름차순), DESC(내림차순) 지정 가능 SELECT * FROM employees ORDER BY salary DESC, first_name ASC; -- HAVING: GROUP BY로 그룹화된 데이터에 대한 조건 지정 -- WHERE는 개별 행에 대한 조건, HAVING은 그룹에 대한 조건 SELECT department_id, AVG(salary) FROM employees GROUP BY department_id HAVING AVG(salary) > 50000; 조인(Join) 관련 키워드 JOIN은 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법이다. JOIN을 사용하면 여러 테이블의 데이터를 하나의 결과 집합으로 결합할 수 있다. ...

October 24, 2024 · 15 min · Me

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