반응형

DB 에서도 조건문 사용이 가능하다

IF ELSE 문

DECLARE @i AS INT =100;

IF @i = 100
	PRINT('100')
ELSE
	PRINT('NOT')

 

여러줄 묶을땐 BEGIN END 로 묶어야 한다

 

DECLARE @i AS INT =100;

IF @i = 100
	BEGIN
		PRINT('100')
		PRINT('101')
	END
ELSE
	PRINT('NOT')

 

 

WHILE 문 또한 사용가능하고 CONTINUE 와 BREAK 또한 있다

GO
DECLARE @i AS INT =0;
WHILE @i <= 10
BEGIN 
	SET @i = @i + 1;
	IF @i = 6 CONTINUE;
	PRINT @i;
END

 

 

 

 

원래 CREATE TABEL 명령어는 이런 형태였다

EX)

--테이블 만들기
create table accounts(
	accountId integer not null,
	accountName varchar(10) not null,
	coins integer default 0,
	createdTime DATETIME
);

 

 

그런데 테이블도 변수로 만들 수 있다
create table accounts 과 비슷하지만 다른건 tempDB 라는 곳에 임시로 데이터 베이스가 저장된다

--테이블도 변수로 만들 수 있다
--create table accounts( 과 비슷하지만 다른건 tempDB 라는 곳에 임시로 데이터 베이스가 저장된다
--

GO
DECLARE @test TABLE
(
	name VARCHAR(50) NOT NULL,
	salary	INT NOT NULL
);

INSERT INTO @test
SELECT p.nameFirst + ' ' + p.nameLast, s.salary
FROM players AS p
		INNER JOIN salaries AS s
		ON p.playerID = s.playerID;


SELECT *
FROM @test;

다음은 실행 결과다

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : 윈도우함수  (0) 2023.02.28
Northwind and pubs sample databases for Microsoft SQL Server  (0) 2023.02.23
DB : BATCH : GO  (0) 2023.02.19
DB : 변수  (0) 2023.02.18
DB : TRANSACTION  (0) 2023.02.17
반응형

UE5 기능이긴한데 카테고리 만들기가 귀찮음으로..

 

로코모션 : 한 지점에서 다른 지점으로 이동하는 행위 또는 움직이는 방법의 정의다

로코모션의 퀄리티는 발이 미끄러지지 않게 처리하는 것이 핵심이다

게임 액터와 애니메이션 재생이 다르거나 블랜딩 할때 차이로 인해 미끄러지는 현상이 발생

 

루트모션이란 : 애니메이션 시퀀스의 루트본 움직임을 게임 앤터의 움직임으로 전환하는 기능이다

 

루트모션의 경우 애니메이션 블랜딩 할때 루트본도 같이 블랜딩 되기 때문에 미끄러짐 현상이 나타난다

 

이를 해결 하기 위해 대스턴스매칭 또는 포즈워핑이 사용된다

 

디스턴스매칭 : 거리를 기반으로 애니메이션 재생타이밍을 조절한다

 

 

디스턴스 매칭 미적용시 (속도가 감속 하는 경우인 경우)

5미터의 거리를 감속하면서 애니메이션을 멈출때 속도가 줄어들어도 3미터 거리 이동으로 이동하면서 정지한다고 하면 

상단 처럼 5미터 이동 발이 하단의 3미터 거리에서도 그대로 적용되어 발이 밀리게 된다

 

 

디스턴스 매칭 => 거리기반 디스턴스 매칭

거리기반 디스턴스 매칭의 경우

 

  1. 거리에 맞도록 애니메이션 시작 타이밍을 변경한다
  2. 5미터의 애니메이션 재생 중에 남은 거리가 3미터라면 3미터를 이동하는 애니메이션으로 재생을 하도록 하여 발이 밀리지 않도록 한다

좌 : 미적용, 우 : 적용

 

 

 

 

 

반복되는 루핑 애니메이션의 경우 거리를 이용할수 없기 때문에 프레임당 이동 거리를 기준으로 애니메이션 재생 속도를 조절하게 된다

 

속도기반 디스턴스 매칭

동일한 애니를 속도에 따라 재생 속도를 달리 한것

왼쪽은 초당 속도 200 미터, 오른쪽은 초당 속도 1000 미터 인 속도기반 디스턴스 매칭

 

 

  1. 디스턴스매칭을 위해 필요한 것은 특정 시점에서 캐릭터가 있을 위치를 예측하는것이 필요한데
    캐릭터가 정지할 위치를 알아야 현재 위치와 정지 위치 사이에 거리를 구하고 거리를 구해야 거리기반 디스턴스 매칭을 작동시킬수 있기 때문 
  2. 각 애니메이션에서 루트본의 이동거리 정보가 필요하다
    디스턴스 매칭에서 이 거리 정보를 기반으로 애니메이션의 시작지점을 결정하거나 애니메이션 재생속도를 결정하기 때문이다

 

 

[사용법 구현] 

우선 현재 캐릭터의 가속 여부를 구현다 HasAcceleration 변수에 매 프레임마다 저장

 

 

HasVelocity : 현재 캐릭터의 속도 여부도 저장한다

 

 

 

 

 

단방향용 로코모션용 애님 스테이트 머신 구성

 

캐릭터가 정지할 위치를 예측하기 위해 사용 되는 노드

입력들은 위에서 구한 것들을 입력해준다

위 출력을 아래 처럼 Vector LengthXY 를 통해 DistanceToTarget 변수에 저장

 

애니메이션이 끝나기 전에 캐릭터가 정지 위치에 도착하게 되면 애니메이션도 멈춰 버리기 때문에 자연스러운 정지를 위해서 DistanceToTarget 값이 0 보다 큰지 봐서 만약 크다면 아직 거리가 남아 있는 것이기 때문에 디스턴스 매칭을 작동시켜야 한다 아래처럼..

그런데 0 보다 작은 경우, 즉 이미 위치에 도달한 경우라면 AdvanceTime 을 이용해서 애니메이션을 원래의 속도로 플레이 시키도록 한다

 

 

 

 

 

스트라이드 워핑과 오리엔테이션 워핑을 조합하면 더 자연스러운 애니를 루트모션에서 만들 수 있다

 

스트라이드 워핑 : 이동 속도에 따라 포폭 조절, 디스턴스 매칭으로 우선 느려질때 애니메이션이 느린 걸로 교체되기 때문에 이때 스트라이드 워핑과 더 잘맞아 떨어짐

 

오리엔테이션 워핑  : 방향에 따라 하체 회전 , 만약 애니가 전,후 , 좌, 우 4방향 밖에 없다면 대각선일때 애니가 이상해지는데   

 

 적용 전 앞-우측 방향 진행시


적용 후 앞-우측 방향 진행

하체가 회전 된걸 볼 수 있다

 

 

ref : https://youtu.be/RFNGB4ZTusQ

ref : https://docs.unrealengine.com/5.0/ko/root-motion-in-unreal-engine/

반응형
반응형

변수의 유효범위 설정 키워드는 배치명령어인 GO 이다

GO 영역 전후로 별도의 영역인데

--변수 선언 , 생성함과 초기화 할수도있고 
DECLARE @i as INT = 10;

--생성만 한다음, 나중에 넣을 수도 있다
DECLARE @j as INT;
SET @j = 20;

SELECT @i,  @j;



---배치---
--이전에 썼던 변수는 없는걸로 치고 다시 변수를 선언할수 있는 명령어 go 
GO
DECLARE @i AS INT =100;

SELECT @i;

 

 

 


--배치는 하나의 묶음으로 분석 실행된다

에러가 나도 go 다음 묶음 구문은 실행된다 별도 영역이라서

 

SELECT *
FO PLAYERS;

메세지에 보면 다음 처럼 에러지만

 

 

SELECT *
FO PLAYERS;

GO

SELECT * 
FROM salaries;

이 로직의 경우 go 이후 하단은 정상적이라서 에러 메세지가 뜨긴 하지만 다음 처럼

result 탭에서는 select 구문이 나온걸 알수 있다 즉 별도로 실행된다

반응형
반응형

 

프로그램 랭귀지 처럼 변수를 만들어서 결과를 임시로 보관할 수가 있다

 

--변수 선언 , 생성함과 초기화 할수도있고 
DECLARE @i as INT = 10;

--생성만 한다음, 나중에 넣을 수도 있다
DECLARE @j as INT;
SET @j = 20;

SELECT @i,  @j;

 

실행결과 

 

 

 

 

가장 많은 역봉을 받은 사람의 이름을 담는 구문

 

결과화면

 

SELECT ~ DESC 까지 결과를 firstName 에 담고 이것을 질의한 결과다

 

 

아래 구문은 sql 서버에 한정된 문법인데 다음 처럼 편하게 여러 변수에 담을 수도 있다

 

 

 

 

 

반응형
반응형

 

 

거래의 경우

  • A 의 인벤토리에서 아이템 제거
  • B의 인벤토리에 아이템 추가
  • A의 골드 감소
    이렇게 모두 처리되야 하는데 중간에 실패가 난다면 완전히 거래가 처리 되는것이 아니고 오류가 되어버리는데
    이렇게 되면 테이블 데이터가 잘못되게 된다, 강화 하는 경우에도 비슷한 케이스
    All or Nothing 
    이런걸 해결 하기위해 TRANSACTION 이 있다
    아무것도 쓰지 않으면 기본 적으로 TRANSACTION 이 있고 그 뒤에 COMMIT 이 있는 것인데 (EX : INSERT INTO ...)
    BEGIN TRAN; 을 명시하면 뒤에 COMMIT 또는 ROLLBACK 을 적어 처리할지 되돌릴지를 정할 수 있다
INSERT INTO accounts VALUES(1, 'TESET STR', 100, GETUTCDATE());

BEGIN TRAN;
	INSERT INTO accounts VALUES(2, 'TESET STR', 100, GETUTCDATE());
ROLLBACK;

 

 

결과를 보면 두번째 것은 추가 안된것을 알수 있다 ROLLBACK 되었음으로

 

 

 

 

INSERT INTO accounts VALUES(1, 'TESET STR', 100, GETUTCDATE());

BEGIN TRAN;
	INSERT INTO accounts VALUES(2, 'TESET STR', 100, GETUTCDATE());
COMMIT;

추가된 경우

 

 

 

 

 

 

아래 구문을 실행하기 전 데이터

 

--TRY CATCH 와 비슷한 구문
BEGIN TRY
		BEGIN TRAN;
			INSERT INTO accounts VALUES(1, 'T1', 100, GETUTCDATE());
			INSERT INTO accounts VALUES(2, 'T2', 100, GETUTCDATE());
		COMMIT;
END TRY
BEGIN CATCH
	IF @@TRANCOUNT > 0
		ROLLBACK;
END CATCH

@@TRANCOUNT 는 TRAN 이 몇개 인지 알수 있는 매크로인데

BEGIN TRAN;

       TRAN;

 

이렇게 TRAN 을 중첩시키면 1이상이 될 수가 있는데 이때 이 개수를 리턴해주는게 @@TRANCOUNT 이다

 

그리고 INSERT 는 accountId 가 primary key 임으로 이미 존재하는 키가 있을 경우 또다시 추가 하려고 하면 에러가 발생되어 catch 로 잡히게 된다

 

실행후 상황

아무 영향이 없었다는 걸 알 수 있다

 

PRINT('TTT') 를 ROLLBACK 구문 쪽에 써서 ROLLBACK 된 이유를 적어줄 수도 있다

 

중요한건 TRAN  으로 묶어놓은건 한번에 다 실행하거나 아니면 중간에 오류/예외가 발생하면 모두 실행되지 않는 다는 것이다

그리고 TRANSACTION 은 보통 두개 이상의 테이블에 어떤 변경이나 영향을 줄때 사용된다

 

 

사용시 주의 할점은

TRAN 안에는 꼭 원자적으로 실행될 애들만 넣어야 한다

즉 성능적으로 문제가 될 수 있기 때문인데

LOCK이 되기 때문

 

 

만약

BEGIN TRAN;
	INSERT INTO accounts VALUES(2, 'TESET STR', 100, GETUTCDATE());

이렇게 까지 되어 있으면 위코드는 COMMIT 이나 ROLLBACK 을 만나기 전까지 계속 LOCK 리 걸린 상태가 되며

 

다른 구문에서 accounts 를 조회하려는 구문을 실행한다 해도 select 구문은 실행 되지 않고 계속 대기하게 된다

대기상태에 빠지게 됨 commit 이나 rollback 을 만나지 않는다면 원자적 특성때문에

 

 

같은 얘기지만 TRAN  과 COMMIT/ROLLBACK 사이의 구문은 길지 않게 작성하는 것이 좋다

 

 

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : BATCH : GO  (0) 2023.02.19
DB : 변수  (0) 2023.02.18
DB : INNER JOIN, CROSS JOIN  (0) 2023.02.16
DB : UNION : 합치면서 중복제거, INTERSECT 교집합, EXCEPT 차집합  (0) 2023.02.15
DB : 인덱스(Index)  (0) 2023.02.13
반응형

CROSS JOIN (교차 결합)
서로 교차를 하면서 하나씩 결합을 한다는 것
(1,A), (1,B), (1,C), (2,A)... 총 9개

CREATE TABLE testA
(
	a INTEGER
)

CREATE TABLE testB
(
	B VARCHAR(10)
)

INSERT INTO testA VALUES(1);
INSERT INTO testA VALUES(2);
INSERT INTO testA VALUES(3);

INSERT INTO testB VALUES('A');
INSERT INTO testB VALUES('B');
INSERT INTO testB VALUES('C');


SELECT *
FROM testA;

SELECT *
FROM testB;


--CROSS JOIN (교차 결합)
--서로 교차를 하면서 하나씩 결합을 한다는 것
--(1,A), (1,B), (1,C), (2,A)... 총 9개

SELECT *
FROM testA
	CROSS JOIN testB;

SELECT *
FROM testA, testB;

결과화면

 

 

 

 

 

 

 

 

 

기본 데이터 보기

USE BaseballData;


SELECT *
FROM players
ORDER BY playerID;

SELECT *
FROM salaries
ORDER BY playerID;

 

 

 


INNER JOIN(두개의 테이블을 가로로 결합 + 결합 기준을 ON 으로 한다)
UNION 은 세로 즉 위아래로 합치는 것이였다면 INNER JOIN 은 옆으로 합치는 것

SELECT *
FROM players AS P
	INNER JOIN salaries AS S
	ON P.playerID = S.playerID;

 

players 의 playerID 와 salaries 의 playerID 가 같은 행 끼리 합치는 것

주의 할점은 조건이 = 인데 양쪽 모두에 playerID 가 있어야 붙여지게 되지 한쪽이라도 id 값이 없다면 해당 행은 걸러진다

즉 양쪽에 모두 정보가 있을때만 나온다

 

결과를 보면 뒤에 추가 된걸 볼 수 있다

 

inner join 을 한다는 건 새로운 테이블을 만든 것

 

 

 

 

 

 

-- outer join (외부 결합)
--어느 한쪽에만 존재하는 데이터가 있을때 정책을 어떻게 할것인지에 대한 것
-- left join 인경우로 예를 들어보면 두개를 조인 할때 왼쪽에만 있고 오른쪽에는 없다면
--왼쪽 정보를 그대로 채워 넣고 없는 오른쪽 정보는 null 로 채워 넣어서 join 을 한다는 것으로 
--inner join 과 유사한데 비어 있는 것을 어떻게 처리 할것인가에 대한 내용이다

SELECT *
FROM players AS P
	LEFT JOIN salaries AS S
	ON P.playerID = S.playerID
	ORDER BY P.playerID;

 

 

아래는 playerID 로 정렬하여 두 테이블(players과 salaries )을 본것이고

 

 

LEFT JOIN 한다음의 모습이다 

adairbi99m 의 줄에서 끝을 보면 

 

 

salaries 에는 adairbi99m  이 없기 때문에 끝에 NULL 로 채워진것을 볼 수 있다

 

 

 

RIGHT JOIN 은 반대의 개념이 된다

정보가 오른쪽에 있다면 표시되고 그 이후에 같은 행에 왼쪽(plyaer)에 없으면 왼쪽 정보는 NULL 로 채워진다

예시 이미지

 

오른쪽에 정보는 있지만

 

왼쪽이 null 로 채워진 경우 

 

 

그런데 left 나 right 나 테이블 순서를 바꿔주면 동일한 효과가 된다

 

 

 

 

정리하자면 

cross join 은 * 이고

inner join, left join right 조인은 같은 행에 추가 하여 테이블을 만드는 것이다

 

 

반응형
반응형

 

union 시 주의할 점은 열이 같아야지 합처진다 그런데 A , B 중에서 중복은제거

UNION 은 || or 연산과 비슷한데 중복은 제거 한다

select playerID, AVG(salary)
from salaries
group by playerID
having AVG(salary) >= 3000000

UNION

--12월에 태어난 선수들의 playerID
select playerID, birthMonth
from players
where birthMonth = 12
order by playerID asc
;

 

아래는 위 결과를 실행했을때의 결과인데 avg 와 birthmonth 때문에 합쳐지지 않아

silvaca01 이 별도 있는 거을 볼 수 있다

 

 

 

 

 

 

union 열을 같게끔 해주면 중복은제거된다

 

--커리어 평균 연봉이 3000000 이상인 선수들의 playerID
select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

UNION

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

이렇게 하면 합쳐진 하나만 나오는 것을 알수 있다 ( 중복 제거 )

 

 

 

 

union all 은 중복을 허용한다

select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

UNION all

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

 

 

union 을 쓰게 되면 order by 는 가장 하단에 와야 한다

 

 

 

 

교집합(intersect) 을 구한다 즉 양쪽 모두 만족하고 존재하는것을 구한다

--교집합(intersect) 을 구한다 즉 양쪽 모두 만족하고 존재하는것을 구한다
--커리어 평균 연봉이 3000000 이상이거나 (&&) 12월에 태어난 선수들
select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

intersect

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

 

 

 

 

--차집합
--커리어 평균 연봉이 3000000 이상이거나 (-) 12월에 태어난 선수들
select playerID
from salaries

group by playerID
having AVG(salary) >= 300000 

except

--12월에 태어난 선수들의 playerID
select playerID
from players
where birthMonth = 12
order by playerID asc
;

위는 차집합으로 A - B 가 된다

명령어는 except 가 된다

 

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : TRANSACTION  (0) 2023.02.17
DB : INNER JOIN, CROSS JOIN  (0) 2023.02.16
DB : 인덱스(Index)  (0) 2023.02.13
DB : DB(스키마) 만들기, 테이블 만들기와 Primary Key 의 성능  (0) 2023.02.12
DB : SUBQUERY  (0) 2023.02.10
반응형

DB 에선 2진 검색 트리를 사용한다, 균형잡힌 트리등 각 DB 마다 다를 순 있다

 

어떤 게임에서 특정 유저 ABC 에게 귓말을 날린다 하면 다른 방법을 쓰지 않는다면 모든 유저중에서 ABC 를 찾아야 하지만 이때 index 를 사용하면 빠르다

 

유저명순으로 이름들을 정렬한 다음 여기에  index 를 매긴다

즉 트리종류의 검색으로 빠르게 찾는것이 index 의 방식이다

이때 유저명에다가 index 를 걸어 찾기를 더 빠르게 한다는 개념

 

 

 INDEX 는 두가지 종류가 있다

  1. CLUSTERED INDEX  : 테이블당 1개만 존재하고 제일 빠르다, 공간도 적게 차지함
    Primary key 대부분이 clustered index 이다
    영한사전 처럼 알파벳 순서처럼 이미 데이터가 정렬이 되어 있고 여기서 찾는 것

  2. NON-CLUSTERED INDEX : 별다른 제한 없음
    별도의 공간에 색인목록을 만들어 색인 목록으로 한번 간다음 여기서 다시 데이터를 찾는 방식
    즉 따로 관리하는 Lookup테이블로 색인을 먼저 한다음 찾는다

 

디폴트로는 Primary key 로 지정하면 Clustered Index 인데, 지정을 Non - Clustered Index  로 한다면 이것도 가능은 하지만 이렇게 사용할일은 거의 없다

 

 

 

인덱스 지정하기

CREATE INDEX i1 ON accounts(accountName);

 

 

 

 

 

인덱스를 accountname 에 지정한다음 위 그림처럼 i1 으로 accountname  에 대한 인덱스가 지정된 것을 알 수있다

 

 

DROP INDEX accounts.i1;  

이렇게 인덱스를 삭제 할 수 있다

 

accountname 을 인덱스로 지정하는 상황은 이름으로 검색을 하는 경우를 예로 들 수 있다

 

 

CREATE UNIQUE INDEX i1 ON accounts(accountName);

--중복 되는 것이 없는 인덱스

 

 

CREATE CLUSTERED INDEX i1 ON accounts(accountName);

이렇게 지정하면 CLUSTERED 인덱스로 지정을 하려고 하지만 테이블에 하나만 클러스터 인덱스만 존재 함으로 추가로 지정하려 하면 오류가 난다

 

 

 

CREATE INDEX i1 ON accounts(accountName, ballCount);

이렇게 여러개를  조합하여 묶어 인덱스로 지정하는 것도 가능하다

 

 

 

 

 

 

반응형
반응형

 

 

3DMP

 

 

수학/프로그램은 샤프를 들기 이전에 상상에서부터 시작되어야 합니다!!

 

현업 3D게임엔진 프로그래머가 전수해드리는 고농축 고퀄리티의 과외를 만나 보실 수 있습니다

 

 

※ 제대로 된 곳이 아닌 다른곳에서 어설프게 배웠거나 이해가 완벽하게 가지 않은 상태에서 계속 진행이 되어
시간과 비용만 낭비만 한채 또는 중도에 포기한 채 이곳을 찾아 93% 이상 분들이 원하는 결과를 얻고 가셨습니다
요행 길이라는 것은 없으며 제대로 된 곳에서 제대로된 진로를 고민해보시기 바랍니다.

 

  • 타교육기관에서 한계를 느끼신 분
    질문에 대한 답 : 여기 저기서 찾아도 무엇이 맞는지 모르겠는 분에게 정확한 답변을 드립니다
  • 최근실적 : 넷마블 게임프로그래머 부문 1위로 입사
    신입프로그래머를 1:1 교육하여  연봉 1600만원 인상 이직
  • 노하우를 아낌없이 알려드리겠습니다

 

이력 ]

  • 넥슨, 크래프톤, NHN, 넷마블 다수 동종/타종 근무경험 및 다년간 현업 개발자
  • 3D,2D게임 엔진,컨텐츠 프로그래머/ 언리얼4,5/네트워크 동기화 프로그래머/애니메이션 메인, 물리엔진개발/
    다수와 다양한 장르의 모바일, PC 게임개발/서버/Shader 등등의 개발 경험/ UE,Unity
  • 미들웨어(엔진)/ 일반 프로그램 프로젝트 제작
  • 고차원 수학/ 물리 들의 알고리즘과 관련된 특수 프로그램 제작
  • 게임업계 대기업 넥슨, 크래프톤, NC, 펄어비스, 중견 B사,  등등의 기업에 합격시킨 노하우
  • 다수, 다양한 분들에 대한 다수의 과외 경험으로 축적된 노하우 보유
  • 기타 일반 프로젝트 경험
  • 과외 등록 완료, 남,  성범죄 "완전 무(無)"!!

 

 

