λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

개발/μš°μ•„ν•œν…Œν¬μ½”μŠ€

λ¬Έμžμ—΄ 계산기λ₯Ό ν…ŒμŠ€νŠΈ 주도 개발(TDD)둜 μ§„ν–‰ν•˜λ©° λŠλ‚€ 점

μ΄λ²ˆμ— μš°μ•„ν•œν…Œν¬μ½”μŠ€μ—μ„œ ν…Œν¬λ‹ˆμ»¬ λΌμ΄νŒ… μ„Έμ…˜μ„ μ§„ν–‰ν–ˆλ‹€. κ±°κΈ°μ„œ 기술적인 λ‚΄μš©μ— λŒ€ν•΄μ„œ μž‘μ„±ν•΄μ•Ό ν–ˆλŠ”λ°, ν‰μ†Œ κ΄€μ‹¬μžˆκ³  μž¬λ―Έμžˆμ–΄ν•˜λŠ” 주제인 ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ— λŒ€ν•΄μ„œ μž‘μ„±ν•΄λ³΄λ©΄ 쒋을 것 κ°™μ•„ ν•΄λ‹Ή λ‚΄μš©μ„ μž‘μ„±ν–ˆλ‹€. 근데 κ΄€μ‹¬μžˆκ³  μž¬λ―Έμžˆμ–΄ ν•˜λŠ” μ£Όμ œμ§€λ§Œ μ‹€μ œλ‘œ ν…ŒμŠ€νŠΈ 주도 개발만으둜 κ°œλ°œμ„ ν•˜μ§„ μ•ŠλŠ”λ‹€. κ·ΈλŸ¬λ‹€λ³΄λ‹ˆ 이 감각을 μžŠμ–΄λ²„λ¦΄ κ²ƒλ§Œ 같기도 ν•˜κ³ , ν”„λ¦¬μ½”μŠ€κ°€ 본격적으둜 μ‹œμž‘λ˜κΈ°λ„ ν•΄μ„œ 1μ£Όμ°¨ 문제인 'λ¬Έμžμ—΄ 계산기'λ₯Ό ν…ŒμŠ€νŠΈ 주도 개발만으둜 ν’€μ–΄λ³΄μ•˜λ‹€.

 

PR 링크: https://github.com/yeezy-com/java-calculator-7/pull/1
 

ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ ν†΅ν•œ λ¬Έμžμ—΄ 계산기 κ΅¬ν˜„ by yeezy-com · Pull Request #1 · yeezy-com/java-calculator-7

 

github.com

 

μ œμΆœν•˜μ§„ μ•Šμ•˜κ³ , κ°œμΈ λ ˆν¬ PR이닀. μ»€λ°‹μ€ μ΄ 125κ°œκ°€ λ‚˜μ™”λ‹€.

μ§€κΈˆλΆ€ν„°λŠ” ν…ŒμŠ€νŠΈ 주도 개발만으둜 ν•΄λ³΄λ©΄μ„œ λŠλ‚€ 점을 μ’€ 풀어보렀고 ν•œλ‹€. 이λ₯Ό μœ„ν•΄ 비ꡐꡰ이 있으면 쒋을 것 κ°™μ•„μ„œ 7κΈ° ν”„λ¦¬μ½”μŠ€ μ‹œμ ˆμ— ν’€μ—ˆλ˜ PR을 λ“€κ³ μ™”λ‹€. 근데, λŠλ‚€ 점 뿐만 μ•„λ‹ˆλΌ μƒκ°μ˜ νλ¦„λŒ€λ‘œ μž‘μ„±ν•˜λ‹€λ³΄λ‹ˆ 글이 가끔 주제λ₯Ό λ²—μ–΄λ‚  μˆ˜λ„ μžˆλ‹€. 일단 READMEλ₯Ό μž‘μ„±ν•˜λŠ” λ°©μ‹μ΄λ‚˜ μ„Έμ„Έν•œ λΆ€λΆ„λ“€λΆ€ν„° 차이가 κ½€ 많이 났닀.

 

