'테스트'에 해당되는 글 3건

<환경 설정>

// : Express 사용
const express = require('express');
const router = express.Router();

// : 데이터베이스 커넥트
const connectPool = require('../connectPool');

router.post('/', async (require, response) => {

    // :: 받아옴
    const { userName } = require.body;

    // :: 쿼리 생성
    const query = "select * from users where userName = ?";

    // :: 쿼리 적용
    try {
        let[rows, fields] = await connectPool.promise()
        .query(query, [userName]); // :: 적용

		// :: 결과 테스트
        const name = rows[0].userName;
        const email = rows[0].userEmail;
        const time = rows[0].userConnectedTime;
        console.log(`이름 : ${name}, 이메일 : ${email}, 시간 : ${time}`);

        response.json({userData: rows});
    } catch(error) {
        
        response.sendStatus(500);
    }
});

module.exports = router;

<테스트>

  1. 빈 유니티 3D 프로젝트 생성
    • 이름 : LocalTest00
  2. Asset 추가
    • JSON .NET For Unity : JSON 쉽게 쓰기 위한 것
  3. Scene 이름 변경
    • SampleScene ⇒ App
  4. App 오브젝트 및 스크립트 제작
    • 빈 오브젝트 생성 및 이름 변경 : App
    • Scripts 폴더를 만들고 그 안에 App 스크립트 제작
    • App 스크립트를 App 오브젝트에 부착
    • using System.Collections;
      using UnityEngine;
      using UnityEngine.UI;
      using UnityEngine.Networking;
      using Protocols;
      using Newtonsoft.Json;
      using System.Text;
      
      public class App : MonoBehaviour
      {
          // : Objects
          public Button BUTTON_Send;
          public InputField IFIELD_Name;
          public Text TEXT_Output;
      
          // : Status
          const string SERVER_HOST = "http://localhost:";
          const int SERVER_PORT = 3000;
      
          // Start is called before the first frame update
          void Start()
          {
              this.BUTTON_Send.onClick.AddListener(() =>
              {
                  // :: 객체 생성
                  string userName = IFIELD_Name.text;
                  Packets.find_req findRequest = new Packets.find_req(userName);
      
                  // :: 요청
                  this.StartCoroutine(this.RequestFind(findRequest));
              });
          }
      
          // : Request
          // :: IEnumerator 사용 이유 : SendWebRequest를 비동기 전송으로 하려고
          private IEnumerator RequestFind(Packets.find_req packet)
          {
              // :: 직렬화
              string json = JsonConvert.SerializeObject(packet);
      
              // :: 요청객체 생성
              string url = string.Format("{0}{1}", SERVER_HOST + SERVER_PORT, "/find");
              UnityWebRequest webRequest = new UnityWebRequest(url, "POST");
      
              // :: 바디
              var bodyRaw = Encoding.UTF8.GetBytes(json); // :: 한글 처리를 위해 UTF8 설정
      
              // :: 이벤트
              webRequest.uploadHandler = new UploadHandlerRaw(bodyRaw); // :: 이 부분 좀 더 이해 필요
              webRequest.downloadHandler = new DownloadHandlerBuffer(); // :: Response 받아오는 애 : 이해 필요
      
              // :: 헤더 설정
              webRequest.SetRequestHeader("Content-Type", "application/json"); // :: JSON이라고 알려줌
      
              // :: 비동기 전송
              yield return webRequest.SendWebRequest();
      
              // :: 응답 : 에러 처리
              if(webRequest.isNetworkError || webRequest.isHttpError)
              {
                  Debug.Log("www error");
              } else // :: 응답 : 결과 처리
              {
                  Debug.LogFormat("responseCode: {0}", webRequest.responseCode);
      
                  // :: 데이터 받기
                  byte[] resultRaw = webRequest.downloadHandler.data; // :: 왜인지 바이트로 전달함
                  string resultJSON = Encoding.UTF8.GetString(resultRaw); // :: 바이트를 문자열로 변경
                  
                  Debug.Log(resultJSON);
      
                  // :: 역직렬화 ⇒ find_req
                  Packets.find_res result = JsonConvert.DeserializeObject<Packets.find_res>(resultJSON);
      
                  // :: UI 출력
                  string userOutput = "";
                  foreach(Packets.info_userData data in result.userData)
                  {
                      userOutput += string.Format("이름 : {0}\n", data.userName);
                      userOutput += string.Format("이메일 : {0}\n", data.userEmail);
                      userOutput += string.Format("접속 시간 : {0}\n", data.userConnectedTime);
                  }
                  this.SetText_Output(userOutput);
              } 
          }
      
          // : Set
          private void SetText_Output(string text)
          {
              this.TEXT_Output.text = text;
          }
      }
      
  5. Protocols 스크립트 제작
    • Scripts 폴더에 Protocols 스크립트 제작
    • using System.Collections;
      using System.Collections.Generic;
      using UnityEngine;
      
      namespace Protocols
      {
          public class Packets
          {
              // : 직렬화
              // : 클라이언트 ⇒ 서버
              public class find_req
              {
                  public string userName;
                  public find_req(string userName)
                  {
                      this.userName = userName;
                  }
              }
      
              // : 역직렬화
              // : 서버 ⇒ 클라이언트
              public class find_res
              {
                  public List<info_userData> userData;
              }
      
              // : 역직렬화 대상
              public class info_userData
              {
                  public string userID;
                  public string userName;
                  public string userEmail;
                  public string userPassword;
                  public string userConnectedTime;
              }
          }
      }
  6. 전송 Button 생성
    1. 이름 : Button_Send
  7. 이름을 전송할 Input Field 생성
    1. 이름 : InputField_Name
  8. 정보가 나올 Text 생성
    1. 이름 : Text_Output
  9. Button, Input Field, Text를 App에 연결
  10. 테스트 결과 확인
  • 추가 테스트 : 좀 더 UI
블로그 이미지

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

,