[이직/취직/수강하신 분들의 회사]

  • 넥슨 코리아, NC, 넷마블, 넷게임즈, EA 코리아의 - 프로그래머 다수/TA/기획자
  • 크래프톤, 펍지, 펄어비스, 블루홀의 - 프로그래머/TA/기획자
  • 스마일게이트, NHN, 기타 등등 의 - 프로그래머/TA/기획자/UI
  • 게임/비게임 임직원, CEO포함
  • 대학생(취준생), SKY, 포함 상위 10% 이상 대학생, 그 외 글로벌 학교 및 유학생
    하위권 에서도 포기하지 않고 노력했을때 대기업에 간 선례들이 많이 있습니다, 포기하지 마세요!
  • 전문 프로그래머로 진로를 희망하시는 분들
  • 전공자/컴퓨터 관련 전공자가 아니지만 게임이나 프로그램쪽으로 진로를 희망하시는 분들
    (비전공자 일지라도 많은 상당수의 분들이 원하는 성과를 이루고 가셨습니다)
  • 프로그램을 혼자 하기엔 막연하여 그룹(단체) 배워보고자 하시는 분들
  • 초심자로 프로그램 배워보려 했지만 진입 장벽때문에 포기하신 분들

 

 [ 통합 진행 과목] : 필요한 것만 선택하여 진행

