피곤핑
코딩일탈
피곤핑
전체 방문자
오늘
어제
  • 분류 전체보기
    • Kotlin & Java
    • Spring
      • Spring Security
      • Spring
    • 네트워크
    • JavaScript & Node js
    • Docker
    • Python3
    • Unity
    • 딥러닝
    • 객체지향프로그래밍
    • Error 보고서
    • 나의 이야기 & 회고
    • HTML & CSS
    • Archive
    • 독서

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • TiL
  • 99클럽
  • JavaScript
  • 오블완
  • 개발자취업
  • nodejs
  • 코딩테스트준비
  • 항해99
  • 티스토리챌린지
  • Client

최근 댓글

hELLO · Designed By 정상우.
피곤핑

코딩일탈

0926 C#과 DB 연동 프로그래밍 : EWIG 02
Archive

0926 C#과 DB 연동 프로그래밍 : EWIG 02

2019. 9. 26. 17:02

신규기능들에 대한 테스트를 할때,,,, 

새로 기능을 추가하면서 기존에 있는 코드가 영향을 받을 수 있음! 

 

엔터프라이즈급의,, 소프트웨어를 다룰때는 아키텍쳐가 달라짐  - 좋은회사 = 좋은,, 시스템 


앨범을 가져오는 코드 - Album_GetByPKTest()

1.  단위테스트

  -> 함수를 사용할 코드를 먼저 만들고 함수를 만들기~! - 테스트 주도 개발 방법론

// Attribute

// Reflection 

 

void start() { } 같은 C#에서 쓰이는 코드가 protectecd virtual ~~ 이런식으로 써있고 추상클래스안에 없는이유가 reflection을 통해서 안에서 자동으로 구성 되어있기 때문

 

2. Album_GetByPK() 만들기

컨트롤+.  만들고 > F12(정의부로이동)

Reader -> 판독기

SqlParameter, SqlDataReader 두개가 필요함! 

reader.Read() --> 반환값은 bool형 (읽으면 1 / 못읽으면 0)

 