μ™Όμͺ½ - ν”„λ¦¬μ½”μŠ€, 였λ₯Έμͺ½ - ν˜„μž¬

 

ν”„λ¦¬μ½”μŠ€ λ‹Ήμ‹œμ—λŠ” ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ΄λΌλŠ” κ°œλ…μ‘°μ°¨ λͺ¨λ₯΄κ³  μžˆμ—ˆκΈ° λ•Œλ¬Έμ—, μ‹œμž‘ν•˜κΈ° 전에 μ–΄λ–€ μš”κ΅¬μ‚¬ν•­μ΄ μžˆμ„μ§€ κ³ λ―Όν•˜λŠ” μ‹œκ°„μ΄ κΈΈμ—ˆλ‹€. ν•˜μ§€λ§Œ, μ²˜μŒλΆ€ν„° λͺ¨λ“  것을 생각할 수 μ—†μ—ˆκΈ° λ•Œλ¬Έμ— κ΅¬ν˜„ν•˜λ©΄μ„œ μ§€μ†μ μœΌλ‘œ μš”κ΅¬μ‚¬ν•­μ„ μΆ”κ°€ν•΄κ°”λ‹€. 그리고 μ΄λŸ¬ν•œ 사항듀을 ν•œ λ²ˆμ— ν•˜λ‚˜μ”© κ΅¬ν˜„ν•˜μ§€ μ•Šκ³ , 계속 λ‹€λ₯Έ μš”κ΅¬μ‚¬ν•­λ“€κ³Ό μ–΄μš°λŸ¬μ§μ„ μƒκ°ν•˜λŠλΌ 둜직 μžμ²΄κ°€ μˆ˜μ •λ˜λŠ” 일도 μž¦μ•˜λ‹€.

 

ν…ŒμŠ€νŠΈ μ£Όλ„ κ°œλ°œλ‘œ ν’€μ—ˆμ„ λ•ŒλŠ” μ‘°κΈˆ λ‹¬λžλ‹€. λ‹Ήμž₯ λ¬Έμ œμ—μ„œ λ³΄μ΄λŠ” κ²ƒλ“€λ§Œ μ§§κ²Œ μ κ³  λ°”λ‘œ κ΅¬ν˜„을 ν–ˆλ‹€. κ·Έ κ³Όμ •μ—μ„œ μƒˆλ‘œμš΄ μš”ꡬ사항이 λ³΄μ΄λ©΄ λ‹Ήμž₯ κ·Έκ²ƒμ— λŒ€ν•΄ μƒκ°ν•˜κΈ° λ³΄λ‹€λŠ” README에 κ°„λ‹¨νžˆ μ κΈ°λ§Œ ν–ˆλ‹€. κ·Έλ¦¬κ³ , ν•œ μ‚¬μ΄ν΄μ„ λŒκ³ λ‚˜λ©΄ μΆ”κ°€λœ μš”ꡬ사항에 λŒ€ν•΄μ„œ λ‹€μ‹œ μ‚¬μ΄ν΄μ„ λ„λŠ” λ°©μ‹μœΌλ‘œ μ§„ν–‰ν–ˆλ‹€. κ·ΈλŸ¬λ‹€λ³΄λ‹ˆ λ‹Ήμž₯ λˆˆ μ•žμ— λ³΄μ΄λŠ” μš”ꡬ사항에 μ’€ λ” μ§‘쀑할 μˆ˜ μžˆμ—ˆλ˜ κ²ƒ κ°™λ‹€. κ·Έλž˜μ„œ μƒκ°λ³΄λ‹€ λ‘œμ§ μžμ²΄κ°€ λ³€κ²½λ˜λŠ” μΌμ€ μ—†μ—ˆκ³ , κ²€μ¦ μ‚¬μ΄μ˜ κ΄€κ³„ μ •λ„λ§Œ μ’€ μƒκ°ν–ˆμ—ˆλ‹€.

 