방향에 따른 과목들은 상담을 통해 설정됩니다 
추가 과목에 대한 추가 비용은 들지 않으며 방향에 따라 과목들이 정해집니다

  • 현업 3D 실전 수학, 일반 수학, 2D수학, 미들웨어, STL 기반 자료구조와 알고리즘
  • 최적화 알고리즘, 대규모 디자인패턴(설계-디자인)
  • 멀티쓰레드 프로그래밍, 기초 물리(Physics), 캐릭터, 지형 엔진 & Tools,
  • 그래픽스 : shader(HLSL), Unity URP, ShaderLab, 3D 애니메이션
  • 다이렉트X : DirectX9/ DirectX12, Direct 를 통한 실전 수학 활용
  • 게임 엔진 : Unreal 4, Unity3D
  • C언어/C++,C++ 11~,C# 현업 디버깅 스킬 , 시스템 베이스
  • 포트폴리오 과정

 

 

[ 과외 기본 방향성 : 개인 맞춤형 최적화 설정]

 

수업은 수강자분의 현재 상태에 맞는 최적화된 맞춤 방식으로 진행되는 것을 원칙으로 하며 모든 과목은

최종적으로는 혼자만의 생각으로 수학/프로그램 을 만들어 나가는 것을 진행시 가장 우선적인 목표 진행합니다

