TRANSACTION이란?

여러 개의 SQL문을 하나의 처리로 규정하는 기능
중간에 오류가 나면 모든 작업을 원상태로 되돌린다.

TRANSACTION 테스트 케이스 진행과정

  1. CRUD 테스트 케이스에서 시작
  2. TRANSACTION : ROLLBACK 테스트
    • 돌고래, 기린 추가 후 취소(ROLLBACK) 시험
    • id는 Auto Increment : 자동 생성되며 늘어나니 따로 추가할 필요 없음
    • start transaction;
      insert into math_score(name, score) values("돌고래", 10); 
      insert into math_score(name, score) values("기린", 360);
      rollback;
  3. ROLLBACK 결과확인
  4. TRANSACTION : COMMIT 테스트
    • 돌고래, 기린 추가 후 Commit 시험
    • id는 Auto Increment : 자동 생성되며 늘어나니 따로 추가할 필요 없음
    • start transaction;
      insert into math_score(name, score) values("돌고래", 10); 
      insert into math_score(name, score) values("기린", 360);
      commit;
  5. COMMIT 결과 확인
    • id는 테스트를 위해서 몇 번 하다보니 바뀜, id의 숫자는 무시 

'Programming > SQL' 카테고리의 다른 글

[SQL] JOIN 테스트 케이스  (0) 2021.02.18
[SQL] CRUD 테스트 케이스  (0) 2021.02.18
블로그 이미지

RIsN

,

JOIN이란?

서로 다른 테이블의 데이터를 같이 조작할때 사용

JOIN 테스트 케이스 진행과정

  1. CRUD 테스트 케이스에서 시작
  2. 테이블(Table : 데이터베이스 테이블) 설계(math_comment) 후 생성
    1. UTF-8 설정
    2. id / INT : pk(Priority Key : 고유 키), nn(Not Null : Null 불가), ai(Auto Increment : 알아서 숫자가 늘어나며 생성)
    3. student_id / INT : nn
    4. comment / VARCHAR(255) : nn
  3. 학생ID(student_id)를 외래 키(Foreign Keys) 설정
    • 데이터베이스 test_schema의 math_score를 참조
    • student_id와 math_score의 id를 연결  
  4. 스키마 내 테이블 스테이터스 확인
    • show tables;
  5. 테이블 math_score 와 math_comment 스테이터스 확인
    • desc math_score;
      desc math_comment;
  6. Create 테스트 케이스 작성
    • 이지은(student_id : 1), 성소(student_id : 2), 전효성(student_id : 3)의 수학 코멘트(math_comment) 추가
    • id는 Auto Increment : 자동 생성되며 늘어나니 따로 추가할 필요 없음
    • insert into math_comment(student_id, comment) values(1, '꽃갈피');
      insert into math_comment(student_id, comment) values(1, '팔레트');
      insert into math_comment(student_id, comment) values(2, '이루리');
      insert into math_comment(student_id, comment) values(3, '반해');
  7. INNER JOIN 테스트
    • 1번째 라인은 무엇(CRUD)을 할 지에 대해서와 기준 테이블과 JOIN 테이블을 정함
      2번째 라인에서 어떤 동일한 데이터를 확인할 지를 정함
      <추가 Where> 3번째 라인에서 어떤 것을 기준으로 찾을지를 정함  
    • 3번째 줄 : 우선 '이지은'이라는 학생 데이터
      2번째 줄 : math_comment의 학생 아이디(student_id)와 math_score의 학생 아이디(id)가 같은 데이터
      1번째 줄 : 기준은 math_comment이고, math_score를 합치되 math_comment의 데이터만 표시
    • select math_comment.* from math_comment inner join math_score 
      on math_score.id = math_comment.student_id
      where math_score.name = "이지은";
  8. INNER JOIN 테스트케이스 최종 확인
    • id는 테스트를 위해서 몇 번 하다보니 바뀜, id의 숫자는 무시 

>> 다음 TRANSACTION 테스트로

'Programming > SQL' 카테고리의 다른 글