이 뢀뢄에 λŒ€ν•΄μ„  ν…ŒμŠ€νŠΈ 주도 개발 μžμ²΄κ°€ κ²½ν—˜μ„ μ€¬λ‹€κΈ°μ—λŠ” 쑰금 μ• λ§€ν•œ 것 같기도 ν•˜λ‹€. ν”„λ¦¬μ½”μŠ€λ₯Ό ν•˜λ˜ κ·Έλ•Œμ˜ λ‚˜μ™€ μ§€κΈˆμ˜ λ‚˜λŠ” μ—¬λŸ¬ λ°©λ©΄μ—μ„œ 차이가 κ½€ 클 것이기 λ•Œλ¬Έμ—.. μ•„, ν•˜μ§€λ§Œ μ§„ν–‰ν•˜λ˜ 쀑에 λ‹€λ₯Έ 일을 ν•˜κ³  λ‹€μ‹œ λŒμ•„μ™€ μ½”λ“œλ₯Ό μ§€λ•Œ ν…ŒμŠ€νŠΈ 주도 개발이 ν™•μ‹€νžˆ 도움이 크긴 ν–ˆλ‹€. μ΄μ „μ—λŠ” λ‹€μ‹œ μžλ¦¬μ— μ•‰μœΌλ©΄ 'λ‚΄κ°€ 뭘 κ΅¬ν˜„ν•˜κ³  μžˆμ—ˆμ§€?'와 같은 고민으둜 μ‹œμž‘ν–ˆλ˜ 것 같은데, ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ κ·Έ 진행도가 ν™•μ‹€ν•˜κ²Œ λˆˆμ— λ³΄μ΄λ‹ˆκΉŒ μ΄λŸ¬ν•œ ν˜„μƒμ΄ μ—†μ—ˆλ‹€. 특히 이 뢀뢄은 컀밋을 μ„Έμ„Έν•˜κ²Œ λ‚˜λˆ μ„œ 더 그런 것 같기도 ν•˜λ‹€. 근데 컀밋은 κ·Έμ € ν…ŒμŠ€νŠΈ 주도 개발 μ§„ν–‰ 과정을 μœ„ν•΄ μ„Έμ„Έν•˜κ²Œ 남긴 것이지 보톡 λͺ¨λ“  사이클을 돌고 ν•˜λ‚˜μ˜ 컀밋을 λ‚¨κΈ°λŠ”κ²Œ 쒋을 것 κ°™λ‹€.

 

μ™Όμͺ½ - ν”„λ¦¬μ½”μŠ€, 였λ₯Έμͺ½ - ν˜„μž¬

 

이 뢀뢄도 κ²½ν—˜μ˜ 차이가 크닀고 μƒκ°ν•˜κΈ΄ ν•˜μ§€λ§Œ, ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ κ³Όν•œ 섀계λ₯Ό μ–΄λŠμ •λ„ λ°©μ§€ν•΄μ£ΌλŠ” 것 κ°™λ‹€. ν”„λ¦¬μ½”μŠ€ μ‹œμ ˆμ—λŠ” μžλ°”λ‘œ λ­”κ°€ κ°œλ°œν•˜λŠ”κ±Έ 처음 ν•΄λ³΄κΈ°λ„ν•΄μ„œ 남듀 ν•˜λ“―μ΄ λ”°λΌν–ˆλ‹€. κ·Έλž˜μ„œ μ΄λ²ˆμ— 비ꡐꡰ이 λ˜μ§„ λͺ»ν•  것 κ°™λ‹€. ν˜„μž¬λŠ” Splitter, Calculator μ •λ„λ‘œ λ§ˆλ¬΄λ¦¬ν–ˆλ‹€. 그리고 이런 객체λ₯Ό λ§Œλ“œλŠ” κ³Όμ •μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ²Œ λ˜λ‹ˆκΉŒ, μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ¨Όμ € κ³ λ―Όν•˜κ²Œ 됐닀.

 

