Technique
-
식별자관계와 비식별자관계 설정Technique/RDBMS 2015. 12. 21. 21:45
만약 엔티티 간의 관계 설정에서 식별자관계와 비식별자관계를 잘 모르고 데이터 모델링을 진행하면 다음과 같은 오류에 빠질 수 있다. - 식별자관계만을 이용하여 데이터 모델링을 전개할 경우, PK 속성의 숫자가 증가할 수록 관련된 SQL 구문이 복잡해져 복잡성으로 인한 개발 오류를 유발하게된다.- 비식벼라관계만을 이용하여 데이터 모델링을 전개할 경우, 테이블 간의 과다한 조인을 유발하여 조인에 의한 성능 저하를 불러오게 된다. 이를 해결하기 위해서는- 데이터 모델 관계 도출시 식별자관계와 비식별자관계의 의미를 정확하게 이해 해야한다- 업무적 특징, 조인 관계, PK 구성을 고려하여 식별자관계/비식별관계를 결정 해야한다. 데이터 모델링 수행에서 식별자/비식별자관계의 구분 설정은 데이터 모델링 초기단계인 분석 ..
-
PK 컬럼 순서, 대충 하지 말자Technique/RDBMS 2015. 12. 20. 21:13
데이터베이스를 생성할 때 [ 분석-> 설계-> 구축-> 테스트-> 이행 ]의 프로세스를 거치는데 설계 단계 이후 완성된 데이터 모델을 토대로, 물리적인 테이블을 정해진 DBMS에 맞게 생성하게 된다.보통 사용화된 데이터 모델링 툴 을 이용해 모델을 만들고 DDL(Data Definition Language) 을 생성하기 때문에 설계 단계에서 데이터베이스를 생성할 때 PK 컬럼의 순서는 그다지 신경쓰지 않고 생성하게 되는 경우가 많다. PK의 순서를 신경쓰지 않은채 테이블을 만들 시 발생할 수 있는 문제- 인덱스 구성에서 의도하지 않은 순서의 Primary Key Unique Index가 생성된다- 그에 따른 조회 SQL 실행 시 성능 저하 현상이 나타날 수 있다- 많은 인덱스가 생성되므로 입력/수정/삭제..
-
spl_autoload_registerTechnique/PHP 2015. 12. 15. 10:02
bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) 지정한 함수를 spl이 제공하는 __autoload큐에 등록합니다.큐가 아직 액티브하지 않은 경우에는 우선 액티브 합니다. 혹시 당신의 코드안에 __autoload함수가 존재한다면 그것을 명시적으로 __autoload 큐에 등록하지 않으면 안됩니다.왜냐하면 spl_autoload_register는 spl_autoload 또는 spl_autoload_call에 따라 __autoload함수의 엔진캐쉬를 효율적으로 옮겨 놓기 때문입니다.복수의 autoload함수가 필요로 하는 경우에도 spl_autoload_reg..
-
11. 테스트와 가독성Technique/Readable Code 2015. 12. 11. 12:54
■ 읽거나 유지보수하기 쉽게 테스트를 만들어라 테스트 코드가 읽기 쉬우면, 사용자는 실제 코드가 어떻게 동작하는지 그만큼 더 이해하기 쉽다.다른 프로그래머가 수정하거나 새로운 테스트를 더하는 걸 쉽게 느낄 수 있게 테스트 코드는 읽기 쉬어야 한다.- 코드를 수정하는 일이 두려워진다. 아니 우리는 이 코드에 손대고 싶지 않아. 테스트 케이스를 모두 변경하는 일은 너무나 끔찍하다- 새로운 코드를 작성하면 그에 따르는 새로운 테스트를 자겅하지 않는다. 시간이 흐름이 지나면서 더 낮은 비율의 코드가 테스트되며, 따라서 코드에 대한 확신이 줄어들 수 밖에 없다.자신의 코드를 사용하는 사람이 테스트코드를 편하게 느끼도록 만들어야 한다. 코드를 사용자는 새로운 코드가 왜 현재 테스트에서실패하는지 쉽게 진단할 수 있어..
-
10. 코드 분량 줄이기Technique/Readable Code 2015. 12. 11. 12:53
프로그래머가 배워야 하는 가장 중요한 기술은 언제 코딩을 해야 하는지 아는 것이다.가장 읽기 쉬운 코드는 아무것도 없는 코드다 ■그 기능을 구현하려고 애쓰지 마라 - 그럴 필요 없다. 프로그래머는 어떤 기능을 구현하는 데 필요한 노력을 과소평가하는 경향도 있다. 조잡한 프로토타입을 구현하는 시간을 지나치게낙관적으로 예측하고 그 코드를 유지보수하고, 문서를 만들고, 코드베이스에 새로운 무게를 더하는데 얼마나 많은 시간이 필요한지 자각하지 못한다는 이야기이다. ■ 요구사항에 질문을 던지고 질문을 잘게 나누어 분석하라 프로그램이 반드시 빠르게 동작하고, 100% 정확하고, 모든 종류의 가능한 입력을 처리해야 하는 것은 아니다. 주어진 요구사항을 정말로 잘 분석하면, 적은 코드로 구현할 수 있는 간단한문제를 정..
-
9. 생각을 코드로 만들기Technique/Readable Code 2015. 12. 11. 12:06
할머니에게 설명할 수 없다면 당신은 제대로 이해한 게 아닙니다. - 아인슈타인 복잡한 생각을 다른 사람에게 설명할 때 중요하지 않은 자세한 내용 때문에 듣는 사람을 혼동시키는 일이 종종 있다.자신의 생각을 지식이 부족한 사람에게 전달하는 기술은 매우 소중하다.설명할 내용을 걸러서 요지만 뽑아내는 능력이 요구된다.내용을 잘 이해하게 도울 뿐만 아니라 설명하는 사람 자신도 그 내용을 다시 한 번 명확하게 이해하게 도와준다.작성한 코드를 다른 사람에게 보여줄 때도 같은 기술이 필요하다.코드역시 쉬운말로 작성 되어야 한다- 코드가 할 일을 옆의 동료에게 말하듯이 평범한 영어로 묘사하라 - 이 설명에 들어가는 핵심적인 단어와 문구를 포착 하라- 설명과 부합하는 코드를 작성하라 ■ 논리를 명확하게 설명하기■ 라이..
-
8. 한번에 하나씩Technique/Readable Code 2015. 12. 11. 11:55
한 번에 여러가지 일을 수행하는 코드는 읽기 어렵다. 코드 블록 하나에 새로운 객체를 초기화하고, 데이터를 청소하고, 입력을 분석하고 비지니스 논리를 적용하는 일을 한꺼번에 수행하는 경우도 있다. 이런일이 모두 한자리에 모여 있다면 각각의 작업이 별도로 시작되었다가 완료되는 경우보다 더욱더 이해하기 어렵다.다시 말해서 한 번에 하나의 작업만 수행하게 코드를 구성 해야한다. ■ 함수는 오직 한 가지 작업만 수행해야한다.이러한 말은 항상 함수 수준에 머물러야 하는 것은 아니다. 물론 커다란 함수를 여러 작은 함수로 나누는 것은 좋다.커다란 함수안에 있는 코드를 재조직하여 그 안에 여러 개의 독자적인 논리적 영역이 있는 것 처럼 만들 수 있다. - 코드가 수행하는 모든 작업을 나열한다. - 이러한 작업을 분리..
-
7.상관없는 하위 문제 추출Technique/Readable Code 2015. 12. 11. 11:06
우리는 문제를 해결 하기 위하여 커다란 문제를 작은 문제들로 쪼갠 다음 각각의 문제에 대한 해결책을 구하고 다시 하나의 해결책으로 맞추는 작업을 한다.이러한 원리를 코드에 적용하면 코드는 더 튿튿해지며 가독성도 좋아진다. 큰 흐름에서 작은 하위 문제를 적극적으로 바견해서 추출하라!■ 주어진 함수나 코드 블록을 보고 스스로에게 질문하라 "상위 수준에서 본 이 코드의 목적은 무엇인가?"■ 코드의 모든 줄에 질문을 던져라 "이 코드는 직접적으로 목적을 위해서 존재하는가? 혹은 목적을 위해서 필요하긴 하지만 목적 자체와 직접적으로 상관없는 하위 문제를 해결 하는가?"■ 만약 상당히 원래의 목적과 직접적으로 관련되지 않은 하위문제를 해결하는 코드 분량이 많으면, 이를 추출해서 별도의 함수로 만든다. sql 데이터..