DB_3 SQL로 논리적인 기능을 가진 모듈 만들기

백소현·2025년 5월 13일

DB

목록 보기
3/5
post-thumbnail

Stored Function

stored function

  • 사용자가 정의한 함수

  • DBMS에 저장되고 사용되는 함수

  • SQL에서 select, insert, update, delete statement에서 사용할 수 있음

    	→ delimiter $$
    
    	CREATE FUNCTION 함수_이름()
    
    	RETURNS 자료형
    
    	NO SQL (→ MySQL만 해당)
    
    	BEGIN
    
    		함수 내용
    
    	RETURN ();
    
    	END
    
    	$$
    
    	delimiter ;
  • loop를 돌면서 반복적인 작업 수행 가능

  • case 키워드로 값에 따른 분기 처리 가능

  • 에러 핸들링하거나 에러를 일으키는 등의 다양한 동작 정의 가능

  • stored function 삭제 → DROP FUNCTION stored_function_name;

등록된 stored funtion 파악하기

  • SHOW FUNCTION STATUS where DB = ‘…‘; → 해당 데이터베이스에 있는 사용자 정의 함수들 알려줌
  • SHOW CREATE FUNCTION ‘…’; → 해당 함수의 정보 알려줌

stored procedure

stored procedure

  • 사용자가 정의한 프로시저

  • RDBMS에 저장되고 사용되는 프로시저

  • 구체적인 하나의 태스크를 수행

    	→ delimiter $$
    
    	CREATE PROCEDURE 이름(파라미터-IN, OUT)
    
    	BEGIN
    
    		내용
    
    	END
    
    	$$
    
    	delimiter ;
  • 조건문을 통해 분기 처리 가능

  • 반복문 수행 가능

  • 에러 핸들링, 에러 일으키는 등의 다양한 로직 정의 가능

stored procedure와 stored function의 차이

  1. create 문법에서의 차이
  2. return 키워드로 값 반환
  3. 파라미터로 값 반환
  4. 값을 꼭 반환해야 하는지
  5. SQL statement에서 호출
  6. transaction 사용
  7. 주된 사용 목적


3-tier architecture에서 stored procedure의 의미

3-tier architecture

  1. presentation tier : 사용자에게 보여지는 부분을 담당하는 tier

  2. Logic tier : 서비스와 관련된 기능과 정책 등등 비즈니스 로직을 담당하는 tier

  3. Data tier : 데이터를 저장하고 관리하고 제공하는 역할을 하는 tier → 비즈니스 로직 구현

    → stored procedure : RDBMS에 저장되고 사용되는 프로시저. 비즈니스 로직 구현에 사용

stored procedure 장점

  • application에 transparent 하다 → 새로운 로직으로 바꿔줄 때 내용만 바꿀 수 있음
  • network traffic을 줄여서 응답 속도를 향상 시킬 수 있다 → 비즈니스 로직이 RDBMS에 있으면 프로시저를 호출하고 응답할 때만 traffic 발생
  • 여러 서비스에서 재사용 가능하다 → 같은 DB에 대해서 여러 개의 서비스가 접근 가능. 이때 서비스마다 로직을 구현하는 것보다 RDBMS에 로직을 구현하면 서비스 각각은 로직을 호출하기만 하면 됨
  • 민감한 정보에 대한 접근을 제한할 수 있다 → 프로시저를 통해서 서비스 로직을 구현할 수 있도록

stored procedure 단점

  • 유지 관리 보수 비용이 커짐
  • DB 서버 추가가 간단하지 않음 → traffic이 증가하면 db의 부담이 증가
  • 프로시저가 항상 transparent하진 않음 → 이름을 바꾸는 경우
  • 재사용 가능이 양날의 검이 될 수 있음
  • 프로시저가 100% 보안 보장은 아님

trigger

trigger의 의미

  • 데이터베이스에서 어떤 이벤트가 발생했을 때 자동적으로 실행되는 프로시저

  • 데이터에 변경이 생겼을 때 이를 계기로 자동적으로 실행되는 프로시저를 의미

    	→ delimiter $$
    
    	CREATE TRIGGER 이름
    
    	BEFORE UPDATE → 업데이트가 발생할 때 마다 트리거가 동작하도록(업데이트 전에)
    
    	ON users FOR EACH ROW → users 테이블에 대해 업데이트가 발생했을 때, 업데이트 row에 대해 실행
    
    	BEGIN
    
    		내용
    
    	END
    
    	$$
    
    	delimiter ;
  • 가시적이지 않아서 개발, 관리, 문제 파악이 힘들 수 있음

  • 많이 사용하면 연속적인 트리거가 발생해서 파악이 힘들 수 있음

  • 과도한 트리거 사용으로 응답이 느려질 수 있음

  • 디버깅이 어려움

  • 문서 정리가 중요

0개의 댓글