.Net 프레임 워크에는 Int32 -> int 있음 (근데 c#에는 없음)

int16 -> short / int64 -> long

 

GetInt32 -> 4바이트 정수를 얻어와라

 -> 몇번째 컬럼에 있는 값을 얻어오는지? reader.GetInt32(@@)

 

c#같은경우 가비지컬렉터가 있지만 외부랑 연결되어있을때는 무조건 연결/닫기를 해주어야함!!! 안하면 메모리가 쌓이고 어느순간 뻗음!! -> 이런종류의 버그는 찾기가 힘듦,,, 

 

3. Album_GetAllPK() 만들기

 3-1. 단위테스트

4. Album_InsertTest() -삽입

* 변수는 그대로 사용하고 새로운 객체를 만들어서 쓰는 법두 있음 - 이게 좀더 나음!

// 이때 AlbumId가 자동증가 설정이 안되있었기때문에 우리는 AlbumId도 @로 넘겨주었어야함.

-> 그렇기 때문에 id사양 예로 바꿔주기!! 

 

5. 업데이트 - Album.Update()

 5-1. 단위테스트코드

 5-2. 쿼리문

6. 삭제

 - 둘중 하나 쓰면 됨

 - 실제함수

 

 

* 근데 여기서 이런식으로 테스트코드를 짜게되면 이미 삭제된 상테에서 테스트할때 NULL이 들어오게되면 NULL references 오류가 나기때문에 좀 다른식으로 로직을 짜보도록 하겠음! 

* 마지막 앨범을 가져오는 쿼리를 추가해봅시다,,, -> ???

 

 - 바뀐 단위테스트 코드

 


EWIG - WINFORM 버전 만들어보기

1. 보기 > 도구상자 > (모든 윈폼 컨트롤 버튼)

 * 버튼을 두번 클릭하면 >> 이벤트가 생기게됨 (스크립트!!)

 * 윈폼 실행 > ctrl + F5

 >> 윈폼으로 우리가 만들었던 코드를 실행시키려면 여태까지 콘솔프로젝트에서 작성했떤 코드를 그대로 써주어야함 이것은 매우 비효율 적인 일임! 그래서 콘솔 프로젝트, 윈폼프로젝트 둘다 쓸 수 있는 재활용이 가능한 코드만 모여있는 프로젝트를 하나더 만들어주어야함! -> 콘솔에 있는 코드들을 몽땅 다 뽑아내야함!! 

--> 별개의 프로젝트 : 유아이가 없는/코드만있는 --> 라이브러리

 


솔루션 > 새 프로젝트 추가 > 라이브러리 > .NET Framework

 

 > 기본으로 생긴 class1.cs 삭제하셈 > 삭제하구 Album.cs 스크립트를 옮겨서 붙여넣기함!

> AlbumData.cs 클래스 만듦 > 만들었던 코드들 다 붙여넣기하고 > using space 해줌!!! > static 다 빼줌 > 함수앞에붙였던 Album이라는 접두어도 다 빼줘도 됨!!! 

static 없애주기!

 

>> 콘솔 프로젝트에 있는 main을 손봐봅시다

 - AlbumData.cs로 옮겨진 코드들 때문에 빨간줄이 뜨는데 이때 참조해주어야함 !!!! 

 - AlbumDate albumData = new AlbumData(); 를 추가해주고 using namespace 해줌!! 

 - 모든 함수를 .을 사용하여 객체지향적으로 만들기!

 

 == 이로써 윈폼에서도 AlbumData 코드를 쓸 수가 있음!!!! 

 >> 윈폼 프로젝트로

 - 참조

 - 실행화면

 


03 메소드간 중복코드 제거 

1. 커넥션 코드 함수 만들기

 - open() 까지 추가로 해주었음!

2. 코드 읽어오는 함수

 - 이친구를

 - 이렇게

 - 구체적인 함수 -> 이제 이 함수로 계속해서 쓰면 됨!

 

==> 사실 여태까지도 legacy 기술임...... --> 이제 ORM이라는 프로세스에 인해서 바뀌고 있음,, 하지만 실무에서는 아직도 안바뀌고있음.. ㄷㄷㄷㄷ 그런회사가 있기때문에 아직은 알아두어야함.1..111..1 

 

==> 단위 테스트 코드 단도 바꿔줘야함 이름이 바뀐게 많아서,,,, 다시 고쳐줘야 테스트를 할 수 있음!1 

그런데 이때, 계속 AlbumData 객체를 단위함수마다 선언해주어야하는데 사실 지금 단위테스트단은 state less라고 해서 상태가 없는 함수들임. 그렇기때문에 객체를 하나만 생성해도 무방함 -> 데이터 리포지토리 라는것을 만들면 좋음!

 - 멤버로 AlbumData를 넣어줌!

 * 생성자중 static이 붙은 생성자가 있는데 말 그대로 static 생성자를 초기화 해주는 생성자임!

 - 프로퍼티를 만들어보자

 

==> 그결과 이제는 이렇게 써주면 됨1!! - 윈폼에서도 사용 가능 - 메인쪽에서도 사용 가능!

 

 * 다 바꿔줘도 객체를 선언할 수 있음 사실 이거는 안됨 

 --> AlbumData 클래스안에 public 으로 생성자가 생략되어있기 때문이었음 그렇기때문에 이걸 internal로 바꾸어주면 위와같은 상황을 막을 수 있음! (main은 콘솔프로젝트 안에있고 AlbumData는 클래스 라이브러리 프로젝트 안에있기때문에 internal로서 프로젝트간의 사용을 막을 수 있고 같은 프로젝트는 사용할 수 있게끔 할 수 있음!)

 ** internal이 왜 필요한가? - 두개의 프로젝트를 써보았을때 비로소 알 수 있음! 

 - 비로소 막아짐(에러가뜸)

 

 * 여기서 잠깐 거슬리는게 있는데 라이브러리 프로젝트안에 namespace가 그냥 복붙했기때문에 제대로 네이밍이 안되어있는데 이거를 제대로 고쳐주고 넘어가자!

 - 엘범위에 커서를 놓으면 밑에처럼 창이생기는데 이걸하면 모든 Album의 네임 스페이스가 Ewig.Data로 바뀜!

 


테이블을 옮겨놓은 클래스? - 엔티티

엔티티 프레임워크

1. Album.cs 클래스를 삭제하고 새로 추가

2. 서버연결 - 없으면 다시 만들기

 - 데이터 베이스를 다 추가하는데 sysdiagram은 체크해제해주기!!!! (지원개체??로 된거라!)

   +) 생성된 개체이름을 복수화 또는 단수화에 꼭 체크!!!!

 - 결과화면