현업/면접 또는 프로젝트 에서 중요한 부분 또한 조언 및 컨설팅이 같이 병행 됩니다

 

  • 진도만을 위한 도서 위주의 수업 또는 깊은 이해가 동반되지 않는 방식 즉 겉핥기로는
    게임/엔진 프로그래머의 문턱에 조차 도달 할 수 없습니다는 점을 기억해주시면 될 것 같습니다
  •  과목은 위에 나열한 과목들이 있지만 원하는 과목 또는 수준에 따라 먼저 시작하게 되는 과목이
    변경되니 과목 란에서 이런 과목이 있다는 것만 참고하시면 됩니다
  • 철저히 수강생 맞춤형으로 진행됩니다(수강자 분의 수준이 고려된 최적의 선에서 시작, 중복X)
  • 진도는 기본적으로 수강자 분들의 현재 수준을 고려하여 사전 상담을 통하여 
    수강자의 현재 실력기준으로 부터 부족한 부분은 채워 나가고 수강생의 목표에 따라 추가해야할 부분은
    함께 논의 후 진행하는 방향으로 진행됩니다(과목 추가는 별도비용 X)
  • 수업은 수강자가 직접 코드를 작성 하면서 진행됩니다
  • 과외 기본 목표 : 혼자만의 힘으로 희망하는 수준까지의 프로그램실력을 쌓는 것을 기본 목표로 합니다

 

 [ 과외 안내 ]

   진행 방식 :  개인 과외 1:1 진행 방식 / 1:N 방식

  • 1 Section 기준 = 4주/4회, 추가 섹션은 및 진행은 별도 문의주시면 답변해드립니다
  • 요일 : 협의, 신청자가 많은 경우 대기 기간이 발생 할 수 있습니다
  • 1 회당(1 섹션) 시간 : 1:00, 섹션당 추가에 따른 누적 할인 적용
  • 수강 기간 : 한 달 단위로 수강, 수강생이 희망하는 달까지 진행되며 한달 단위 결제방식입니다
  • 과외 장소/방식 : 원격으로만 진행 (카메라 Off ) 
    원격과 오프라인과의 차이는 다년간 노하우로 거의 없다고 보시면 됩니다
  • 납부 방식 : 한 달 단위, 한달 단위로 연장 하는 방식
  • 그룹 과외  : 그룹(2인 이상은) 별도 문의 , 추가 할인 적용

 

[수강 특전]  : 3DMP 네트워크

  • 현업 게임 프로그래머들과 함께 지속적인 '3DMP 네트워크 데이' 에서 정보 교류활동의 기회

[문의]

상담시 최대한 오픈마인으로 임해주시면 좋은 시너지 효과가 나올 수 있습니다!

상담전용 카톡 플러스 친구 (별도의 친구 추가 없이 상담 가능)

https://pf.kakao.com/_uxabzK

 

상담 전용 카톡 아이디 : 게임프로그래밍 과외

 

 

반응형
반응형
--DB 만들기, 스키마
create database GameDB;

--db 사용
use GameDB;


--테이블 만들기
create table accounts(
	accountId integer not null,
	accountName varchar(10) not null,
	coins integer default 0,
	createdTime DATETIME
);

select *
from accounts;

 

 

 

--테이블 삭제
--drop table accounts;

--열추가
ALTER TABLE accounts
ADD lastEnterTime DATETIME;

 

 

 

 

 

--accounts 에 accountId 를 primary 로 설정한다
 ALTER TABLE accounts
 ADD PRIMARY KEY (accountId);

 

 

Primary key 로 설정하면 

 

위 처럼 Clustered Index Seek 라고 표기 된걸 볼수 있는데 이것은 map 또는 dictionary 같은 성능을 보인다

 

하지만 Primary key 를 제거하면 

이 처럼 Table Scan 으로 바뀌게 되어 테이블을 뒤지는 형태로 느린 성능을 보이게 된다

 

 

 

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : UNION : 합치면서 중복제거, INTERSECT 교집합, EXCEPT 차집합  (0) 2023.02.15
DB : 인덱스(Index)  (0) 2023.02.13
DB : SUBQUERY  (0) 2023.02.10
DB : subquery  (0) 2023.02.04
DB : Insert into , Delete, Update  (0) 2023.02.03
반응형

현업 게임프로그래밍 통합과정 과외(언리얼/유니티)

 

 

 

3DMP

 

 

수학/프로그램은 샤프를 들기 이전에 상상에서부터 시작되어야 합니다!!

 

현업 3D게임엔진 프로그래머가 전수해드리는 고농축 고퀄리티의 과외를 만나 보실 수 있습니다

 

 

※ 제대로 된 곳이 아닌 다른곳에서 어설프게 배웠거나 이해가 완벽하게 가지 않은 상태에서 계속 진행이 되어
시간과 비용만 낭비만 한채 또는 중도에 포기한 채 이곳을 찾아 93% 이상 분들이 원하는 결과를 얻고 가셨습니다
요행 길이라는 것은 없으며 제대로 된 곳에서 제대로된 진로를 고민해보시기 바랍니다.

 

  • 타교육기관에서 한계를 느끼신 분
    질문에 대한 답 : 여기 저기서 찾아도 무엇이 맞는지 모르겠는 분에게 정확한 답변을 드립니다

 

이력 ]

  • 넥슨, NHN, 넷마블 다수 동종/타종 근무경험 및 다년간 현업 개발자
  • 3D게임 엔진 프로그래머/ 3D,2D 게임/ 언리얼엔진/ 엔진 프로그래머/ 메인 PC 게임 개발 / 모바일 게임/엔진 개발
  • 미들웨어(엔진)/ 일반 프로그램 프로젝트 제작
  • 고차원 수학/ 물리 들의 알고리즘과 관련된 특수 프로그램 제작
  • 게임업계 대기업 넥슨, 크래프톤, NC, 펄어비스, 중견 B사,  등등의 기업에 합격시킨 노하우
  • 다수, 다양한 분들에 대한 다수의 과외 경험으로 축적된 노하우 보유
  • 기타 일반 프로젝트 경험
  • 과외 등록 완료, 남,  성범죄 "완전 무(無)"!!

 

 

[이직/취직/수강하신 분들의 회사]

  • 넥슨 코리아, NC, 넷마블, 넷게임즈, EA 코리아
  • 크래프톤, 펍지, 펄어비스, 블루홀
  • 스마일게이트, NHN, 기타 등등 ..

 

 

[ 수강 하셨던 분들 ]

  • 국내/해외 대기업 현업 프로그래머, TA, 아티스트, 기획자
  • 게임 및 비게임 업계 종사자, 임직원, CEO
  • 대학생(취준생), SKY, 포함 상위 10% 이상 대학생, 그 외 글로벌 학교 및 유학생
    하위권 에서도 포기하지 않고 노력했을때 대기업에 간 선례들이 많이 있습니다, 포기하지 마세요!
  • 전공자/컴퓨터 관련 전공자가 아니지만 게임이나 프로그램쪽으로 진로를 희망하시는 분들
    (비전공자 일지라도 많은 상당수의 분들이 원하는 성과를 이루고 가셨습니다)
  • 전문 프로그래머로 진로를 정하시거나 또는 희망하시는 분들
  • 프로그램을 혼자 하기엔 막연하여 그룹(단체) 배워보고자 하시는 분들
  • 초심자로 프로그램 배워보려 했지만 진입 장벽때문에 포기하신 분들

 

 [ 통합 진행 과목] : 필요한 것만 선택 가능 