[SQL] TRANSACTION 테스트 케이스  (0) 2021.02.18
[SQL] CRUD 테스트 케이스  (0) 2021.02.18
블로그 이미지

RIsN

,

CRUD란?

Create : 생성
Read : 읽기
Update : 갱신
Delete : 삭제

CRUD 테스트 케이스 진행과정

  1. MySQL Workbench 구성
  2. 스키마(Schema : 데이터베이스) 설계(test_schema) 후 생성
    1. UTF-8 설정
  3. 테이블(Table : 데이터베이스 테이블) 설계(math_score) 후 생성
    1. UTF-8 설정
    2. id / INT : pk(Priority Key : 고유 키), nn(Not Null : Null 불가), ai(Auto Increment : 알아서 숫자가 늘어나며 생성)
    3. name / VARCHAR(45) : nn
    4. score / INT : nn
  4. 사용할 스키마 설정
    • use test_schema;
  5. 스키마 내 테이블 스테이터스 확인
    • show tables;
  6. 테이블 math_score 스테이터스 확인
    • desc math_score;
  7. Create 테스트
    • 아이유, 성소, 전효성, 딜리트 등 점수 추가
    • id는 Auto Increment : 자동 생성되며 늘어나니 따로 추가할 필요 없음
    • insert into math_score(name, score) values("아이유", 120);
      insert into math_score(name, score) values("성소", 9999);
      insert into math_score(name, score) values("전효성", 158);
      insert into math_score(name, score) values("딜리트", 0);
  8. Read 테스트
    • 우선 테이블의 전체 내용 확인 
    • select * from math_score;
    • 이름(name)이 아이유인 데이터만 확인 
    • select * from math_score where name = "아이유";
    • 점수(score)가 150점 초과인 데이터들의 이름(name)만 확인
    • select name from math_score where score > 150;
    • 테이블의 전체 내용을 가져오되 점수(score)를 내림차순으로 확인
    • select * from math_score order by score desc;
  9. Update 테스트
    • 이름이 아이유인 데이터의 이름을 이지은으로 변경 
    • update math_score set name = '이지은' where name = '아이유';
  10. Delete 테스트
    • 이름이 딜리트인 것을 제거
    • delete from math_score where name = '딜리트';
    • 참고(테스트 중 실행 안함) : 테이블 내 모든 것 제거
    • delete from math_score;
  11. 테스트케이스 최종 확인
    • id의 숫자는 테스트 시 변경될 수 있으므로 무시 
  12. 전체 코드
    • use test_schema;
      
      -- Check
      show tables;
      desc math_score;
      
      -- Create
      insert into math_score(name, score) values("아이유", 120);
      insert into math_score(name, score) values("성소", 9999);
      insert into math_score(name, score) values("전효성", 158);
      insert into math_score(name, score) values("딜리트", 0);
      
      -- Read
      select * from math_score;
      select * from math_score where name = "아이유";
      select name from math_score where score > 150;
      select * from math_score order by score desc;
      
      -- Update
      update math_score set name = '이지은' where name = '아이유';
      
      -- Delete
      delete from math_score where name = '딜리트';

>> 다음 JOIN 테스트로

'Programming > SQL' 카테고리의 다른 글

[SQL] TRANSACTION 테스트 케이스  (0) 2021.02.18
[SQL] JOIN 테스트 케이스  (0) 2021.02.18
블로그 이미지

RIsN

,

