"전체 글"에 해당되는 글 - 363건
- 2017.05.13 유니티 5.X와 함께하는 C#첫걸음..
- 2017.04.30 배열보다 리스트가 좋은 이유
- 2016.07.13 Git 기초_1 Clone, Commit, Push (with.TortoriseGit)
- 2016.06.19 C++ 11 람다식(Lamda)이란 - 1
- 2016.06.06 PuTTY 사용법 1
- 2016.06.06 vmware로 centos7 리눅스 설치 1
- 2016.05.11 MSSQL MYSQL 차이
- 2016.05.11 MSSQL 뷰, 인덱션, 트랜잭션, 저장 프로시저 정리
- 2016.05.10 MSSQL 기초 정리
- 2016.04.21 IOCP 소켓 종료 상황
Post
조금씩 하는 중이다.
이제 겨우 GameManager 만드는 10장하는 중^^;;
왜이렇게 느리냐구 하면.. 놀거 다놀고 있어서 ㅋㅋㅋㅋ
(스트레스 받는거 싫어함)
그래서 즐기는 기분으로 유니티 하는 중이다 ㅎㅎ
잘 이해 안가는부분도 있지만 굉장히 재밌다:)
얼른 Node.js도 공부하고싶다ㅠ_ㅠ
'이전게시판 > Unity' 카테고리의 다른 글
유니티 스프라이트2D (0) | 2018.04.28 |
---|---|
유니티 네비게이션, 파티클 (0) | 2018.04.22 |
총알 만들고 쏘기(Prepfeb) (0) | 2018.04.21 |
키보드로 움직이기 or 마우스 방향으로 이동하는 물체 스크립트 (0) | 2018.04.15 |
Unity 기초 정리 (0) | 2018.04.14 |
유니티 C# Scene 변경 (0) | 2018.04.14 |
UGUI 캔버스, UI 정리 (0) | 2017.10.11 |
유니티 UGUI 버튼 예제 (0) | 2017.10.08 |
Post
배열보다 리스트가 좋은 이유
- 배열의 크기는 바꿀 수 없다
- 리스트의 크기는 바꿀 수 있다
- 리스트는 요소를 추가하거나 삭제하기 쉽다
- 배열의 요소 수를 늘리려면 원하는 만큼 요소의 수를 늘려서
배열을 새로 만들고 기존 요소를 모두 복사하는 과정이 필요하다.
- 그냥 List가 아닌 ArrayList는 형을 지정하지 않고 사용할 수 있다.
but 배열이 속도가 더 빠르다.
'이전게시판 > C#' 카테고리의 다른 글
프로퍼티 스택오버플로우.. (0) | 2018.08.10 |
---|---|
StreamReader 한글깨짐 오류 (0) | 2018.08.10 |
C# var, 무명메서드, 람다식, LINQ 예제 (0) | 2016.02.18 |
Post
Git 기초_1. Clone, Branch, Merge
git을 어쩌다가 사용하게 되었다.
그런데 SVN이랑 달라서 너무 어렵다ㅠㅠㅠㅠㅠ
뭐 GIT 자료야 많지만 콘솔이 많고 TortoiseGit은 별로 없어서(GUI라서 쉬우니까 그럴것 같지만..)
나를 위해 한번 정리해본다.
1. Clone
맨 처음에 Clone은 저장소에 있는 데이터를 내 local로 받는 명령어이다.
TortoriseGit에는 친절하게 Git Clone이라고 써져있다.
클릭하면 위와 같은 창이뜬다.
URL에 저장소 주소를 넣으면 되는데 깃허브를 모르는 사람은 당장 검색창에 깃허브를 쳐서
나의 인터넷 저장소를 만든다.
아무튼 만들고 나서 깃 저장소 주소를 URL에 넣어주고 OK 누르면 데이터가 받아진다.
로컬 Git 저장소에 데이터가 잘 받아졌다는 것은
초록색 화살표가 생긴것으로 알 수 있다.
2. Commit
Commit과 Push의 차이점은 Commit은 로컬 저장소에서 저장하는 것이고
Push는 진짜 저장소에 저장하는 것이다.
Git은 로컬 저장소와 진짜 저장소(말이 이상한데;;) 가 따로 존재한다.
SVN처럼 Commit한다고 바로 올라가지 않는다.
간단하게 Git Commit을 선택하면 된다.
Push도 쉽게 TortoriseGit > 을 클릭하면 옆에 Push 메뉴가 뜬다.
그것을 클릭해주면 된다.
브런치는 새로운 작업을 할 새로운 길을 만드는 작업이다.
만약 원본 작업인 master가 있고 새로만든 브런치 Test가 있다면
서로 같은 파일이지만 전혀 영향을 받지 않는다.
그래서 master에서 어떤 파일을 고쳤어도 Test에선 파일이 하나도 수정되지 않는다.
그래서 별개의 작업을 할 때 유리하다.
만약 SVN으로 작업했다면 저장소를 두번 내려받아야 했을 것이다.
(과거의 내가 그랬다.)
브런치랑 머지는 다음 이시간에!!!
'이전게시판 > Git' 카테고리의 다른 글
Git Cui Commit (0) | 2018.10.13 |
---|---|
Git Branch (0) | 2018.10.12 |
invalid username or password Sourcetree 해결 (0) | 2018.10.12 |
GIT 사용 방법 정리 (0) | 2018.10.12 |
Post
C++ 람다식이란?
람다는 익명함수로 크게 Capture(캡쳐), Parameter(인자), Return(리턴), Body(몸체) 로 나눌 수 있다.
아무것도 안하는 람다함수는
[] () {};
로 표현할 수 있다.
[Capture] (Parameter) {Body}
1. Capture
Capture는 람다 함수 밖에 있는 변수를 가져와 사용하고 싶을 때 사용한다.
예를들어 선언되어있는 지역변수 a를 출력하고 싶다면 이렇게 한다.
[int a](){ cout << a << endl; };
괄호안에 =, & 이 들어갈 수 있는데
= 는 모든 지역변수를 값으로 사용하겠다는 뜻이고
&는 모든 지역변수를 레퍼런스로 사용하겠다는 뜻이다.
2. Parameter
람다 함수 안에서 사용할 인자를 선언한다.
만약 지역변수와 이름이 같다면 에러를 나타낸다.
그리고 생략할 수도 있다.
명시적으로 3을 출력하고 싶다면
[](){cout<<3<<endl;}();
뒤에 ();를 붙여서 쓰면 호출이 된다.
어떤 함수에 저장해서 사용하고 싶다면
auto func = [](){cout<<3<<endl;};
func()
();를 빼야 한다.
이것말고 더 어려운 부분도 있었는데 계속 정리해야겠다.
'이전게시판 > C, C++' 카테고리의 다른 글
C3083 왼쪽의 기호는 형식이어야 합니다 에러 정방선언... (0) | 2018.05.03 |
---|---|
typedef한 자료형의 별명을 리턴값으로 사용시 에러... (0) | 2018.04.26 |
프로토콜, 라우터 (0) | 2018.04.19 |
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
IOCP 소켓 종료 상황 (0) | 2016.04.21 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
Post
PuTTY 다운로드 링크
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
PuTTY는 SSH 접속을 하는 프로그램이다.
윈도우 환경에서 VMWare을 사용해서 CentOS 7 리눅스 환경으로 들어가면
윈도우 환경과 리눅스 환경 간의 클립보드 복사 붙여넣기가 되지 않는다.
PuTTY를 사용하면 창 전환 및 클립보드가 아주 잘 작동한다.
나는 vmware로 만든 가상 리눅스에 접속하려고 했다.
리눅스로 접속해서 IP 주소를 확인해야한다.
ip addr show
명령어를 치면 해당 리눅스 서버의 ip를 확인 할 수 있다.
그 ip를 HostName에 적으면 접속이 된다.
'이전게시판 > Linux' 카테고리의 다른 글
vmware로 centos7 리눅스 설치 (1) | 2016.06.06 |
---|
Post
VMware로 CentOS7 리눅스 환경 구축 방법
VMware로 CentOS7을 설치해서 리눅스 프로그래밍을 하려고 합니다.
까먹을까봐 여기에 저장해놓습니다.
1. VMware Workstation 12 Player 다운로드
https://my.vmware.com/en/web/vmware/free#desktop_end_user_computing/vmware_workstation_player/12_0
2. CentOS 7 설치
https://www.centos.org/
3. VMware로 다운받은 CentOS7 이미지 파일 실행시키기.
4. CentOS 7 Install 시작
5. 설치 대상 디스크 선택하고 설치 시작
6. 네트워크 및 호스트명을 클릭해서 이더넷을 활성화 시켜줍니다.
7. 완료됩니다.
CentOS 7이 무사히 설치되었다면 기본적인 패키지를 yum으로 깔아주세요.
gcc라던가 yum update도 잊지마시구요.
Post
MSSQL MYSQL 차이점 비교
NULL값 비교
MSSQL : ISNULL
MYSQL : IFNULL
CASE문
MSSQL : CASE
MYSQL : IF
문자열 합치기
MSSQL : +
MYSQL : concat
'이전게시판 > MySQL MSSQL' 카테고리의 다른 글
MSSQL 뷰, 인덱션, 트랜잭션, 저장 프로시저 정리 (0) | 2016.05.11 |
---|---|
MSSQL 기초 정리 (0) | 2016.05.10 |
MSSQL JOIN (INNER JOIN, OUTER JOIN) (0) | 2016.04.06 |
Post
MSSQL 뷰, 인덱션, 트랜잭션 정리
테이블과 뷰
1. 테이블과 뷰
* 제약조건 : 테이블 무결성을 지키기 위해 제한된 조건을 의미
즉 입력 시 특정 조건을 충족시키게 만든다.
1) PRIMARY KEY(기본키) : 중복X, NULL X
ex) UserID char(8) NOT NULL PRIMARY KEY
2) FORGIN KEY(외래키) : 두 테이블 사이의 관계 선언, 데이터 무결성 보장
다른 테이블에 의존하게 됨
기준 테이블의 열은 반드시 Primary Key이거나 Unique 제약 조건 설정
3) UNIQUE : 중복되지 않는 유일한 기술. PRIMARY와 차이, NULL 허용
(단 한개만 허용)
4) CHECK 제약 조건 : 입력되는 데이터를 점검하는 기능
5) DEFAULT는 값 입력 X, 자동 입력되는 디폴트 값
* 임시 테이블 : 임시로 잠깐 사용하는 테이블
테이블을 생성할 때 테이블 이름 앞에 #, ## 붙이면 된다.
2. 데이터베이스 캐체의 이름과 외부 서버 개체의 접근
* 데이터베이스 개체
테이터베이스의 정식 명칭 : 서버 이름. 데이터베이스.이름.스키마이름.개체이름
스키마는 데이터베이스 내에 있는 개체들을 관리하기 위한 묶음
스키마 != 소유자
개체를 생성할 대 아무것도 붙이지 않으면 자동 디폴트 스키마인 dbo
스키마란?
데이터베이스 안에 있는 네임스페이스.
3. 뷰
* 뷰 란? 테이블과 비슷한 역활을 하도록 SELECT 문을 이용해 만드는 개체
ex ) CREATE VIEW v_userTb1
AS
SELECT userid, name, addr, from UseTb1
GO
SELECT * FROM v_userTb1
* 뷰의 종류?
표준 뷰 : 한개 또는 그 이상의 테이블을 이용해 만든 뷰.
분할 뷰 : 여러 대의 서버에 있는 테이블들을 조인해 하나의 테이블 처럼 보이게 만든
인덱싱 뷰 : 실제 데이터가 존재하느 뷰. 클러스터 인덱스 정렬에 의해 정렬된 결과를 보여주는 뷰.
시스템 뷰 : 말 그대로 시스템에 접근 못하도록 만든 뷰
인덱스
1. 인덱스의 개요와 활용
인덱스란? 목차와 같은 것. 데이터를 좀 더 빠르게 찾을 수 있도록 해주는 도구.
단점은 필요없는 인덱스를 만들면 공간만 차지하고 느려짐
장 ? 검색속도가 무척 빨라진다. (항상 그렇진 않다)
그결과 시스템의 부하가 줄어들어, 결국 시스템 전체의 성능이 향상
단 ? 인덱스 추가 공간 필요.
인덱스 생성 시 시간이 소요될 수 있고 데이터 변경 작업이 자주 일어나면 성능 나빠짐
2. 인덱스의 종류
클러스터형 인덱스 : 순서대로 정렬. 인덱스 자체가 책 내용.
비클러스터형 인덱스 : 찾아보기가 별도로 있음.
클러스터 인덱스는 테이블 당 하나만 생성.
비클러스터는 테이블 당 여러개 생성 가능.
PRIMARY KEY 로 지정하면 자동적으로 클러스터형 인덱스
3. 인덱스 내부동작
B-Tree => 트리 형식을 사용함 => 그래서. 트리.노드.부모누드. 위치 등이 변경 된다면 느려짐.
4. 인덱스 특징
1) 클러스터 인덱스
- 클러스터형 인덱스를 생성할 때는 데이터페이지 전체를 다시 정렬.
- 그러므로 시스템 부하가 있을 수 있다.
- 검색속도 빠르다. 업데이트 느림.
- 테이블 한개에 생성 가능.
2) 비클러스터형 인덱스
- 그냥 페이지는 두고 인덱스 구성(목차, 찾아보기 처럼 되어있다.)
- 찾기는 느려도, 데이터 변경은 빠름.
- 남용하면 더 느려진다. 적절히 사용할 것.
5. 인덱스를 생성해야 하는 경우는?
- where 절에 사용되는 열에 인덱스를 만든다.
- where 절에 결과가 자주사용하는 경우에야 가치가 있다.
- 데이터 중복도 높은 열 x
- 외래키가 있는 열
트랜잭션과 잠금
* 트랜잭션이란 ? 전부 되거나, 전부 안되거나. 원자성. 일관성. 격리성. 영속성
* 트랜잭션의 문법과 종류?
1. 자동 커밋 트랜잭션 : 각 쿼리마다 자동적으로 붙여지는 것.
2. 명시적 트랜잭션 : 직접 BEGIN TRAN ~ COMMIT TRAN 사용
3. 암시적 트랜잭션 : SET IMPLICIT_TRANSACIONSON
4. 일괄 처리 범위 트랜잭션
2) 잠금
사용자가 데이터를 사용하면 다른 사용자가 변경 못하게 만듬.
3) 블로킹 : 잠금이 생성되어 다른 개체 접근 못함.
저장 프로시저
저장 프로시저란 ? 프로그래밍 기능 제공.
쿼리 문의 집합. 일괄 처리하기 위한 용도, 모듈화
특징?
1. SQL 성능을 향상시킬 수 있다. > 최적화. 컴파일 내용이 캐시에 저장. 다시 가져다 쓰므로 속도가 빨라짐.
2. 모듈식 프로그래밍 기능 => 언제든 실행 가능.
3. 보안 강화. 프로시저 접근 권한
4. 네트워크 전송량 줄임
'이전게시판 > MySQL MSSQL' 카테고리의 다른 글
MSSQL MYSQL 차이 (0) | 2016.05.11 |
---|---|
MSSQL 기초 정리 (0) | 2016.05.10 |
MSSQL JOIN (INNER JOIN, OUTER JOIN) (0) | 2016.04.06 |
Post
MSSQL 기초 정리
mssql 책 보고 중요한 부분 정리한 것.
1. 기본적인 T-SQL 구문
1) SELECT : 테이블 데이터 조회 할 때 사용
2) WHERE : 조건을 줘서 결과를 조회.
3) BETWEEN , AND : ~사이에 조건문.
ex) Select Name, height From UserTb1 Where height Betwwen 180 AND 183
4) ANY, ALL, SOME, 하위쿼리
하위쿼리 ? 쿼리문안에 쿼리문이 들어있는 것
ANY : 하위쿼리의 결과 중 하나만 만족시키면 됨.
ALL : 하위쿼리의 결과를 모두 만족시켜야 함.
SOME == ANY 동일한 의미
5) ORDER BY 절 : 결과물의 출력순서
오름차순 : ASCENDING 내림차순 : DESCENDING
6) 중복된 데이터 한건만 보여준다.
DISTINCT ex) SELECT DISTINCT addr FROM userTb1
7) Having 절 : where 과 비슷한 개념. 조건을 제한하되 집계함수에 대해서 제한
8) JOIN : 두 개 이상의 테이블을 서로 묶어서 하나의 결과집합으로 만들어내는 것을 의미
InnerJoin : 조건에 맞는 두개의 테이블 정보를 묶어서 보여줌
ex ) SELECT <열목록>
FROM <첫번째 테이블>
INNER JOIN <두번째 테이블>
ON <조인될 조건>
WHERE <검색 조건>
OuterJoin : 조건에 맞는 두개의 테이블 정보를 보여주는데, 없는 데이터를 NULL로 표시해서 보여줌(InnerJoin과 차이점)
ex) SELECT <열목록>
FROM <첫번째 테이블>
ON <조인될 조건>
WHERE <검색조건>
CROSS JOIN : 모든 행을 조인시키는 기능
SELF JOIN : 자체조인, 자기 자신과 조인 시킨다.
2. 데이터베이스 생성과 관리
1) mdf, ndf : 뎅터파일, 실제 데잍와 그행들이 저장됨
ldf : 트랜잭션 로그파일
2) SQL 작동 방식
1. 사용자가 조회 OR 변경을 한다.
2. 실제데이터
3. 트랜잭션 로그로 남긴다.
4. 결과를 사용자에게 보여준다.
3) 데이터 파일
데이터 파일(mdf or ndf) : 데이터가 순차적으로 저장되는 것x
트랜잭션 로그파일(ldf) : 데이터가 순차적으로 저장됨.
* SELECT addr FROM userTb1 =>실행결과
1. 사용자는 1번처럼 논리적인 데이터베이스에 저장된 데이터를 조회
2. 내부적으로 2번처럼 데이터 파일을 검색
3. 4번 조회결과 응답
select는 조회 결과가 남지 않는다.
* Update userTb1 SET addr = '서울' where userid = 'js'
1. 로그를 먼저 실행, 그리고 물리적인 데이터 변경
로그파일 기록 이유 => 데이터 무결성 (성능이 감소하더라도)
4) 트랜잭션의 개념과 작동원리
트랜잭션 ? 하나의 논리적인 작업 단위로 수행되는 인력의 작업
Update는 트랜잭션을 각각 하나씩 발생시킴
Update를 세번 사용하면 3번 트랜잭션
본래 자동 커밋모드이므로 묶어줘야 함
5) Begin Tran 실행
Begin Tran ~ Commit Tran
6) 컴퓨터가 정전되었다면? 데이터가 일부로그에 남겨져 있다면 롤백. 다 있다면 작업 수행
7) 시스템 데이터베이스와 예제 데이터베이스
master DB : 가장 중요한 데이터베이스, 문제가 생긴다면 Server구동이 안될 수도 있다. 디스크 공간. 시스템 구성 설정 게정 정보 등이 있다.
model DB : 사용자 DB 생성 시 기본 틀
MS DB : 예약된 작업(백업, 복제) 등을 함
tempDB : 임시 데이터베이스(내용이 시작할 때마다 사라짐)
8) 데이터베이스 구조
최소 다음 2개의 파일이 필요.
주 데이터베이스 : 확장명 *.mdf 실제 데이터가 저장되는 곳
트랜잭션 로그파일 : 확장명 .ldf , 복구에 사용
9) 파일 그룹의 개념 : 물리적으로 독립되어야 의미가 있다. 같은 하드디스크에서 읽고 쓰면 느려진다.
'이전게시판 > MySQL MSSQL' 카테고리의 다른 글
MSSQL MYSQL 차이 (0) | 2016.05.11 |
---|---|
MSSQL 뷰, 인덱션, 트랜잭션, 저장 프로시저 정리 (0) | 2016.05.11 |
MSSQL JOIN (INNER JOIN, OUTER JOIN) (0) | 2016.04.06 |
Post
IOCP 소켓 종료 상황
소켓이 CloseSocket으로 안전하게 끊어졌는지, 아닌지에 따라
정상종료. 비정상종료로 나눌 수 있다.
정상종료는 GetQueuedCompletionStatus 완료된 바이트 수가 0일 때..
비정상 종료는 GetQueuedCompletionStatus 함수의 리턴값이 0이고 WSAGetLastError값이 64 이다.
그리고 IO도 NULL이 아니다.
나는 이렇게 사용하였다.
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 | int err = WSAGetLastError(); if(NULL == userInfo) { PrintColor(YELLOW, "userInfo는 NULL! h \n"); } else if((!result && WSAGetLastError() == 64)&& ioInfo != NULL) // 비정상 종료 { printf("bytesTrans가 0이라 종료합니다 ID:%d \n", userInfo->id); closesocket(sock); int id = userInfo->id; EnterCriticalSection(&cs); UserList.RemoveKey(userInfo->id); SAFE_DELETE(userInfo); SAFE_DELETE(ioInfo); LeaveCriticalSection(&cs); printf("접속자 %d가 나갔습니다. \n", id); PrintColor(YELLOW, "접속자 나갔습니다. \n"); continue; } else if(!bytesTrans) { PrintColor(YELLOW, "정상적인 종료! \n"); } | cs |
'이전게시판 > C, C++' 카테고리의 다른 글
typedef한 자료형의 별명을 리턴값으로 사용시 에러... (0) | 2018.04.26 |
---|---|
프로토콜, 라우터 (0) | 2018.04.19 |
C3867 비표준 구문입니다. &를 사용하여 멤버 포인터를 만드세요 (0) | 2018.04.17 |
C++ 11 람다식(Lamda)이란 - 1 (0) | 2016.06.19 |
CRT 메모리 누수 체크 (0) | 2016.04.15 |
C++ 다중상속 문제점? (0) | 2016.04.04 |
C++ 데드락(DeadLock) (0) | 2016.04.04 |
2의 보수 만드는 법 (0) | 2016.04.01 |