방향에 따른 과목들은 상담을 통해 설정됩니다 
추가 과목에 대한 추가 비용은 들지 않으며 방향에 따라 과목들이 정해집니다

  • 현업 3D 실전 수학, 일반 수학, 2D수학, 미들웨어, STL 기반 자료구조와 알고리즘
  • 최적화 알고리즘, 대규모 디자인패턴(설계-디자인)
  • 멀티쓰레드 프로그래밍, 기초 물리(Physics), 캐릭터, 지형 엔진 & Tools,
  • 그래픽스 : shader(HLSL), Unity URP, ShaderLab, 3D 애니메이션
  • 다이렉트X : DirectX9/ DirectX12, Direct 를 통한 실전 수학 활용
  • 게임 엔진 : Unreal 4, Unity3D
  • C언어/C++,C++ 11~,C# 현업 디버깅 스킬 , 시스템 베이스
  • 포트폴리오 과정

 

   [ 과외 대상 ]

  • 견고하면서 제대로된 스킬을 배우고 싶으신 분
  • 실력을 더 쌓아가고 싶은 현업 프로그래머
  • 다른 교육원에서 실질적인 배움을 채워주지 못한 부분에 갈증을 느끼시는 분 또는 취준생
  • 현업에서 사용되는 3D or 2D 온라인 게임프로그래밍의 스킬을 쌓고 싶은 분.
  • 만드는 것에만 열중해 설계를 보지 못하시는 분이나 문제는 푸나 실질적인 적용을 못하는 분
  • 전공생/비전공생/유학생/컴퓨터 전공관련 또는 프로그래밍에 관심이 있는 분
  • 3D 그래픽스 수학을 배우고자 하는 분(기초부터 현업 수준까지)
    수학적 개념이 어느정도 있고 응용은 하지만 원하는 결과를 잘 못만들어내는 분
    일정 수준의 수학실력은 되긴 하나 좀더 심도 있는 프로그램적 수학 스킬을 원하시는 분 
  • 초심자 or 기초가 부족하거나 또는 약간의 기초는 있지만 어떻게 공부해야할지 막연하신 분

 

 

[ 과외 기본 방향성 : 개인 맞춤형 최적화 설정]

 

수업은 수강자분의 현재 상태에 맞는 최적화된 맞춤 방식으로 진행되는 것을 원칙으로 하며 모든 과목은

최종적으로는 혼자만의 생각으로 수학/프로그램 을 만들어 나가는 것을 진행시 가장 우선적인 목표 진행합니다

현업/면접 또는 프로젝트 에서 중요한 부분 또한 조언 및 컨설팅이 같이 병행 됩니다

 

  • 진도만을 위한 도서 위주의 수업 또는 깊은 이해가 동반되지 않는 방식 즉 겉핥기로는
    게임/엔진 프로그래머의 문턱에 조차 도달 할 수 없습니다는 점을 기억해주시면 될 것 같습니다
  •  과목은 위에 나열한 과목들이 있지만 원하는 과목 또는 수준에 따라 먼저 시작하게 되는 과목이
    변경되니 과목 란에서 이런 과목이 있다는 것만 참고하시면 됩니다
  • 철저히 수강생 맞춤형으로 진행됩니다(수강자 분의 수준이 고려된 최적의 선에서 시작, 중복X)
  • 진도는 기본적으로 수강자 분들의 현재 수준을 고려하여 사전 상담을 통하여 
    수강자의 현재 실력기준으로 부터 부족한 부분은 채워 나가고 수강생의 목표에 따라 추가해야할 부분은
    함께 논의 후 진행하는 방향으로 진행됩니다(과목 추가는 별도비용 X)
  • 수업은 수강자가 직접 코드를 작성 하면서 진행됩니다
  • 과외 기본 목표 : 혼자만의 힘으로 희망하는 수준까지의 프로그램실력을 쌓는 것을 기본 목표로 합니다

 

 [ 과외 안내 ]

   진행 방식 :  개인 과외 1:1 진행 방식 / 1:N 방식

  • 1 Section 기준 = 4주/4회, 추가 섹션은 및 진행은 별도 문의주시면 답변해드립니다
  • 요일 : 협의, 신청자가 많은 경우 대기 기간이 발생 할 수 있습니다
  • 1 회당(1 섹션) 시간 : 1:00, 섹션당 추가에 따른 누적 할인 적용
  • 수강 기간 : 한 달 단위로 수강, 수강생이 희망하는 달까지 진행되며 한달 단위 결제방식입니다
  • 과외 장소/방식 : 원격으로만 진행 (카메라 Off ) 
    원격과 오프라인과의 차이는 다년간 노하우로 거의 없다고 보시면 됩니다
  • 납부 방식 : 한 달 단위, 한달 단위로 연장 하는 방식
  • 그룹 과외  : 그룹(2인 이상은) 별도 문의 , 추가 할인 적용

 

[수강 특전]  : 3DMP 네트워크

  • 현업 게임 프로그래머들과 함께 지속적인 '3DMP 네트워크 데이' 에서 정보 교류활동의 기회

[문의]

상담시 최대한 오픈마인으로 임해주시면 좋은 시너지 효과가 나올 수 있습니다!

상담전용 카톡 플러스 친구 (별도의 친구 추가 없이 상담 가능)

https://pf.kakao.com/_uxabzK

 

상담 전용 카톡 아이디 : 게임프로그래밍 과외

 

 

반응형
반응형

Artificial Intelligence (AI) is one of the hottest topics in the tech industry today. With rapid advancements in machine learning, natural language processing, and computer vision, AI has the potential to revolutionize a wide range of industries, from healthcare and finance to retail and transportation.

The rise of AI has also sparked discussions about its ethical and societal implications. While AI has the potential to greatly improve our lives, it also raises important questions about privacy, security, and the impact on jobs. For example, some worry that widespread use of AI could lead to job loss and increased inequality.

Despite these concerns, the trend towards AI is undeniable, with companies investing heavily in developing and deploying AI technologies. In many industries, AI is already being used to automate manual processes, enhance customer experience, and make better-informed decisions.

One of the key challenges in the adoption of AI is the availability of skilled talent. There is a growing demand for data scientists, machine learning engineers, and AI experts who can develop and deploy AI solutions. This shortage of talent has led to increased competition for skilled workers and a growing need for education and training in AI.

Overall, the rise of AI is set to have a major impact on the tech industry and our lives. As we continue to explore the potential of AI, it is important to address the ethical and societal implications of this technology and ensure that it is used for the benefit of all.

반응형
반응형

--exists 존재한다면 진행하고 없다면 스킵한다
--not exists exists 와 반대

 

select *
from players
where exists (select playerID from battingpost where battingpost.playerID = players.playerID );

(select playerID from battingpost where battingpost.playerID = players.playerID )

서브 쿼리를 보면 battingpost.playerID = players.playerID 두 조건이 같은것이 존재 할때만(exists) players 의 정보를 보여주며 그렇지 않으면 스킵한다


결과

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : 인덱스(Index)  (0) 2023.02.13
DB : DB(스키마) 만들기, 테이블 만들기와 Primary Key 의 성능  (0) 2023.02.12
DB : subquery  (0) 2023.02.04
DB : Insert into , Delete, Update  (0) 2023.02.03
DB : group by  (0) 2023.02.02
반응형

 

메쉬는 같은데 데이터 값만 다른 인스턴싱의 예시 이미지들..

 

 

 

 

 

https://learn.microsoft.com/ko-kr/windows/win32/api/d3d11/nf-d3d11-id3d11devicecontext-drawindexedinstanced

 

ID3D11DeviceContext::D rawIndexedInstanced(d3d11.h) - Win32 apps

인덱싱된 인스턴스화된 기본 형식을 그립니다. (ID3D11DeviceContext.DrawIndexedInstanced)

learn.microsoft.com

 

 

CPU 단에서 위치등을 지정하여 gpu 에 인스턴싱을 하기 위한 방법으로 다음의 것들을 쓸 수 있다

IASetVertexBuffers

- 물체의 정점의 구조세팅을 말함, 각 물체의 위치정보들을 넘겨주게 됨

 