진행과정

  1. 알파 채널이 있는 불 이미지들(fireTest : 불 모양 / noise2 : 노이즈)을 준비해 프로젝트에 넣는다.
    fireTest.tga
    4.00MB
    noise2.png
    0.07MB
  2. 3D > Quad 제작
  3. 새 Standard Surface Shader 제작 및 수정
    1. Shader "Custom/Fire"
      {
          Properties
          {
              _MainTex("Albedo (RGB)", 2D) = "white" {} // :: 불 모양
              _MainTex2("Albedo (RGB)", 2D) = "white" {} // :: 흘러가는 불 기둥
          }
          SubShader
          {
              Tags { "RenderType"="Transparent" "Queue"="Transparent" } // :: 투명도 적용
              LOD 200
      
              CGPROGRAM
              #pragma surface surf Standard alpha:fade // :: 투명도 적용
      
              sampler2D _MainTex;
              sampler2D _MainTex2;
      
              struct Input
              {
                  float2 uv_MainTex;
                  float2 uv_MainTex2;
              };
      
              void surf (Input IN, inout SurfaceOutputStandard o)
              {
                  // :: 2번째의 노이즈를 우선 연산(-y 위로 올라가도록)
                  fixed4 c = tex2D (_MainTex2, float2(IN.uv_MainTex2.x, IN.uv_MainTex2.y - _Time.y));
                  
                  // :: cr <= c 텍스쳐(노이즈)의 의존도(투명도?)를 0.5(50%)로 낮춤
                  // :: 노이즈보다 불 모양을 우선시하라는 것으로 이해
                  float cr = c * 0.5; 
                  
                  // :: Saturate : 0 이하의 값을 0으로 1 이상의 값을 1로 즉, 이미지 한계 조정
                  fixed4 d = tex2D(_MainTex, saturate(IN.uv_MainTex + cr));
                  
                  // :: Emission : Light 영향을 적게
                  o.Emission = d.rgb; 
                  o.Alpha = d.a; // :: 투명도
              }
              ENDCG
          }
          FallBack "Diffuse"
      }
  4. 새 Material 제작 후 Custom / Fire 쉐이더 적용
  5. 각 불 모양의 이미지를 해당 Material에 넣는다.
    1. 첫번째 Albedo : 불 모양
    2. 두번째 Albedo : 노이즈
  6. 완성

 
 

 

 

블로그 이미지

RIsN

,

진행과정

  1. 알파 채널이 있는 불 이미지들(fireTest : 불 모양 / 4_2 : 불 기둥 모양)을 준비해 프로젝트에 넣는다.
    fireTest.tga
    4.00MB
    4_2.tga
    0.25MB
  2. 3D > Quad 제작
  3. 새 Standard Surface Shader 제작 및 수정
    1. //
      // >> 흘러가는 형태의 불
      //
      Shader "Custom/Fire"
      {
          Properties
          {
              _MainTex("Albedo (RGB)", 2D) = "white" {} // :: 불 모양
              _MainTex2("Albedo (RGB)", 2D) = "white" {} // :: 흘러가는 불 기둥
          }
          SubShader
          {
              Tags { "RenderType"="Transparent" "Queue"="Transparent" } // :: 투명도 적용
              LOD 200
      
              CGPROGRAM
              #pragma surface surf Standard alpha:fade // :: 투명도 적용
      
              sampler2D _MainTex;
              sampler2D _MainTex2;
      
              struct Input
              {
                  float2 uv_MainTex;
                  float2 uv_MainTex2;
              };
      
              void surf (Input IN, inout SurfaceOutputStandard o)
              {
                  fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
                  fixed4 d = tex2D (_MainTex2, float2(IN.uv_MainTex2.x, IN.uv_MainTex2.y - _Time.y)); // :: -y 위로 흘러가도록
                  // :: Emission : Light 영향을 적게
                  // :: c 텍스쳐와 d 텍스쳐를 곱해서 둘이 겹쳐져 흘러가는 것
                  o.Emission = c.rgb * d.rgb; 
                  o.Alpha = c.a * d.a; // :: 투명도
              }
              ENDCG
          }
          FallBack "Diffuse"
      }
  4. 새 Material 제작 후 Custom / Fire 쉐이더 적용
  5. 각 불 모양의 이미지를 해당 Material에 넣는다.
    1. 첫번째 Albedo : 불 모양
    2. 두번째 Albedo : 불 기둥
  6. 완성

블로그 이미지

RIsN

,

(1) 다음과 같이 현재 실행되는 프로그램이 x86인지, x64인지를 출력하는 프로그램을 작성하시오(전처리기를 이용하여 미리 정의된 매크로 _M_X64를 이용하시오).

이 프로그램은 x86 프로그램입니다.
OR
이 프로그램은 x64 프로그램입니다.

>> 풀이

#include <iostream>
using namespace std;


