다양한 CS 지식들
오늘은 어제에서 더 나아가 정규화, 인터페이스 구현 검증 도구에 대해 공부했다. 디자인 패턴도 공부했지만... 만족스럽지 않아 내일 더 자세히 공부해서 글을 써보도록 하겠다.
정규화는 테이블을 무손실 분해하는 과정이다. 정규화의 목적은 가능한 한 중복을 제거해 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것이다. 정규형에는 제 1정규형, 제 2정규형, 제 3정규형, BCNF, 제 4정규형, 제 5정규형이 있다. 참고로 결정자란 (A->B)에서 왼쪽에 위치한 A를 말한다.
정규화 전
| 학생ID | 이름 | 전화번호 |
|---|---|---|
| 1 | 영수 | 010-1111-2222, 010-3333-4444 |
| 2 | 영자 | 010-5555-6666 |
한 셀에 여러 개 값이 들어가면 안되므로 분리해야 한다.
정규화 후
| 학생ID | 이름 | 전화번호 |
|---|---|---|
| 1 | 영수 | 010-1111-2222 |
| 1 | 영수 | 010-3333-4444 |
| 2 | 영자 | 010-5555-6666 |
정규화 전
| 학번 | 과목 | 이름 |
|---|---|---|
| 101 | 수학 | 영수 |
| 101 | 과학 | 영수 |
이름은 학번만으로 결정되므로 부분 함수적 종속이다. 이름을 따로 빼서 학생 테이블로 분리해야 한다.
정규화 후
1. <학생>
| 학번 | 이름 |
|---|---|
| 101 | 영수 |
2. <수강>
| 학번 | 과목 |
|---|---|
| 101 | 수학 |
| 101 | 과학 |
정규화 전
| 학번 | 교수ID | 교수이름 |
|---|---|---|
| 101 | P1 | 광수 |
| 102 | P2 | 영호 |
(학번 → 교수ID), (교수ID -> 교수이름), (학번 -> 교수이름)이 성립 되므로 이행적 함수적 종속을 제거해야 한다.
정규화 후
1. 학생-교수ID
| 학번 | 교수ID |
|---|---|
| 101 | P1 |
| 102 | P2 |
2. 교수ID-이름
| 교수ID | 교수이름 |
|---|---|
| P1 | 광수 |
| P2 | 영호 |
정규화 전
| 과목 | 교실 | 교수 |
|---|---|---|
| 수학 | 101호 | 광수 |
| 과학 | 102호 | 영호 |
| 영어 | 101호 | 광수 |
| 화학 | 102호 | 영호 |
(교실 → 교수), (과목 → (교실, 교수))로 함수적 종속을 나눌 수 있는데 과목명으로 행이 유일하게 결정됨 과목이 후보키인 걸 알 수 있다. 교실은 101호에 수학, 영어, 102호에 과학, 화학이 배정되어 있으므로 유일성을 잃었기 때문에 교실이 후보키가 아니다. 그러므로 제거해야 한다!
정규화 후
1. 교실-교수
| 교실 | 교수 |
|---|---|
| 101호 | 광수 |
| 102호 | 영호 |
2. 과목-교실
| 과목 | 교실 |
|---|---|
| 수학 | 101호 |
| 과학 | 102호 |
| 영어 | 101호 |
| 화학 | 102호 |
이제 모든 결정자가 후보키가 되었다
제 4, 5정규형은 실제 프로젝트에서는 거의 발생하지 않는다고 한다. 그래서 제 1정규형~BCNF를 더 중점적으로 공부하면 좋을 것 같다. 더 길고 복잡한 테이블이 나오면 굉장히 헷갈려지기 때문에 개념을 계속 복기할겸 예시까지 다 적어보았다. 교수랑 학생들 이름이 이상하다고? 흠..(나는 솔로 애청자라서...)
인터페이스 구현 검증은 인터페이스가 정상적으로 문제없이 작동하는지 확인하는 것이다. 이를 위해서는 통합 테스트가 필요한데, 아래는 통합 테스트를 수행하기 위해 사용하는 테스트 자동화 도구를 정리한 표이다.
| 도구 | 특징 |
|---|---|
| xUnit | 다양한 언어용 단위 테스트 프레임워크 계열 (JUnit, NUnit 등), 같은 코드를 여러 번 작성하지 않게 도와줌 |
| STAF | 서비스 기반 테스트 자동화 프레임워크, 크로스 플랫폼이나 분산 소프트웨어에서 테스트 환경을 조성할 수 있게 지원함 |
| Selenium | 웹 브라우저 자동화 도구, 다양한 언어 지원 |
| Watir | Ruby 기반 테스트 프레임워크 |
| NTAF | FitNesse의 장점인 협업 + STAF의 장점인 재사용, naver의 테스트 자동화 프레임워크 |
| FitNesse | 위키 기반 테스트 도구, 고객/개발자 간 협업에 적합 |
오늘은 첫 주차 마무리하는 날이다. 그래서 그런지 오늘따라 집중이 되게 안되는 느낌... 오후에 프로젝트 팀이 이번주 동안 만든 카드 뒤집기 게임 발표회를 참관했다. 생각보다 다들 잘하고 퀄리티도 좋아서 놀랐다. 나도 이 캠프에 있는 동안 저런걸 만들게 될텐데 아니 어쩌면 더 멋진것도?! 어쨌든 단 4일만에 만들었다는게 믿기지 않을 정도로 퀄리티가 좋았다. 역시 9 to 9 동안 앉아서 코딩만 했기 때문일지도 모르겠다. 어쨌든 프로젝트 조가 되기 전까지 계속해서 기초를 갈고 닦을 예정이다. 다음주도 홧테엥
주말이라고 공부를 쉬면 안되지! 내일도 할 수 있다면 공부를 오랜 시간 할 예정이다. 오늘에 이어서 CS 지식(디자인 패턴, 화이트박스 블랙박스 정복해보기!)을 더 공부하고 내 강의실에 올라온 C# 강의도 1주차 강의를 수강할 예정이다.