즉 하나의 오브젝트를 여러 위치에 대해 여러번 그리는것

 

  1. 한번에 그릴 여러 위치에 대한 데이터를 CPU 단에서 모아서GPU 에 한번에 보낸다
  2. GPU 에 넘겨줄 인스턴스 파라미들은 예를 들어 월드, 뷰, 투영행렬 등의 정보를 넘길 수 있다
  3. 리소스 버퍼 또한 한번에 데이터를 묶어 보낼 만큼의 양을 확보한다
  4.  

정점 셰이더에서 입력으로 사용될 정보들이 추가로 있는 걸 알 수 있자 world, MV, MVP

보통 월드, 카메라, 투영을 전역으로 넘겨 받는데

 

위 VS_IN 에서 인스턴싱이 꼭 이런 데이터만 넘어오는 것은 아니지만 인스턴싱시 VS 에서도 데이터를 받아서 오브젝트마다 위치를 다르게 처리 할 수 있는 예시로 볼 수 있다 ( 오브젝트 메시는 동일하지만)

다시 말해 오브젝트마다 최소한의 다른 데이터만 넘겨 주어 렌더링 한다는 것이다

 

뭉처서 넘기는 만큼 드로우 콜 횟수가 줄어들게 됨으로 더 빠른 성능을 보인다

 

파티클 같은경우 최소한의 정점만 (보통 정점 1개) 만 통과 시켜 지오메트리 셰이더에서 파티클이 그려져야 하는경우

Plane 을 마들어 파티킬을 그려 인스턴싱의 효과를 더욱 극대화 할 수 있다

https://3dmpengines.tistory.com/2317

 

성능은 1.5~2배 이상의 성능 향상을볼 수 있다( 상황에 따라 다름)

 

 

 

 

 

 

반응형
반응형
select *
from players
where playerID = (select top 1 playerID from salaries order by salary desc );

playerID 에 해당 하는 내용을 하단과 같이 select 문을 다시 넣어 검색하여 이것의 결과를 활용하는 것을 보고 subquery 라 하고 두번에 나누어서 처리 할것은 한번에 처리 할 수 있다

 

주의 할것은 위 처럼 단일행은 동작 가능하지만 다중행에 대해선 동작하지 않는다

 

 

 

select *
from players
where playerID in (select top 10 playerID from salaries order by salary desc );

하지만 in 을 사용하게 되면 서브쿼리에 있는 내용을 모두 상위 where player 와 매칭 되는것을 모두 보여준다

결과 화면에 3개만 보여지는 이유는  IN 으로 처리 하면 중복되는것은 하나만 보여주기 때문이다

 

 

서브쿼리는 where 에서 많이 사용 되지만 다른 구문에서도 사용 가능하다 

 

다음 처럼 insert into 에도 서브쿼리를 넣을 수도 있다

insert into salaries
values (2023, 'KOR', 'NL', 'kkk', (select max(salary) + 100 from salaries));

 

 

 

 

테이블의 모든 모든 요소들을 다른 테이블에서 새로운 테이블에 일부요소들에 대한 복사하기를 서브쿼리와 유사한 형태로 쓸 수 있다

 

salaries_temp 를 복사를 받을 테이블

--INSERT SELECT 구문

insert into salaries_temp
select  yearID, playerID, salary from salaries;

위는 salaries 내용을 salaries_temp  에 복사하는 코드다

 

 

 

select *
from salaries_temp;

위와 같이 복사 된것을 알수 있다

 

 

원래 salaries 는 다음 처럼 요소들이 배치되어 있다

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : DB(스키마) 만들기, 테이블 만들기와 Primary Key 의 성능  (0) 2023.02.12
DB : SUBQUERY  (0) 2023.02.10
DB : Insert into , Delete, Update  (0) 2023.02.03
DB : group by  (0) 2023.02.02
DB : COUNT, DISTINCT 각종 함수들  (0) 2023.02.01
반응형
select * 
from salaries;

 

 

insert into salaries
values (2023, 'KOR', 'NL', 'killer', 100000000)

insert 할때

이렇게 컬럼 명을 쓰고 그거에 맞게 values 를 넣어도 가능하다(이때 순서가 달라고 가능하다)

 

 

delete from salaries;

테이블을 삭제한다

 

 

 

 

 

 

조건에 맞는 열을 지운다

delete from salaries
where playerID ='barkele01';

주의 할점은 조건에 맞는것을 모두 삭제한 다는 것이다

salary 중에 null 을 삭제 한다고 하면 모든 열중 null 인걸 전부 삭제한다

 

 

 

 

 

 

update 하기 전 원래 데이터

 

 

update salaries
set salary = salary * 2
where teamID = 'ATL';

update 테이블명

salary 에 두배로 곱한 쿼리문 적용 후의 결과

 

 

 

콤마(,) 로 연속적으로 값을 업데이트 할 수 있다

update salaries
set salary = salary * 2, yearID = yearID +1
where teamID = 'ATL';

 

delete, update 등 실제 쿼리를 sql server 에디터에서 실행하면 테이블 값들에 실제 값이 적용 되어 있는 것임으로

테스트 할때는 원래 데이터를 빽업해놓는것이 좋다

 

그리고 실제 데이터를 삭제 할때는 실제 삭제하지 않고 delete 열을 하나 두어 삭제할때 delete 열에 체크만해서 삭제 하는 케이스들이 많다(ex 계정 같은 경우들, 복구를 위해서)

 

 

 

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : SUBQUERY  (0) 2023.02.10
DB : subquery  (0) 2023.02.04
DB : group by  (0) 2023.02.02
DB : COUNT, DISTINCT 각종 함수들  (0) 2023.02.01
DB : Case, where  (0) 2023.01.31
반응형

원래 데이터는 이렇게 있는데

 

2004년 도에 가장 많은 홈런을 날린 팀은?

select  teamID, sum(HR) as homeRuns
from batting
where yearID=2004
group by teamID
order by homeRuns desc;

 

group by 는 공통된 것을 하나의 단위로 묶는 것인데

이 묶음으로 하나로 보려 하는 것이 group by 라서 

group by 한 것을 select * 할 수는 없다

 

즉 group 된 것의 정보에서 뭔가 SUM 이나 계량적인 데이터를 종합해 보려고 할때 유용하다

 

 

 

2004년 도에 가장 많은 홈런을 날린 팀은?

select teamID, sum(HR) as homeRuns
from batting
where yearID=2004 
group by teamID
having SUM(HR) >= 200
order by homeRuns desc;

여기서 having 을 볼 수 있는데 having 은 group by 다음에 조건을 걸 수 있는 키워드 이다

group 으로 묶은 목록들 중에서 다시 조건을 걸기 위해선 where 로는 충족되지 못하기 때문에 하나 더 있다고 볼 수 있다

 

 

 

명령문은 다음 순서대로 실행 되기 때문에 select 를 가장 최상단에 쓰는 쿼리 문에서는  select 다음에 오는 컬럼명에 올 수 있는 것인지에 대한 판단은 아래 순서를 고려해야 한다 (as 별칭 포함)

  1. from
  2. where
  3. group by
  4. having
  5. select
  6. order by

 

 

단일년도에 가장 많은 홈런을 날린 팀은?

select teamID, sum(HR) as homeRuns
from batting
group by teamID
order by homeRuns desc;

 

이렇게 볼 수 잇는데 이때는 같은 팀은 맞는데 연도가 섞여 있으면서 각 연도별에 대한 홈런을 모두 합한 것이 됨으로

 

 

 

 

만약 위 상황에서 같은 팀에서도 연도별 분류 한다면?

select teamID, yearID, sum(HR) as homeRuns
from batting
group by teamID, yearID
order by homeRuns desc;

같은 팀에서도 단일 연도로 분류하여 구 할 수 있다

 

NYA 에 대한 결과는 하단에 더 있지만 생략..

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : subquery  (0) 2023.02.04
DB : Insert into , Delete, Update  (0) 2023.02.03
DB : COUNT, DISTINCT 각종 함수들  (0) 2023.02.01
DB : Case, where  (0) 2023.01.31
DB : 날짜와 관련된 기능들 GETUTCDATE()  (0) 2023.01.30
반응형

 

 

COUNT 는 NULL 인 것은 제외하여 개수를 센다

 

DISTINCT 중복은 제거하고 나열한다

 

 

select count(birthMonth)
from players;

select distinct birthMonth
from players;

 

원래 이렇게 생긴 테이블에서 