void main() {

	// :: Output
#ifdef _M_X64
	cout << "이 프로그램은 x64 프로그램입니다." << endl;
#else
	cout << "이 프로그램은 x86 프로그램입니다." << endl;
#endif

}

>> 출력결과

블로그 이미지

RIsN

,

(1) 다음과 같이 출생 연도를 입력받아서 나이를 출력하는 프로그램을 작성하시오.

출생 연도를 입력하세요.
1977
2002 한일월드컵 당시 한국 나이는 26세입니다.

>> 풀이

#include <iostream>
using namespace std;


void main() {

	// :: Description
	cout << "출생 연도를 입력하세요." << endl;

	// :: Input	
	int birth;
	cin >> birth;

	// :: Calculate
	int age = 2002 - birth + 1;

	// :: Output
	cout << "2002 한일 월드컵 당시 한국 나이는 " << age << "세 입니다." << endl;
}

>> 출력결과

블로그 이미지

RIsN

,
  • 예습 복습 및 기록을 위해 직접 해본 해답입니다.
  • 답이 맞지 않을 때는 알려주세요.

1장. C++ 시작하기

  1. 컴퓨터가 유일하게 인식할 수 있는 언어는 기계어(Machine Language)' 이다.
  2. 기계어는 오직 단 두개의 기호인 0과 1을 사용한다. 이 기호를 비트(Bit) 라고 한다.
  3. 패치(Patch) 는 천공 카드의 구멍을 덧대는 작업에서 유래되었으며 프로그램 수정 작업을 의미한다.
  4. 어셈블리어는 기계어에 일대일로 대응된다. 기계어를 사람이 알아보기 쉬운 연상 기호(Mnemonic) 을 사용해서 표현한다.
  5. C 언어는 1972년 데니스 리치(Dennis Ritchie) 에 의해서 개발되었다.
  6. C++의 최초 이름은 C with Classes 이다.
  7. C와 C++의 포함 관계에 대해서 설명하시오.
    • 최초에는 C언어가 C++의 부분집합이었다.
    • C언어 독자 표준이 확립됨에 따라 둘의 관계는 완전한 포함 관계에서 벗어난다.
    • 그러나 상호 영향으로 인해 C++가 C언어를 포함하는 방향으로 다시금 변화하고 있다.
  8. 컴파일러(Compiler) 는 C++ 코드를 기계어로 번역하는 일을 담당한다.
  9. C++ 소스 파일이 컴파일되면 목적 파일 이 생성된다.
  10. 링커(Linker) 는 목적 파일과 라이브러리를 연결하여 실행 모듈(프로그램)을 만든다.
  11. 코드 편집, 컴파일, 링킹 등 프로그래밍에 필요한 모든 작업을 통합적으로 수행할 수 있는 도구를 통합 개발 환경(IDE, Integrated Development Environment) 라고 한다.
  12. Visual Studio에서 프로젝트 는 하나의 실행 모듈(exe, dll, so 등) 개발을 관리하는 단위이며, 솔루션 은 연관성이 있는 프로젝트들을 모아서 관리하는 단위이다.
  13. 프로그램 코드가 기록되는 파일은 크게 두 가지 종류가 잇으며 소스(Source) 파일과 헤더(Header) 파일이 있다.
  14. 헤더 파일을 소스 파일에 포함 및 참조시키는 명령은 #include 이다.
  15. 표준 입출력에 관련된 내용이 기록되어 있으며 cout, endl 등을 참조하기 위하여 필요한 헤더 파일은 iostream 이다.
  16. 컴파일러가 코드를 의미 있는 최소 단위로 자르는 작업을 구문 분석이라고 한다. 이때 코드의 의미 있는 최소 단위를 토큰(Token) 이라 한다.
  17. 이미 예약되어 있어서 다른 용도로 사용할 수 없는 토큰을 키워드(Keyword) 라고 한다.
  18. 올바르지 못한 식별자를 고르시오.
    1. Coke
    2. 7up : 첫 문자로 숫자가 올 수는 없다.
    3. Pocari
    4. Fanta
  19. 문자열은 큰따옴표 로 묶여 있는 문자의 모음을 의미한다.
  20. 연산자는 피연산자 에 실행할 연산을 나타내는 기호이다.
  21. 작문에서 문장의 끝을 나타내는 경우 마침표(.)를 사용하지만 C++에서는 세미콜론(;) 을 사용한다.
  22. 하나의 값으로 도출되는 토큰의 모음을 식(expression) 이라 한다.
  23. 다음 중 식이 아닌 것은?
    1. 3 : 일반 상수는 값이므로 식이 된다.
    2. 3 + 4 : 7이라는 값으로 도출되기 때문에 식이 된다.
    3. a = 4 : 대입식
    4. _for
  24. 식 x = 3의 끝에 세미콜론(;) 을 붙이면 문이 된다.
  25. 표준 C++ main 형식은 다음과 같다. 빈 칸에 올바른 타입을 채우시오.
    • int main()
      {
      }
      
      int main(int argc, char** argv)
      {
      }
  26. main은 프로그램 코드 전체에 단 하나만 있어야 한다. 그 이유를 작성하시오.
    • 컴퓨터는 이미 예약되어 있는 main이라는 함수를 찾아서 가장 먼저 호출한다.
    • main이 여러 개 있다면 프로그램 시작 시 어떤 main을 호출해야 할 지 알 수 없다.
  27. 여러 줄의 주석은 /* 로 시작해서 */ 로 끝난다.
  28. 주석은 컴파일 과정에서 무시된다. 그럼에도 아래 코드가 제대로 컴파일되지 않는 이유는 무엇인가?
    • int main()
      {
      	cout << "Hello World!" << endl;
          ret/* Comment */urn 0;
      }
    • 컴파일러는 단일 공백 문자로 처리함으로써 무시하는 방법을 사용하므로 <ret/* Comment */urn 0;> 은 <ret urn 0>으로 인식되어 컴파일 오류가 발생한다.
  29. C++는 표준 입출력 스트림 객체인 cin, cout 을 사용하여 콘솔에 입출력할 수 있다.
  30. 뽑아내기(>>) 연산자는 cin과 함께 쓰이고, 끼워넣기(<<) 연산자는 cout과 함께 사용된다.