이게 또 ν…ŒμŠ€νŠΈμ˜ λͺ©μ  μžμ²΄κ°€ ν…ŒμŠ€νŠΈ λ©”μ„œλ“œ μ΄λ¦„μœΌλ‘œ λ‚˜νƒ€λ‚˜λ‹€ λ³΄λ‹ˆκΉŒ, μΈν„°νŽ˜μ΄μŠ€ 이름을 κ³ λ―Όν•˜λŠ” μ‹œκ°„λ„ μ§§μ•˜λ‹€. μ˜ˆμ „ κ°™μœΌλ©΄ κ΅¬ν˜„μ„ λ¨Όμ € ν•˜κ³  이름을 μƒκ°ν–ˆμ„ 것이닀. 이런건 μ°Έ ν…ŒμŠ€νŠΈ 주도 개발의 μž₯점이라고 μƒκ°ν•œλ‹€.

 

음.. μ§„λΆ€ν•˜κΈ΄ ν•œλ°, λ¦¬νŒ©ν„°λ§ κ³Όμ •μ—μ„œλ„ 두렀움이 λœν–ˆλ‹€. ν…ŒμŠ€νŠΈλΌλŠ” μ΅œμ†Œν•œμ˜ 방어막이 μ‘΄μž¬ν•˜λ‹ˆκΉŒ λ‚΄λΆ€ κ΅¬ν˜„μ„ νœ™νœ™ λ°”κΎΈλŠ” 것에 큰 두렀움이 μ—†μ—ˆλ‹€. 그리고 이건 μ΄λ²ˆμ— μ§„ν–‰ν•˜λ©΄μ„œ μ•Œκ²Œ 된건데, ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ—μ„œλŠ” 'κ°€μ§œ κ΅¬ν˜„'이 핡심이닀. 근데 이 κ°€μ§œ κ΅¬ν˜„μ„ 'μ§„μ§œ κ΅¬ν˜„'으둜 λ§Œλ“œλŠ” 것도 λ¦¬νŒ©ν„°λ§ 과정에 ν¬ν•¨λœλ‹€λŠ” 점이닀. 예λ₯Ό ν•˜λ‚˜ λ“€λ©΄

 

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 4);

	assertThat(sum).isEqualTo(6);
}

 

κ°„λ‹¨ν•˜κ²Œ μ΄λŸ¬ν•œ ν…ŒμŠ€νŠΈκ°€ μžˆλ‹€κ³  ν•˜μž. 그리고 ν˜„μž¬λŠ” red 단계에 ν•΄λ‹Ήν•œλ‹€. 그러면 ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ—μ„œλŠ” 이λ₯Ό λΉ λ₯΄κ²Œ green으둜 λ§Œλ“€κΈ° μœ„ν•΄μ„œ 이런 λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  것이닀.

 

public class Calculator {

	public int sum(int n1, int n2) {
		return 6;
	}
}

 

이게 λ°”λ‘œ ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ—μ„œ λ§ν•˜λŠ” 'κ°€μ§œ κ΅¬ν˜„'이닀. μ΄μ „μ—λŠ” μ΄λŸ¬ν•œ κ°€μ§œ κ΅¬ν˜„μ„ μ§„μ§œ κ΅¬ν˜„μœΌλ‘œ λ§Œλ“€κΈ° μœ„ν•΄μ„œλŠ” λΉ„μŠ·ν•œ ν…ŒμŠ€νŠΈλ₯Ό 계속 μ—¬λŸ¬ 개 λ§Œλ“€μ–΄κ°€λ©° green 단계λ₯Ό 거쳐야 ν•œλ‹€κ³  μƒκ°ν–ˆμ—ˆλ‹€. 예λ₯Ό λ“€λ©΄ 이런 방식이닀.

 

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 4);

	assertThat(sum).isEqualTo(6);
}

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€2() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(4, 4);

	assertThat(sum).isEqualTo(8);
}

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€3() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 3);

	assertThat(sum).isEqualTo(5);
}

 

