반응형

머큐리얼 명령어

- 최신 branch pull (현재 내가 작업중인 건 변경되지 않는다.)

- 현재 로컬에 작업 내용은 제거 되고 최신으로 update 된다.

hg pull -u
hg update --clean

- head 확인

- 현재 위치확인

hg heads
hg id

 

반응형
반응형

오리 시뮬레이션 프로그램이 있습니다. 오리 시뮬레이션 안에는 여러 종류의 오리들이 있습니다. 시뮬레이션 안에 오리를 생성하기 위해서 처음 Duck라는 클래스를 만들어 봅니다.

 

1. Duck클래스를 상속받아서 흰 오리, 청둥오리, 장난감 오리를 생성합니다.

Duck 클래스에는 Fly행동, Quack행동 메서드가 존재하는데 이걸 그대로 상속받는 클래스들은 필요에 따라서 오버라이딩을 해야 됩니다. 장난감 오리는 날 수도 없고 말하지도 못하기 때문에 오버라이딩이 필요합니다. 또 말 못 하는 나무 오리가 추가가 된다면 상속 후 오버라이딩으로 코드를 작성해줘야 됩니다.(이때 작성하는 코드는 말 못 하는 장난감 오리와 동일) 현재는 3개의 오리만 있어서 영향범위가 작아 보이나 수백 마리의 오리를 필요에 따라 오버라이딩을 한다는 것은 쉬운 일이 아닙니다.

 

2. 상속 대신 인터페이스만을 사용합니다ㅐ인터페이스를 사용 하게 되면 각각 코드를 구현 해야됩니다. 인터페이스만을 사용한다면 엄청난 코드 중복이 됩니다. 위에서 나온 말 못하는 장난감 오리와 나무 오리만 봐도 코드 중복이 되고 있습니다. 

 

바뀌는 부분과 그렇지 않은 부분을 분리 합니다.

3. 변경사항 없는 부분은 Duck클래스에 두고 바뀌는 부분은 묶어서 인터페이스를 구현합니다.

행동들을 묶어서 각각 인터페이스를 구현합니다. 그리고 구현된 인터페이스는, 인터페이스 변수를 Duck 클래스에서 선언하여 사용합니다.

장난감 오리와 나무 오리는 구현된 Mute행동을 사용하면 재사용도 가능하고 영향범위를 줄일 수 있겠습니다.

 

 

디자인 원칙

  • 애플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분으로부터 분리시킨다.
  • 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다.
  • 상속보다는 구성(composition)을 활용한다. (A에는 B가 있다. -> 행동을 상속받기보다는 행동 객체로 구성하여 행동을 부여)

반응형
반응형

테이블 설계를 할 때는 정말 많은 것들을 고려한다. 시중에 나와 있는 책을 보면 두꺼운 책으로 몇 권을 설명할 정도로 가벼운 양이 아니다. 배운 내용들에 대해서 그리고 실무를 통해서 생각했던 것들에 대해서 틈틈이 정리를 해보자.

 

1. 테이블 설계를 충분히 고려하지 못했을 때

거래 시스템을 설계한다고 보자. 테이블 설계 시 거래를 발생시킬 수 있도록 거래 테이블을 설계되었다. 거래가 발생하여 거래 테이블의 차곡차곡 데이터가 쌓이고 있다. 하지만 문제점이 있었다. 거래 발생 시 구조상 거래는 당사의 계약정보와 금액이 달라도 거래가 발생되게끔 되어 있는데, 계약정보와 다르게 금액이 발생하고 있었던 것이다. 8천 원 물건을 잘못된 쿼리 문제로 1만원에 거래가 발생되고 있었다. 발생한 거래에 대해서 수정하기 위해 UPDATE를 시도를 했지만 거래 테이블의 거래 품목의 대한 정보가 없어 문제의 거래들을 찾아낼 수 없었다. 문제 발생 시 정산까지 고려를 하지 못해 거래 데이터가 잘못되어도 건을 찾을 수 없는 문제가 발생했다. 문제 발생 찾는 시기도 지연이 되었는데 또 다른 문제가 검수 로직이 부족하여 거래 발생과 계약정보의 따른 검수 로직이 부족한 것을 확인하였다.

 

- 테이블 설계 시 정산까지 고려 부족 (정산 마인드를 갖추자)

- 검수 로직 부족

 

2. 테이블 설계를 충분히 고려하지 못했을 때

프로모션을 기획하게 되었다. 거래가 발생할 때 건에 대해서 프로모션을 적용을 하게 되는데 프로모션 금액도 별도로 관리하게 된다. 처음 기획할 때 프로모션이 하나여서 하나만 적용할 것으로 생각이 되었는지 금액 칼럼을 하나만 만들었 던 것이다. 하지만 프로모션이 여러 가지 생기면서, 생길 때마다 컬럼을 추가하고 영향범위에 포함된 시스템의 수정 개발 작업이 들어간다. 최초 개발할 때 프로모션이 여러 개 생길 것으로 고려했다면 프로모션 종류 컬럼 그리고 금액 컬럼을 만들었을 것이다. 그렇게 된다면 새로운 프로모션이 발생해도 코드값만 추가하고, 컬럼 작업 그리고 수정 개발을 할 필요는 없어진다.

 

이미 만들어진 데이터베이스 구조는 바꾸기가 쉽지 않다. 수많은 시스템에 연계되어 있기 때문에 구조를 바꾸게 되면 시스템 전체가 흔들리는 일까지도 발생할 수 있고, 영향범위가 넓어 섣불리 변경할 수 없다.

반응형
반응형
git reset --hard HEAD
git pull upstream master

// git reset --hard 해당commit
// 해당 commit으로 이동 후, 이동 이후 커밋 내용은 삭제 합니다.

 

반응형
반응형

오라클 쿼리를 작성할 때 거리 모든 쿼리에는 조인이 포함되어 있습니다.

조인 시 주의사항 중 하나는 NULL값 = NULL값으로 조인이 들어가는 경우는 조인이 되지 않아 값이 누락이 발생합니다. null값이 들어 오는 경우는 nvl을 처리해서 조인을 하셔야 됩니다.

NVL(A.컬럼, 0) = NVL(B.컬럼, 0)

자주 하는 실수이니 꼭 주의하시기 바랍니다.

반응형

+ Recent posts