블로그 이미지

RIsN

,

C와 C++ 게임 코드로 알아보는 코딩의 기술

취향 : ★★☆

적합 :

 

읽은 이유

: C와 C++을 코딩 기술과 함께 배울 수 있을까 해서 // 실패

 

리뷰
: C와 C++에 대해서 잘 모른다면 보는 것을 추천하기 어려움

: 코딩 기술에 대해서, 좋은 코딩에 대해서 알려주고 있지만,

정작 C와 C++에 익숙하지 않다면 읽고 이해하는 데 여러모로 복잡함

: 열심히 읽고 이해하려 하면 이해할 수도 있겠지만,

그렇게까지 노력하는 것은 시간 대비 효율이 있다고 생각하기 어려움

'Book' 카테고리의 다른 글

나는 해낼 수 있다  (0) 2023.03.13
게으른 완벽주의자를 위한 심리학  (0) 2023.02.02
함께 자라기: 애자일로 가는 길  (0) 2022.11.19
The Goal : 당신의 목표는 무엇인가?  (0) 2021.03.22
블로그 이미지

RIsN

,

내가 이해한 디자인 패턴이란?

: 의사 소통 수단이자, 설계에 대한 설명을 간략화 시켜주는 전문 용어.

: 협업을 위한 수단일 수 있겠지만, 패턴을 남발하는 것은 좋지 않다.

: 패턴을 쓰기보다 더 간결하고 이해하기 쉬운 코드와 설명을 준비하는 게 좋다고 생각하고 있다. 

디자인 패턴 정리

  • Template Method 패턴
  • Startegy 패턴
  • State 패턴
  • Composite 패턴
  • Iterator 패턴
  • Singleton 패턴

'Programming > Design Pattern' 카테고리의 다른 글

코드 패턴 공부 순서(임시)  (0) 2021.01.12
블로그 이미지

RIsN

,