이런 사이클을 λŒλ‹€λ³΄λ©΄ κ²°κ΅­ μ§„μ§œ κ΅¬ν˜„μ„ λ§Œλ“€κ²Œ λœλ‹€λŠ” μƒκ°μ΄μ—ˆλ‹€.

 

public class Calculator {

	public int sum(int n1, int n2) {
		return n1 + n2;
	}
}

 

ν•˜μ§€λ§Œ, μΌ„νŠΈ λ²‘은 μ΄λŸ¬ν•œ 'μ§„μ§œ κ΅¬ν˜„을 λ§Œλ“œλŠ” κ²ƒ'μ‘°μ°¨ λ¦¬νŒ©ν„°λ§μ˜ κ³Όμ •μœΌλ‘œ λ³΄κ³  μžˆμ—ˆλ‹€. κ·Έ κ³Όμ •은 μƒκ°λ³΄λ‹€ μ„Έμ„Έν•˜λ‹€. μ•„λž˜λŠ” κ·Έ κ³Όμ •을 λ‚˜νƒ€λ‚Έ κ²ƒμ΄λ‹€. μ •ν™•ν•˜μ§„ μ•Šμ„ μˆ˜ μžˆμ§€λ§Œ λ‚˜λŠ” μ΄λ ‡κ²Œ λ°›μ•„λ“€μ˜€λ‹€λŠ” μ μ„ μ•Œκ³  λ΄μ£Όλ©΄ μ’‹μ„ κ²ƒ κ°™λ‹€.

 

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 4);

	assertThat(sum).isEqualTo(6);
}

public class Calculator {

	public int sum(int n1, int n2) {
		return 6;
	}
}

 

ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ—μ„œλŠ” λ¦¬νŒ©ν„°λ§ κ³Όμ •μ—μ„œ κ°€μž₯ κ°•μ‘°ν•˜λŠ”κ±΄ '쀑볡 제거'이닀. ν…ŒμŠ€νŠΈμ™€ Calculator μ‚¬μ΄μ˜ 쀑볡이 λ³΄μ΄λŠ”κ°€? λ‚˜λ„ μ²˜μŒμ—” λ­”κ°€ν–ˆμ§€λ§Œ, '6'이 λ°”λ‘œ 쀑볡이닀. 이λ₯Ό μΌ„νŠΈ 벑은 쀑볡이 ν…ŒμŠ€νŠΈμ— μžˆλŠ” 데이터와 μ½”λ“œμ— μžˆλŠ” 데이터 사이에 μ‘΄μž¬ν•œλ‹€κ³  ν‘œν˜„ν•œλ‹€. 그럼 이λ₯Ό μ–΄λ–»κ²Œ κ°œμ„ ν• κΉŒ?

 

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 4);

	assertThat(sum).isEqualTo(6);
}

public class Calculator {

	public int sum(int n1, int n2) {
		return 2 + 4;
	}
}

 

μ΄λ ‡κ²Œ 6을 2 + 4둜 λ°”κΎΌλ‹€. ν•˜μ§€λ§Œ, μ—¬κΈ°μ„œ λ˜ μž¬λ°ŒλŠ” μ μ€ 2와 4도 μ€‘λ³΅μ΄λΌλŠ” μ μ΄λ‹€. ν…ŒμŠ€νŠΈ μ½”λ“œμ— 2, 4κ°€ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. κ·ΈλŸΌ λ¨Όμ € 2λ₯Ό μ–΄λ””μ„œ μ–»μ„ μˆ˜ μžˆλŠ”κ°€? 'int n1'이닀.

 

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 4);

	assertThat(sum).isEqualTo(6);
}

public class Calculator {

	public int sum(int n1, int n2) {
		return n1 + 4;
	}
}

 

μƒμˆ˜λ₯Ό 인자둜 λŒ€μ²΄ν–ˆλ‹€. 그러면 λ‹€μ‹œ 4κ°€ λ‚¨λŠ”λ‹€. 이 λ˜ν•œ μ€‘λ³΅μ΄λ―€λ‘œ 같은 과정을 λ°Ÿμ•„ λ‹€μŒμ²˜λŸΌ μ œκ±°ν•  수 μžˆμ„ 것이닀.

 