위 코드를 실행하면 다음 처럼 된다

 

NULL 또한 distinct 대상이 된다 => 중복만 제거하는 것임으로

 

 

 

 

 

위의 코드에선 3개가 모두다 같아야 중복 처리가 된다

그렇지 않다면 위 처럼 중복 분기처리가 된다

 

 

 

그 밖의 함수들

집계 함수들에선 NULL 은 처리 하지 않고 무시한다

몸무게의 평균이 된다

 

 

 

다음 처럼 NULL 일대는 0 으로 취급하여 처리 할 수도 있다

0 이 추가 되어 평균이 낮아졌다

 

 

 

MIN, MAX 는 문자와 날짜에도 사용이 가능하다

 

 

 

 

 

 

팀이 보스턴이면서 단일 년도 최다 홈런 친 사람의 정보

select top 1 *
from batting
where teamID = 'BOS' 
order by HR DESC;

이렇게 batting 테이블에서  id 를 알아온 다음 플레이어 정보에서 playerid 를 통하여 정보를 가져와 뿌려주면 된다

 

 

반응형

'서버(Server) > DB' 카테고리의 다른 글

DB : Insert into , Delete, Update  (0) 2023.02.03
DB : group by  (0) 2023.02.02
DB : Case, where  (0) 2023.01.31
DB : 날짜와 관련된 기능들 GETUTCDATE()  (0) 2023.01.30
DB : DATETIME 날짜 넣기, 시간 관련 함수와 기능들  (0) 2023.01.28
반응형
use BaseballData;

select birthMonth
from players;

select *,
	case birthMonth
		when 1 then N'겨울'
		when 2 then N'봄'
		when 3 then N'가을'
		when 8 then N'8이다'
		else N'그밖에'
	end as birthSeason
from players;

 

switch case 와 비슷한걸 알 수 있다

 

위에서 end as birthSeason  끝에 새로 추가된 컬럼의 이름을 birthSeason 으로 지정하겠다는 얘기다

 

case 의 where 조건에 맞춰 문자로 변환되어 추가 된것을 볼 수 있다

 

 

 

 

아래 처럼 조건문을 추가 하는 구문 또한 있다

select *,
	case 
		when birthMonth <=1 then N'back'
		when birthMonth <=3 then  N'나이스'
		when birthMonth <=6 then  N'앜'
		when birthMonth <=9 then  N'9이하'
		when birthMonth <=12 then  N'12이하'
		else N'그밖에'
	end as birthSeason
from players;

 

위 구문들에서 else 구문이 없다면 else 에 에 해당 하는것ㅇ느 birthSeason 에서 NULL 이 된다

주의 할점  birthMonth = NULL 이렇게 조건문을 쓸 수 없고 birthMont is NULL 이렇게 비교를 해야한다

 

 

 

 

반응형
반응형

시간을 얻어올때 UTC 로 통일된 시간으로 처리하면 어느 나라든지 상관 없이 기준이 되는 UTC 시간으로 처리 할수 있기 때문에 시간계산에 혼선을 줄일수 있다

 

select GETUTCDATE();

 

 

아래는 날짜와 관련된 기능들이다

select * 
from DateTimeTest
where time >= '20100101'

select GETUTCDATE();

select DATEADD(YEAR, 1, '20230101');
select DATEADD(DAY, 1, '20230101');

select GETUTCDATE();
--빼기도 가능하다
select DATEADD(SECOND, -30, '20230101');

--시간 차이
select DATEDIFF( SECOND, '20230103','20230102');

--문자 에서 특정 날자 등을 갖고 오고 싶을때
select DATEPART(DAY, '20230507');

--위의 결과와 동일하다
select DAY('20230507');

 

위 실행 결과 화면

 

반응형
반응형

 

 

 

 

 

뒤의 인자가 인스턴싱에 대한 처리의 개수를 얘기하는것으로 정점셰이더에서는 한번만 처리하고

인스턴싱 개수만큰 파이프라인에서 정점셰이더이후의 과정을 개수만큼 반복하게 되어 cpu 에서 gpu 로의 전송 과정을 아낄 수 있다

각 인스턴싱된 오브젝트들은 SV_InstanceID 로 구분할 수 있다
 
 

 

 
파티클들의 위치나 방향을 cpu 에서 gpu 로 넘겨주는게 아니라 gpu 내부에서 SturcturedBuffer 를gpu 쪽에 만들어 놓으면 gpu 내에서 현재 파티클의 정보를 g_data 에 넣고 이것에 대한 움직이는 정보를 RWStructuredBuffer 에다가 기록을 하여 파티클을 움직이도록 처리 할수 있다, GPU 내에서.
[t9 는 t 는 텍스처 같은 형태로 자료의 크기가 상수버퍼 처럼 정해져 있지 않는 것을 사용한다는 것 또한 알 수 있다]

 

그리고 물체들의 위치는 이전 단계인 Compute Shader 에서 위치를 먼저 계산해 놓게 된다

 

 

 

그려질 필요가 없다면 지오메트리 셰이더에서 파티클을 그리지 않는다

GS 는 도형 정보를 수정 할수 있따, 추가 및 제거

최적화를 위해 정점 하나만 받아서 정점이 살아 있지 않다면 정점을 더이상(메시를) 그리지 않는다
그려질 필요가 없다면 모든 정점을 받을 필요가 없기 때문

outputSteam 은 정점을 생성 할거라면 이곳에 정점들을 추가해 이 정점에 대한 메시를 그리게 된다

즉 outputSteam 이것이 비어져 넘겨지게 되면 아무것도 그리지 않는다는것

 

VIew space 주석이 있는 곳이 정점을 뷰시점에서 사각형을 만들어 outputSteam 에 추가해 사각형을 만들고 있다는 것을 알 수 있다

 

이렇게 처리하면 CPU 와 GPU 의 병복 현상을 많이 줄일 수 있어서 성능향상이 될 수있다

 

 

전체적인 순서를 컴퓨트 셰이더를 통하여 위치나 방향 생명주기를 먼저 계산한다음 이 정보를 GPU 배열에 저장해 놓고

이 정보를 그대로 정점셰이더와 지오메트리 셰이더를 지나면서 파티클을 그리는 순서이다

반응형
반응형

SELECT CAST('20230124' AS DATETIME)

 

위 구문은 이미지처럼 결과가 나타나게 되고

컬럼 타입은 DATETIME 이다

DATETIME  = 날짜와 시분초가 같이 있는 타입이다

 

 

SELECT CAST('20230124 05:03' AS DATETIME)

 

 

DATE 를 넣는 문자 형태는 다음과 같은 유형들이있다

YYYYMMDD

YYYYMMDD hh:mm:ss.nnn

YYY-MM-DDThh:mm

 

위 예제는 두번째 포맷에 맞춰 넣은 예시이다

 

 

  SELECT GETDATE();
  SELECT CURRENT_TIMESTAMP;

 

 

 

날차 추가하기

USE [BaseballData]
GO

INSERT INTO [dbo].[DateTimeTest]
           ([time])
     VALUES
		--('20090909')
          (CURRENT_TIMESTAMP)
GO






use BaseballData;

SELECT * 
FROM DateTimeTest;

-- 은 주석이다

 

 

 

SELECT * 
FROM DateTimeTest;

몇번 추가한 모습

 

 

조건식으로 비교할때 다음 처럼 할 수 있다 두개의 결과는 같다

use BaseballData;

SELECT * 
FROM DateTimeTest
where time >= CAST('20200101' as DATETIME);


SELECT * 
FROM DateTimeTest
where time >= '20200101';

CAST 로  DATETIME 으로 변홚을 하나 그냥 문자로 넣으나 결과는 같다

 

 

 

UTC TIME 은 어느 나라에서나 표준으로 사용 하는 시간이다

나라마다 시간이 다른데 각 로컬국가의 시간대로 하면 안되고 UTC 로 시간을 계산해야한다

 

SELECT GETUTCDATE();

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
반응형

 

원래 데이터

나이 구하기

select 2023-birthYear as koreanAge 
from players
where deathYear is null and birthYear is not null
order by koreanAge

 

 

 

쿼리 순서는 

 

from

where

select

orderby 

순 이기 때문에 위에서 쓰여진 네이밍을 해당 명령 포함 하단에서 쓸 수 있다

 

이런 경우엔 에러가 나는것을 알 수 있다

 

 

 

그래서 이렇게 다시 한번 birthYear 를 써서 연산해야한다