이렇게 두개가 생겨진걸 볼 수 있음

 - 템플릿을 생성하는 클래스

 - Album.cs를 보면 다 구현되어있는것을 알 수있음

 

 - 아까 복수형으로 선택했기때문에 _s가 붙은 것을 볼 수 있음

** 예기치 않은 수정을 하면 안됨 ㅠ 바뀌는게 아니라 덮어씌워지기때문에 파일이 싹다 새로 생겨버림!!!!!! 

만약, Album에 Age라는 새로운 변수를 생성시키고 싶다면 partial라는 새로운 클래스를 생성시키면 됨! 

 

 1) 엔티티라는 새로운 폴더를 생성하고 그안에 클래스를 생성함

 2) partial이라고 지정해주면 그 둘은 이어져있지만 새로운 변수를 생성하고 구현할 수 있는 클래스를 만들 수 있음

 3) data 폴더 만들기 > AlbumData.cs 스크립트 옮겨넣기

 **** using문이 끝나면 dispose가 자동실행되는 구문!!! ****

람다식을 사용해서 ArtistId<5 라는 코드를 구현하였고 이는 C#에서 알아서 쿼리문을 만들어줌!!!!!!!!!!!!!!

 

 > GetByPK()

  이 조건을 만족하는 것중 첫번째꺼를 가져와라

 - First만 있는걸 사용하면 예외가 발생하지만 orDefault는 기본값인 NULL이 반환됨!! 

   -> null이 반환이 싫을때 first를 써서 예외처리를 해주면 됨!

> GetAll()

 

> GetLastAlbumId()

 - 주석친 부분처럼하던지 var query 뒤에 진짜 SQL문식으로 적고 리턴시키는 방법이 있음!

 

> GetInsert()

> GetUpdate()

> GetDelete()

- using머시기 해야댐 ㅠ

 

 * App.Config라는 파일이 있는데 (환경설정파일임) 다른 프로젝트에서도 쓰고싶음! 그러려면

솔루션 > NuGet 패키지 관리 > 설정후 > 설치 > 확인 > 동의함

 > 새로 생긴 config안에는 아래와 같은 코드가 없으므로 다 붙여넣기하셈

 > 쭉 실행해보면 GetPK에서 삑사리나는데 이거는 347로 우리가 정해진 값을 넣었기때문에 당연히 틀림! 

 그렇기 때문에, 코드를 조금 고쳐줌!

 -> 이런식으로! 

 

F10

'Archive' 카테고리의 다른 글

0927 ORM 기술을 사용한 EWIG 03  (0) 2019.09.27
0927 using문과 IDisposable 오류  (0) 2019.09.27
0926 C#과 DB 연동 프로그래밍 : EWIG 01  (0) 2019.09.26
0925 서버프로그래밍 MSSQL_SERVER DB  (0) 2019.09.25
0924 서버프로그래밍  (0) 2019.09.24
    'Archive' 카테고리의 다른 글
    • 0927 ORM 기술을 사용한 EWIG 03
    • 0927 using문과 IDisposable 오류
    • 0926 C#과 DB 연동 프로그래밍 : EWIG 01
    • 0925 서버프로그래밍 MSSQL_SERVER DB
    피곤핑
    피곤핑

    티스토리툴바