@Test
void 두_수의_합을_λ°˜ν™˜ν•œλ‹€() {
	final var calculator = new Calculator();

	final var sum = calculator.sum(2, 4);

	assertThat(sum).isEqualTo(6);
}

public class Calculator {

    public int sum(int n1, int n2) {
		return n1 + n2;
	}
}

 

이러면 'μ§„μ§œ κ΅¬ν˜„'이 μ™„μ„±λœλ‹€. 이 κ³Όμ • μžμ²΄κ°€ 되게 무의미 해보일 μˆ˜λ„ μžˆλ‹€. ν•˜μ§€λ§Œ, 이런 μ„Έμ„Έν•œ κ΅¬ν˜„ 과정을 λ°Ÿμ•„λ‚˜κ°€λŠ” λŠ₯λ ₯을 κ°•μ‘°ν•˜κ³  μ‹Άλ‹€. μ§€κΈˆμ€ μ˜ˆμ œκ°€ 되게 λ‹¨μˆœν•΄μ„œ μ‹œμ‹œν•  수 μžˆμ§€λ§Œ μ–΄λ €μš΄ μš”κ΅¬μ‚¬ν•­ μ΄μ—ˆλ‹€κ³  μƒκ°ν•΄λ³΄μž. μ΄λŸ¬ν•œ λŠ₯λ ₯이 μ—†λ‹€λ©΄, μ•„λ§ˆ ν•œ λ­‰ν……μ΄λ‘œ κ΅¬ν˜„μ„ ν•˜κ²Œ 될 것이고.. κ²°κ΅­ 둀백의 과정을 많이 κ²ͺ을 것이닀. ν•˜μ§€λ§Œ 이런 λŠ₯λ ₯을 톡해 문제λ₯Ό μ’€ 더 잘게 λ‚˜λˆ„μ–΄ 정볡할 수 μžˆλ‹€. λ‚˜λŠ” μ΄λŸ¬ν•œ μ μ—μ„œ ν…ŒμŠ€νŠΈ 주도 개발이 λ§Žμ€ 도움이 λ˜μ—ˆλ‹€κ³  μƒκ°ν•œλ‹€. μ΄λŸ¬ν•œ 뢀뢄이 곡감이 μ•ˆκ°„λ‹€λ©΄ μ•„μ‰¬μš΄κ±°μ§€ 뭐 μ–΄μ©” 수 μ—†λ‹€.

 

ν•˜μ§€λ§Œ μ΄λ ‡κ²Œ 강쑰해도 λŠ₯λ ₯을 μ•„λŠ” 것과 μ“°λŠ” 것은 차이가 ν™•μ‹€νžˆ μžˆλ‹€. 막상 κ΅¬ν˜„ν•˜λ‹€λ³΄λ‹ˆ μ–΄λ””κΉŒμ§€κ°€ μ„Έμ„Έν•œ κ΅¬ν˜„μΌκΉŒ? λΌλŠ” 고민도 되게 많이 ν–ˆλ‹€. κ·ΈλŸ¬λ‹€λ³΄λ‹ˆ κ½€ 였랜 μ‹œκ°„μ΄ 걸리기도 ν–ˆλ‹€.. μ§€μ†μ μœΌλ‘œ ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ ν’€μ–΄λ³΄λŠ”κ²Œ 쒋을 것 κ°™λ‹€. μΌ„νŠΈ 벑도 ν•œ 문제λ₯Ό μ—¬λŸ¬ 번 ν’€μ–΄λ³΄λŠ”κ±Έ μΆ”μ²œν•˜κΈ°λ„ ν–ˆλ‹€. 맀번 κ΅¬ν˜„ν• λ•Œλ§ˆλ‹€ λ‹€λ₯Έ λ°©μ‹μœΌλ‘œ λ§Œλ“€μ–΄μ§€λŠ”κ²Œ 묘미라고 ν•œλ‹€.

 