select 2023-birthYear as koreanAge 
from players
where deathYear is null and birthYear is not null and (2023-birthYear <= 80 )
order by koreanAge

 

 

 

 

 

 

그 외 일반적인 규칙들

  1. select 3-NULL 의 결과는 NULL 이다
  2. 정수 나누기 정수는 수학적으로 소수로 떨어진다해도 정수고
  3. 분모를 소수로 .0 처리해주면 소수로 나온다
  4. 0 으로 나누면 오류가 난다
  5. ROUND, POWER, COS 함수등들도 제공된다

 

그 외 연산들 참고 

https://learn.microsoft.com/en-us/sql/t-sql/functions/mathematical-functions-transact-sql?view=sql-server-ver16 

 

Mathematical Functions (Transact-SQL) - SQL Server

Mathematical Functions (Transact-SQL)

learn.microsoft.com

 

반응형
반응형
USE BaseballData;

select *
from players
where birthYear is not null
ORDER BY birthYear ASC;

기본이 asc 오름차순이고
desc 는 내림 차순을 의미한다

 

 

아래 코드는 앞선 정렬 순서가 같다면 그다음 순의 정렬 순으로 정렬 되는 것의 반복이다

select *
from players
where birthYear is not null
ORDER BY birthYear DESC, birthMonth desc, birthDay desc;

 

 

is null 같은 null 은 구현이 각각 다를 수 있어서 db를 옮길 일이 있다면 없는 것으로 생각하고 구현하는 것이 좋다

 

 

 

상위 10명을 보여주기 

select TOP(10) *
from players
where birthYear is not null
ORDER BY birthYear DESC, birthMonth desc, birthDay desc;

 

 

전체 데이터 중에서 상위(top) percent 로 해당하는 분포의 데이터를 가져올 수 도 있다

select TOP 0.07 percent *
from players
where birthYear is not null
ORDER BY birthYear DESC, birthMonth desc, birthDay desc;

 

top 은 ms sql 에서 있는데 다른 db 에서는 구현이 좀 다를 수 있다

 

 

 

 

 

offset 은 나온 결과에서 10 개를 건너 뛴 다음의 fetch next 로 3개만 출력 할때 아래처럼 쓸 수 있다

select *
from players
where birthYear is not null
ORDER BY birthYear DESC, birthMonth desc, birthDay desc
OFFSET 10 rows fetch next 3 rows only;

offset 이 구문은 다른 db 에서도 존재하는 구문이다

반응형
반응형
select *
from players
where birthCity LIKE 'New%';

% 는 뒤로 모든 문자가 다 올수 있고

_ 는 한문자만 올 수 있다

 

패턴 매칭을 시작할땐 LIKE 키워드를 넣어준다

 

 

 

 

 

아래 처럼 _ 만 하면 New 다음 한문자가 오는 케이스가 없어서 아무것도 조회가 안되는것을 알 수 있다

반응형
반응형

기본 사칙 연산이 select 에서 가능하다

select 33-30

 

 

 

from 이 select 보다 먼저 실행 된다, 영어 순서를 생각하면 이해하기에 좀더 편하다

SELECT nameFirst as name, nameLast, birthYear, birthCountry
FROM players
WHERE birthYear = 1974 OR birthCountry ='USA'​

 

 

SELECT nameFirst as name, nameLast, birthYear
FROM players
where birthYear != 1866

 

 

 

요소에 null 이 있는 경우는 is null

null 이 없는 경우만 볼려면 is not null 로 조건을 넣어주면 된다

 

select *
from players
where deathYear is not null

 

 

 

select *
from players
where deathYear is null

 

반응형
반응형

 

 

 

https://www.microsoft.com/ko-kr/sql-server/sql-server-downloads

반응형
반응형

2019-2022 Conference/Session Demos and Sample Database

 

 

 

19 버전이 Preview 로 나왔습니다

Download SQL Server Management Studio (SSMS) 19 (Preview)

 Download SQL Server Management Studio (SSMS) 19 (Preview)

https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms-19?view=sql-server-ver16

 

 

 

ref : https://www.sqlskills.com/sql-server-resources/sql-server-demos/

반응형
반응형

스레드 안정성

기본적으로 스마트 포인터는 싱글 스레드가 접근하는 것이 안전합니다. 멀티 스레드가 접근해야 한다면 스마트 포인터 클래스의 스레드 세이프 버전을 사용하세요:

  • TSharedPtr<T, ESPMode::ThreadSafe>
  • TSharedRef<T, ESPMode::ThreadSafe>
  • TWeakPtr<T, ESPMode::ThreadSafe>
  • TSharedFromThis<T, ESPMode::ThreadSafe>

이러한 스레드 세이프 버전은 원자적(atomic) 참조 카운팅으로 인해 디폴트보다 다소 느리지만 그 비헤이비어는 일반 C++ 포인터와 같습니다:

  • 읽기와 복사본은 항상 스레드 세이프입니다.
  • 안전성을 위해 쓰기와 초기화는 반드시 동기화되어야 합니다.

하나 이상의 스레드가 포인터에 접근하지 않는다는 것이 확실하다면, 스레드 세이프 버전을 사용하지 않음으로써 퍼포먼스를 향상시킬 수 있습니다.

팁 및 제한사항

  • 가급적이면 함수에 데이터를 TSharedRef 또는 TSharedPtr 매개변수로 넣지 않는 것을 권장합니다. 이러한 데이터의 해제와 참조 카운팅으로 인해 오버헤드가 발생하게 됩니다. 그 대안으로, 레퍼런스된 오브젝트를 ‘const &'로 넣으세요. (즉 읽기로만 사용 할때를 말하는 것)
  • 쉐어드 포인터를 불완전한 타입/형식으로 미리 선언할 수 있습니
  • 쉐어드 포인터는 언리얼 오브젝트(UObject 와 이로부터 파생된 클래스)와 호환되지 않습니다. 언리얼 엔진은 ‘UObject' 관리를 위한 별도의 메모리 관리 시스템이 있으며 (언리얼 오브젝트 처리 문서를 참고하세요) 두 시스템은 완전히 다른 시스템입니다

 

 

ref : https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/SmartPointerLibrary/

반응형
반응형

 

Freeze and thaw thread execution

You can freeze and thaw, or suspend and resume, threads to control the order in which the threads perform work. Freezing and thawing threads can help you resolve concurrency issues, such as deadlocks and race conditions.

 Tip

To follow a single thread without freezing other threads, which is also a common debugging scenario, see Get started debugging multithreaded applications.

To freeze and unfreeze threads:

  1. In the Threads window, right-click any thread and then select Freeze. A Pause icon in the Current Thread column indicates that the thread is frozen.
  2. Select Columns in the Threads window toolbar, and then select Suspended Count to display the Suspended Count column. The suspended count value for the frozen thread is 1.
  3. Right-click the frozen thread and select Thaw.
  4. The Pause icon disappears, and the Suspended Count value changes to 0.

 

 

Switch to another thread

You may see a The application is in break mode window when you try to switch to another thread. This window tells you that the thread does not have any code that the current debugger can display. For example, you may be debugging managed code, but the thread is native code. The window offers suggestions for resolving the issue.

To switch to another thread:

  1. In the Threads window, make a note of the current thread ID, which is the thread with a yellow arrow in the Current Thread column. You'll want to switch back to this thread to continue your app.
  2. Right-click a different thread and select Switch To Thread from the context menu.
  3. Observe that the yellow arrow location has changed in the Threads window. The original current thread marker also remains, as an outline.
  4. Look at the tooltip on the thread marker in the code source editor, and the list in the Thread dropdown on the Debug Location toolbar. Observe that the current thread has also changed there.
  5. On the Debug Location toolbar, select a different thread from the Thread list. Note that the current thread changes in the other two locations also.
  6. In the source code editor, right-click a thread marker, point to Switch To Thread, and select another thread from the list. Observe that the current thread changes in all three locations.

With the thread marker in source code, you can switch only to threads that are stopped at that location. By using the Threads window and Debug Location toolbar, you can switch to any thread.

 

 

 

 

https://learn.microsoft.com/en-us/visualstudio/debugger/how-to-use-the-threads-window?view=vs-2022&tabs=csharp 

 

Debug a multithreaded app - Visual Studio (Windows)

Debug using the Threads window and the Debug Location toolbar in Visual Studio

learn.microsoft.com

 

반응형

+ Recent posts