묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
인덱스에 관하여 질문있습니다
안녕하세요 데이터베이스 인덱스 부분 강의를 듣던 중 궁금한 점이 생겨 질문드리게 되었습니다. 강의에서 직업이 5종류밖에 없다면 class 에 인덱스를 거는 것은 좋지 않다고 하셨는데 질문1) 여기서 좋지 않다는 것은 속도 향상이 있긴하나 효과가 적을뿐만 아니라 인덱스 자체의 크기(용량)이 커지기 때문이라고 이해하면 될까요? 질문2) 만약 직업별로 검색을 많이 하는 상황을 가정한다면 인덱스를 사용하는 것이 좋을까요? 읽어주셔서 감사합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
REDO, UNDO, ROLL BACK, ROLL FORWARD 에 관해
안녕하세요 Q1) 지금까지 이음동의어로 생각해왔는데 REDO = ROLL FORWARD UNDO = ROLL BACK 강의 마지막 결론에서 정리해주신 내용을 보니 또 다른 의미인 것 같아서 살짝 아리송 하네요 REDO 와 UNDO는 발자취(LOG)라고 보면 ROLL FORWARD나 ROLL BACK은 그 발자취를 따라 가는 행위를 말하는건가요? 마지막 질문으로 Part5 DB를 끝내봅니다 ㅎㅎ 감사합니다.
-
미해결데이터베이스 중급(Modeling)
M : N 관계 질문드립니다.
안녕하세요. 최근에 강의를 사서 매우 만족하며 듣고 있습니다. 들으면서 궁금한 점이 있어서 질문좀 드립니다. 예를 들어 학년과 반 테이블이 있다면, 제가 SpringJPA 를 공부하면서 배우기로는 한 학년에 여러 반이 존재하고, 한 반은 여러 학년에 존재할 수 있으므로 서로 1 : N 관계인 M : N 관계가 형성이 되는데요. 근데 이 강의를 접하고 나서는 굳이 중간 테이블을 하나 만들면서까지 M : N 관계를 고집하지 않아도 될 것 같더라구요. 예를들어 한 학년에는 여러 반이 존재하니, 학년 테이블과 반 테이블을 1 : N 관계로 설정 하고, 이번 강좌에서 한 것처럼 반 테이블에 외래키인 학년 ID 랑 반 ID를 같이 묶어서 PK로 만들면 PK가 중복될 일 없이 M : N 테이블 관계를 만든 것 처럼 역할을 할 수 있는것 같더라구요. 그래서 여기서부터 의문이 들었습니다. 실전에서는 M : N 관계라도 비즈니스 관계가 (예를 들면 이번 강의에서 "선생님" 이 "과목" 을 "개강하다." 처럼) 있는 것이 아니면 위에서 말한 학년 반 처럼 1 : N 으로 만들고 N 테이블 쪽에는 PK 를 묶어서 정의하나요? 그리고 이번 강의에서처럼 강사님처럼 "선생님" 이 "과목"을 "개강하다" 라는 문맥을 만들어서 비즈니스 관계를 찾는게 아직은 익숙하지가 않더라구요. 혹시 요구사항문을 보고 이런 것을 빨리 캐치하는 팁 같은것은 없을까요? 당연히 반복된 연습이 제일 최고인 것은 알지만 혹시나 싶어서 질문드려봅니다. 좋은 강의를 정말 좋은 가격에 만들어주셔서 너무 감사드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
DBMS에서 Non Clustered Index를 사용하지 않는 이유
안녕하세요 강의 9분부터 시작되는, DMBS 자체적으로 Non Clustered Index를 사용하지 않는 이유가 궁금해서 질문드립니다. Q1) 다른 수강생분들이 올린 질문도 참고를 했는데 SELECT * FROM TestOrders WHERE CustomerID = 'QUICK'; 다음과 같은 sql문을 실행했을 때 DBMS가 INDEX를 사용하지 않고 SCAN을 하는 이유가 실제로 힙 테이블 내에 page가 메모리에 적재되지 않아 역효과가 발생할 수 있기에 라고 Full scan을 하는게 더 낫다고 하셨습니다. 마치 OS 가상메모리에서 page fault 가 일어나는 현상과 비슷하다고 생각을 합니다. 여기까지는 이해가 됐습니다. 다만 full scan이 더 효율적일 수 있을까? 하는 의구심이 듭니다. SELECT * FROM TestOrders WHERE CustomerID = 'QUICK'; 다음과 같은 sql문을 실행했을때 테이블의 데이터들도 인메모리 상태가 아니라면 물리 저장소에 접근후 메모리에 적재를 해야할텐데 과연 더 효율적일까 생각이 듭니다. 둘 다 메모리에 없다면 물리 저장소까지 다녀오는 건 비슷하다고 생각하는데 Full Scan이 조금 더 빠른건 Locality 때문인걸까요? Q2) 마지막 질문으로 Clustered Index와 비교해서 생각을 해보고싶습니다. Clustered Index는 Leaf Page가 곧 Data Page인데 이 Data Page도 메모리에 항상 적재되어 있을 것 같진 않습니다. 그럼에도 불구하고 Non Clustered Index보다 Select와 같은 Lookup이 빠른 이유는 Data Page내에 정렬된 데이터들과 이에따라 자연스레 형성된 Locality 때문인가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
Non Clustered Index 동작방식
안녕하세요 :) Q1) Clustered Index 를 추가 한 뒤 Non Clustered Index의 변화를 살펴보면 PageID 값도 변하고 Heap Table이 사라짐에 따라 Heap RID도 변하게 됨을 확인했습니다. 궁금한 것은 강의 후반부 *18분 이후 내용입니다. Heap Table이 사라져도 Non Clustered Index를 사용해서 테이블에 저장된 데이터를 찾게 될텐데, 강의중 말씀하신 고유한 key 값이란 무엇인가요? UNIQUIFIER를 말씀하신걸까요? Q2-1) Clustered Index를 추가하면 Non Clustered Index의 구조가 변하는 것은 확인을 했는데 이는 OrderID라는 공통 Index가 있어서 가능한 일 인 것 같습니다. 공통 Index가 없이 Clustered Index를 추가해도 구조에 변화가 생기게 되는지 궁금합니다. Q2-2) 이어서 엉뚱한 질문을 드리면 Non Clustered Index 추가시 매커니즘을 보면 Non Clustered Index를 통해 고유한 Key 값 얻기 -> 고유한 Key 값으로 Clustered Page에서 Lookup 이와 같은 매커니즘인데 Non Clustered Index를 통해 얻은 고유한 Key값이 Clustered Page에서 데이터를 Lookup할 때 SCAN 가 아닌 SEEK을 한다는 보장이 있을까요? 다른 표현으로(맞는 표현일지는 모르겠지만...) Key값이 Clustered Page에서 Index로서의 역할을 제대로 할 수 있는건가요? 직전의 질문과도 연관이 있어보이는데 제 질문의 요점은 Non Clustered Index의 결과물을 Clustered Index의 Lookup에서 재사용하는 그림인데, 두 Index는 정의시 지정한 컬럼이 다른데 호환이 가능한지 궁금하네요. 감사합니다~
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
mongodb ObejctID Error
Update with ObjectID를 하던 중 아래와 같은 에러가 발생하였습니다. 강의와 동일하게 수행하였다고 생각하는데 뭐가 문제 일까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
Clustered Index에 DBCC PAGE 사용은 불가능한가요??
안녕하세요! 항상 빠른 답변 감사드립니다! Clustered Index에 대해 DBCC IND에서 Leaf Page 번호 확인 후 DBCC PAGE 로 실제 정보가 어떻게 들어가 있는지 보려고 시도했는데 "DBCC 실행이 완료되었습니다. DBCC에서 오류 메세지를 출력하면 시스템 관리자에게 문의하십시오."가 뜹니다. Non-clustered 와 다르게 clustered 인덱스의 leaf page에 담겨 있는 실제 데이터는 이런 쿼리로 볼 수 없는 건가요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
게임 개발에서도 ORM을 사용하는 편인가요 ?
요즘 ORM 기술이 핫한거 같은데 게임 개발 업계에서도 ORM이 핫한가요 ?
-
미해결오라클 성능 분석과 인스턴스 튜닝 핵심 가이드
KEYSTORE 에러 질문드립니다.
안녕하세요KEYSOTRE 값 재설정 시 에러가 생겨 질문드립니다. ADMINISTER KEY MANAGEMENT SET KEY USING TAG 'rotate_key' FORCE KEYSTORE IDENTIFIED BY VERYWelcome123_# WITH BACKUP USING 'backup_key'; 그대로 복사하여 사용했지만 다음 사진과 같이 에러가 나옵니다. 이런 경우에는 어떻게 진행하면 될까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
선언할 때 AS는 생략가능한가요?
안녕하세요. 위쪽에서는 DECLARE @i AS INT 형태로 선언하셨는데, 테이블 변수는 DECLARE @test TABLE 로 하시더라고요. 그래서 타입이 테이블일 때만 AS를 떼도 되는건지 궁금해서 이것저것 해보니, AS는 있든 없든 동일하게 동작하는 것 같습니다. 이게 SQL server 에서만 그런건지, AS는 원래 없어도 되는건지, 아니면 다른 기능이 있는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
메모리와 커버드 인덱스 사용 질문입니다.
1. 메모리 찾으려는 데이터가 메모리에 올라와 있다는 보장이 없다고 하셨는데 그렇다면 반대로 Clustered Index 는 항상 올라와 있는건가요?아니면 불러와야 하지만 불러올 부분을 정확히 알기 때문에 비효율적인 부분없이 처리한다는 의미인가요? 2. 설명을 들어보면 INDEX 설정할 때 WITH 를 거는게 DML 작업에 부하가 적다고 하셨는데 주로 커버드 인덱스를 활용하시는 이유를 알 수 있을까요?
-
미해결mongoDB 기초부터 실무까지(feat. Node.js)
이미지나 동영상 예제
저번에도 말씀드렸지만 이미지나 동영상 예제 올려주실 수 있나요? 물론 몽고DB 강의에 범주를 넘어가는것은 알겠으나, 아예 없다고는 생각하지 않아서요. 애매하게 중간에 걸친 것 같은데 혹시 예제를 올려주실 수 있나해서요? 아니면 참고할만한 사이트 부탁드립니다. 늘 친절한 답변 주셔서 감사합니다. ps: 앗!!!! 미니 강의 올려주신다 하셨네요. 그럼 강의도 좋은데 실무에서 사용하고 있는 저장 관련 모듈 사이트 알려주시면 감사하겠습니다. ^^ 찾다가 보니 아래와 같은 자료가 있어서 남깁니다. 그런데 제가 궁금한게 Streams 를 많이 사용하나요? Multer는 생각보다 안 사용하는 것 같네요. 생각해보니 mongodb 보단 nodejs범주인것 같긴하네요. 그래도 강사님은 어떤걸 더 추천 하시나요? multer 보니깐 데이터 저장된 파일이 이상한 문자로 나오던데 이 파일을 저장하는건 괜찮은 방법 같습니다만 .... 실무에서 어떤걸 쓰는지 궁금하네요. 제일 궁금한건 Streams인데 범주를 넘어서면 굳이 대답안해주셔됩니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
유니티의 Scriptable Object를 DB로 사용해도 될까요?
https://github.com/Heretic-byte/Strategy2/blob/master/Assets/Scripts/SO/UnitTable.cs 이런식으로 유니티가 제공하는 Scriptable Object를 db처럼 사용하는 코드들을 봤는데요 현업분들중에 db를 이런것으로 사용하는 분은 들어보지 못했습니다. 혹시 이런 방법을 사용하지 않는 치명적인 이유가 있을까요? 또 언리얼에서도 FDataTableRow 라는 데이터테이블의 역할을 해주는 기능이 있던데 기업에서도 이런 기능을 사용하나요? 아니면 전부 sql로 처리하게 되나요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
안녕하세요 선생님 lock과 spinlock에 대해서 질문드립니다.
예전 스핀락 설명 하실때 메모한 내용입니다. 락을 걸고 있는 상대방이 조금만 기다리면 놔줄 것 같다는 확신이 있을 때는 굳이 Context-Switching까지 가지 않고 무식하게 대기하는 SpinLock이 좋습니다. 비행기 1인 화장실 앞에서 대기하는데, 안에서 손 씻고 있는 소리가 들린다면, 굳이 자리에 돌아가서 대기하기 보단 문앞에서 조금만 더 기다리는게 현명합니다. MMO에서 lock을 쓰는 경우는 대부분 컨텐츠의 멀티쓰레드 경합 처리에서 사용하게 되는데, 어마어마하게 오래 걸리는 작업이 아닌 경우가 많기 때문에 SpinLock이 대부분의 경우에서 유리합니다. 질문 컨텍스트 스위칭이라는게 a쓰레드가 공유 자원을 다쓰고 쓰레드 풀로 들어가면 b라는 쓰레드가 공유자원을 획득해서 사용하는 걸로 알고 있는데 그러니까 프로세스 내부에 stack 공간만 바뀌는 스핀락이라는게 무한 반복 타고 들어가서 계속 기다리잖아요 상대방이 빠져나올떄 까지 lock은 접근 했다가 a라는 쓰레드가 사용중이네 글멈 나는 다른 작업 하고 이따 한번 더와바야지 이 개념이 아닌가요? 여기서 왜 컨텍스트 스위칭이라는 표현을 쓰셨는지 여쭤봅니다? a가 가고 b가 들어가야 컨텍스트 스위칭이 성립되는 게 아닌가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
북마크 룩업 강의에서 12:10 부분에서 질문드립니다.
1. 첫번째 질문입니다. NonClustered Index로 Index Seek를 하더라도 느릴 수 있는 이유가 RID값을 가지고 Heap Table에서 RID Lookup을 하는데, 데이터가 메모리에 없으면 하드디스크에서 가져와야 하기 때문에 느리다고 하셨는데, 그것은 비교대상인 Table Scan쪽도 마찬가지 아닌가 하는 생각이 듭니다. 그래서 NonClustered Index로 Index Seek를 하더라도 느릴 수 있는 이유가 될 수 없다는 생각이 듭니다. 2. 두번째 질문입니다. 결론 부분에서 Nonclustered Index가 악영향을 주는 이유가 북마크 룩업이 심각한 부하를 야기할 때라고 하셨는데, 북마크 룩업에서 심각한 부하를 일으키는 경우가 예시로 설명해주신 CustomerID와 ShipVia를 함께 검색하는 부분에서, ShipVia와 일치하는 정보를 찾기 위해 ShipVia가 일치하지 않는 Leaf Page까지 모두 검색해야 하는데, 이미 ShipVia가 어느 Leaf Page에 있는 지 알고 있는 경우와 비교했을 때 Leaf Page를 뒤지는(북마크 룩업) 행위가 더 많기 때문에 부하가 많은 거라고 이해했습니다. 그래서 북마크 룩업으로 인해 NonClusteredIndex가 느릴 수 있다. 라고 이해했습니다. 그래서 북마크룩업을 수행하긴 하는데 필요한부분만 진행하도록 인덱스를 만들어야 한다고 이해했습니다. 잘 이해했나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
unsigned 타입형은 어떻게 처리하는데 너무 궁금합니다.
안녕하세요 정말 강의 잘들고 있어요 감사해요 사랑해요 파트 1000000000까지 만들어주세요 ㅠㅠ! 제월급 여기다 다쓸께요 예전부터 궁금한게 있었는데 mssql은 unsinged를 지원하지 않는다고 알고 있는데 정말인가요? 그러면 게임서버 코드에서는 unsigned인 특정데이터를 사용하고 DB에 저장해야 한다고하면 이거는 어떻게해야하나요? 그냥 singed 도 맥시멈같이 엄청 크기때문에 뭐 상관없어 거기까지 가겠어? 라고 생각하기에는.. mmorpg게임이 오랫동안 서비스하면 수치가 언젠간 끝에 다다를건데 음.. 보통 실무에선 어떻게 처리를 하나요 저런경우에는? 그냥 서버 코드에서도 unsigned를 사용안하게 제약을 걸어버리나요? 근데 보통 db에 저장되는 변수는 클라에서도 쓰고 서버에서도 쓰는경우가 많을텐데 클라 서버 둘다 제약을 걸어버린다? 건다해도 실무자들이 잘지키지도 않을것 같은데.. 음 잘 모르겠어요 mysql은 unsigned를 지원해서 상관없을것 같은데 mssql같은경우 unsinged어떻게 처리하는지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
스레드 락에 관한 질문입니다.
안녕하세요. 공부하면서 다시 질문이 생겨 문의 드립니다. 다음강의때 언급될 내용인건지 모르겠는데 본강의에도 언급이 되어서.. sql 서버를 스레드에서 접근하게 되면 내부적으로 알아서 처리하기에 락이 필요없다고 하셨는데. 혹시 sql 변수자체도 전역변수하나를 동시에 접근해서 사용해도 되는지요? 아니면 스레드로컬변수로 스레드당 하나씩 생성해야 되는걸까요? 개인적인 생각에는 처음 할당 초기화때만 동기화에 조심해야 되는걸까 싶습니다. 그리고 레디스 변수도 똑같은 질문을 드립니다(레디스도 내부 처리는 알아서 동기화 해주는걸로 알고 있습니다). 여튼 바쁘신 와중에도 강의 꾸준히 올려주셔서 감사드리며 다음 강의도 손꼽아 기다리고 있겠습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
복합 인덱스 강의 중 궁금한 사항이 있어 질문 드립니다.
안녕하세요. 복합 인덱스 강의를 듣다가 이해가 잘 되지 않는 부분이 있어 질문드립니다. 강의 중에 "인덱스(A, B) 사용중이라면 인덱스(A) 없어도 무방 하지만 B로도 검색이 필요하면 인덱스(B)는 별도로 걸어줘야 함"이라는 부분이 잘 이해가 되지 않습니다. 위의 말의 뜻은 인덱스(A, B) 형태로 복합 인덱스를 사용한다면 인덱스(A, B)를 이용해 검색을 하거나 인덱스(A)를 이용해 검색을 한다면 별도로 인덱스 A만 사용해서 별도의 인덱스를 만들 필요가 없다는 뜻이고, "B로도 검색이 필요하면 인덱스(B)는 별도로 걸어줘야 함"이라는 건 인덱스(B)만 사용해서 뭔가 검색을 하고 싶을 때는 인덱스(B)를 별도로 만들어서 사용해야한다.라는 뜻인가요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part5: 데이터베이스
redis 관련 질문
안녕하세요 강의 정말 잘 듣고 있습니다. 강의중에 redis가 윈도우서버에 정식 지원 안된다고 하셨는데 그럼 윈도우서버 환경에서는 redis를 활용해서 서비스는 불가능한가요?
-
미해결DATABASE 1&2 - MySQL
이럴때 탈출은 어떻게해야되나요?
INSERT INTO topic (title,description,created,author,profile) VALUES('MySQL','MySQL is...',NOW(),'egoing','developer); '> ; '> ; '> ; '> ; '> ; '> ;;; '> show databases; '> '> '> exit '> ; '> q; '> q! '> exit '> ; 무슨 키를 입력해도 다 계속 >이게나와요 이럴때 전에로 돌리거나 나가거나 취소하기 같은 기능은없나요?