또 μ–˜κΈ°ν• κ²Œ μ–΄λ–€ 것이 μžˆμ„κΉŒ.. μ•„, ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ 톡해 κ΅¬ν˜„μ„ λ‹€ ν•œ 후에 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ‹€μ œ λ™μž‘μΈ μž…λ ₯ - 좜λ ₯의 κΈ°λŠ₯듀을 λ§Œλ“€λ©° μ‘°λ¦½ν–ˆλŠ”λ°, μ˜ˆμƒν–ˆμ„ λ•Œμ™€ λ‹€λ₯΄κ²Œ μ‹€μ œ μž…λ ₯μ—μ„œ μ—λŸ¬κ°€ λ°œμƒν•˜κΈ°λ„ ν–ˆλ‹€. `\n` 이 κ°œν–‰λ¬Έμžκ°€ λ¬Έμ œμ˜€λ˜ 것인데, ν…ŒμŠ€νŠΈλŠ” ν†΅κ³Όν•˜λŠ”λ° 자꾸 μ‹€μ œ μž…λ ₯으둜 μ²˜λ¦¬ν•˜λ©΄ μ‹€νŒ¨ν•˜λŠ” 그런 λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. κ·Έλž˜μ„œ κ½€ μ• λ¨Ήμ—ˆλ˜ 기얡이 λ‚œλ‹€.

 

또, 이게 green κ³Όμ • 이후에 μƒˆλ‘œμš΄ red ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”λ° μ•ž λ‹¨μ—μ„œ κ΅¬ν˜„ν•œ 것듀 λ•Œλ¬Έμ— μƒˆλ‘­κ²Œ μž‘μ„±ν•œ red ν…ŒμŠ€νŠΈλ“€μ΄ λ°”λ‘œ μ„±κ³΅ν•˜λŠ” κ²½μš°λ„ μžˆμ—ˆλ‹€. 특히, 검증이 κ·Έλž¬λ‹€. 이런 κ²½μš°μ—λŠ” μ˜ˆμ™Έ λ©”μ‹œμ§€κΉŒμ§€ ν…ŒμŠ€νŠΈ 톡과 κΈ°μ€€μœΌλ‘œ μ‚Όμ•„μ„œ red ν…ŒμŠ€νŠΈλ₯Ό λ§Œλ“€κΈ°λ„ ν–ˆλ‹€. 이 방식을 μƒκ°ν•˜κΈ° μ „μ—λŠ” `red-green` μ΄λΌλŠ” μ»€λ°‹μœΌλ‘œ ν•˜λ‚˜ λ‚¨κ²ΌλŠ”λ°, 이 뢀뢄은 μ’€ 아쉽기도 ν•˜λ‹€. 이에 λŒ€ν•΄ claude도 ν•œ μ†Œλ¦¬ ν–ˆλ‹€.

 

 

ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ '개발'을 μœ„ν•œ λ°©λ²•λ‘ μ΄μ§€λ§Œ κ°œλ°œμžλ“€μ˜ 사고 κ³Όμ • 자체λ₯Ό λ°”κΏ”μ€€λ‹€λŠ” μ μ—μ„œ 되게 λ§€λ ₯적이닀. λ˜ν•œ, 이런 사고 κ³Όμ • μžμ²΄λ„ λ‚΄κ²Œ 되게 잘 λ§žλŠ”λ‹€κ³  λŠκΌˆλ‹€. μ•žμœΌλ‘œλ„ μ’…μ’… μ΄λŸ¬ν•œ λ¬Έμ œλ‚˜ μ‹€μ œ ν”„λ‘œμ νŠΈμ—μ„œλ„ ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ„ 톡해 μ­‰ μ΄μ–΄λ‚˜κ°ˆ 것 κ°™λ‹€. λ‹€λ“€ ν…ŒμŠ€νŠΈ 주도 개발의 λ§€λ ₯을 느끼고 μ‹œλ„ν•΄λ΄€μœΌλ©΄ ν•œλ‹€.