본문 바로가기

Develop/Database17

동시성과 정합성을 어떻게 관리할 수 있을까? 이전에 동시성에 대한 내용을 다룬적 있다. https://devkingdom.tistory.com/303 동시성 프로그래밍에 대하여 백엔드 개발자라면 동시성을 고려한 프로그래밍을 할 줄 알아야한다. 다만 아직 학생이거나 주니어 레벨에서는 이러한 동시성을 이해하기가 쉽지는 않다. 프론트 단의 개발과는 다르게 백엔드 devkingdom.tistory.com 관련한 내용을 옛자료를 보고 정리를 해놔서... 요즘 대체적으로 많이 쓴느 개발 환경인 Spring JPA 에서는 어떻게 적용하면 될지를 정리해야겠다는 생각을 했었다. 우선 상황을 가정해보자. 상품 구매 시스템을 만든다고 가정하고, 인기 있는 상품을 조회하는 기능을 개발한다고 가정하자. 상품 구매 -> 이미 구매된 동일 상품이 있는지 조회 -> 상품 정보.. 2023. 3. 19.
[MSSQL] 저장 프로시저 (Stored Procedure) 사용법 정리 지난 포스팅에서 저장 프로시저에 대한 설명을 드렸었다. 혹시 안 보신 분은 아래 링크를 참고하자. https://devkingdom.tistory.com/323 [MSSQL] 저장 프로시저 (Stored Procedure) 란? 실무에서는 프로그램에서 만들어 놓은 SQL문을 저장해 놓고, 필요할 때마다 호출해서 사용하는 방식으로 프로그램을 만든다. 저장 프로시저 (Stroed Procedure) 저장 프로시저는 이러한 방식이 가능 devkingdom.tistory.com 저장프로시저는 아래의 형식을 따른다. CREATE { PROC | PROCEDURE} [schema_name.]procedure_name [; number ] [ { @parameter [type_schema_name. ] data_ty.. 2022. 2. 6.
[MSSQL] 저장 프로시저 (Stored Procedure) 란? 실무에서는 프로그램에서 만들어 놓은 SQL문을 저장해 놓고, 필요할 때마다 호출해서 사용하는 방식으로 프로그램을 만든다. 저장 프로시저 (Stroed Procedure) 저장 프로시저는 이러한 방식이 가능하도록하는 각 DBMS 에서 제공하는 프로그래밍 기능이다. Oracle, MySQL 등 대부분의 DBMS 에서 제공하고 있는데, 오늘은 SQL Server에서 제공하는 저장 프로시저에 대해 정리할 생각이다. 저장 프로시저는 쿼리문들의 집합으로, 어떤 동작을 여러쿼리를 거쳐서 일괄적으로 처리할 때 사용한다. 여기서 이런 질문을 할 수도 있다. "그럼 그냥 SQL 문 쓰면 되지 , 굳이 SP를 만들어 써야하나?" 저장 프로시저를 실무에서 사용하는 이유가 있다. 먼저, SQL Server의 성능을 향상 시킬 .. 2022. 2. 6.
[MSSQL] 변수 활용하기 여느 프로그래밍 언어 처럼 MSSQL 에서도 변수를 활용할 수 있다. 형식은 아래과 같이 사용할 수 있다. DECLARE @변수명 데이터형식; --변수의 선언 SET @변수명 = 변수값; -- 변수에 값 대입 SELECT @변수명; -- 변수를 활용한 값 출력 실제로 사용은 아래와 같이 사용할 수 있다. DECLARE @tempVar1 INT; DECLARE @tempVar2 VARCHAR(10); SET @tempVar1 = 33; SET @tempVar2 = 'My Age is'; SELECT @tempVar2, @tempVar1; DECLARE @tempVar3 INT; DECLARE @tempVar4 INT; SET @tempVar3 = 5; SET @tempVar4 = 175; SELECT TO.. 2022. 2. 3.
[MSSQL] MSSQL Merge 활용하기 보통 이런 경험을 해본 적 있을 것이다. 게임 캐릭터를 삭제했는데, 그 삭제 결과가 바로 반영되지 않고, 일주일 뒤에 반영되거나 하는 그런 경험 말이다. 실제로 Merge 기능을 사용하면 이러한 로직을 구현할 수 있다. 아래 테이블을 보자. 총 10명의 회원정보가 있다. 만약에 이 상황에서 1명은 신규가입을 하고, 2명은 주소변경을 하고, 2명은 회원 탈퇴를 한다고 가정하자. 그런데 내 웹사이트에서는 결과를 바로 반영하지 않고 일주일 뒤에 반영한다고 할때는 MERGE를 이용해주면 된다. 아래 SQL을 보자. 일단 변경된 정보를 담는 테이블 만들었다. CREATE TABLE changeInfoTbl ( changeType NCHAR(4), userID char(8), name nvarchar(10), ad.. 2022. 2. 2.
[MSSQL] WITH 절을 이용해 CTE(Common Table Expression) 표현하기 하이. 오늘은 실무에서 종종 볼 수 있는 WITH 절의 활용 법을 포스팅 할 예정이다. 제목에서 보듯 WITH 절은 CTE, Common Table Experssion을 표현하기 위한 구문이다. CTE? CTE란 기존의 뷰나 파생 테이블, 임시 테이블 등으로 사용되는 것들을 대신할 수 있고, 보다 더 간결한 표현을 사용할 수 있따는 장점이 있다. CTE는 Non-Recursive(비재귀) CTE 와 Recursive(재귀) CTE 로 두가지 종류가 있다. Non-Recursive(비재귀) CTE 일단 상대적으로 간단한 Non-Recursive(비재귀) CTE 에 대해 먼저 알아보자. Non-Recursive CTE의 경우는 보다 복잡한 쿼리문을 단순화 시키는데 주로 사용된다. 형식은 아래와 같다. WIT.. 2022. 2. 2.
[MSSQL] 찾고자 하는 테이블 정보가 기억나지 않을 때 어느 정도 규모가 있는 회사에서 일을 하다보면, 여러가지 목적을 가진 데이터베이스를 다루게 된다. 그러다 보니 너무 많은 테이블이 있다보니, 한번씩 테이블 정보가 기억나지 않을 때도 있고.. 또 신규로 투입되는 프로젝트에서는 어떤 테이블이 있는지 조차 모를 때가 있다. (물론 정리가 잘되어 있는 문서들이 회사마다 있겠지만 ...) 이럴때 SSMS (SQL Server Management Studio) 에서 쉽게 테이블을 찾을 수 있는 방법을 포스팅하고자 한다. 오늘은 예시로 MSSQL의 예제 DB인 AdventureWorks를 이용해 실습을 해보겠다. 먼저 아래 명령어를 쳐보자. EXECUTE sp_helpdb; 위의 명령어는 sp_helpdb라는 sp 를 실행하라라는 의미인데, 저장 프로시저(sp)는 .. 2022. 2. 1.
[MSSQL] 쿼리로 페이지 처리 기능 구현하기 하이. 오늘은 웹 사이트를 구축하거나할 때 많이 사용되는 페이징 처리 기능을 쿼리로 구현해보려고한다. OFFSET과 FETCH NEXT를 이용하면되는데, 간단하게 각각의 역할을 말씀드리면 OFFSET 은 지정한 행의 수만 큼 건너 뛴 후에 출력하는 기능을 제공한다. 아래 쿼리를 보자. SELECT userID, name, birthYear FROM UserTbl ORDER BY userId; 위의 결과는 10명의 회원을 userId로 오름차순하여 출력한 결과를 보여준다. 여기서 OFFSET 4 ROWS를 추가하면 SELECT userID, name, birthYear FROM UserTbl ORDER BY userId OFFSET 4 ROWS; 결과가 바비킴,은지원, 조관우, 조용필은 제외되고 김범수~ .. 2022. 2. 1.
[MSSQL] 평균 값 구할 때, 소수점 자리까지 구하는 방법 하이. 최근에 이직하게 된 회사에서 주로 사용하는 RDBMS 가 SQL SERVER이다. 그래서 MSSQL 을 좀 다루는 연습히 필요해 MSSQL을 이용해 여러가지 쿼리 짜는걸 공부하고 있다. (다행스럽게 이전에 사용하던 Oracle과는 크게 차이가 없어보였다.) 오늘은 평균값을 구할때, 조심해야할 것을 포스팅해보려고한다. 아래 쿼리를 보자. SELECT AVG(amount) AS [평균 구매 갯수] FROM BuyTbl; 원래 기대한 값은 2.9XXXXX 이나 실제 값은 아래 처럼 나왔다. 평균 값을 구할때 그냥 구하면, 소수점 자리를 아예 무시해버리고 값을 구하게 된다. 이렇게 구하면 평균값이 의미가 없어지게 될 수 도 있다. 그래서 평균값을 구하는 두가지 방법을 말씀드리려 한다. 1. CAST 이용.. 2022. 2. 1.