나는 15ë…„ ì´ìƒì˜ ê²½ë ¥ì„ ê°€ì§„ 프로그래머ì´ë©° ë§Žì€ ì—¬ëŸ¬ 언어, 패러다임, í”„ë ˆìž„ì›Œí¬ë¥¼ ì‚¬ìš©í•´ë´¤ê³ ë§Žì€ ì‚½ì§ˆì„ í•´ë´¤ë‹¤.
ê·¸ë¦¬ê³ ë‚˜ëŠ” ì¢‹ì€ ì½”ë”©ì„ ìž‘ì„±í•˜ê¸° 위한 ë‚˜ë§Œì˜ ê·œì¹™ë“¤ì„ ì—¬ëŸ¬ë¶„ì—게 ê³µìœ í•˜ê³ ìž í•œë‹¤.
최ì í™” VS ê°€ë…성. 최ì 화보단 ê°€ë…성
코드는 í•ìƒ ì½ê¸° ì‰½ê³ ê°œë°œìžë“¤ì´ ì´í•´í• 수 ìžˆê²Œë” ìž‘ì„±í•˜ë¼. ì½ê¸° ì–´ë ¤ìš´ 코드를 ì½ëŠ”ë° ì†Œëª¨ë˜ëŠ” 시간과 ë¹„ìš©ì€ ìµœì 화로부터 ì–»ì„ ìˆ˜ 있는 것보다 ë”ìš± í¬ë‹¤. 최ì 화가 필요하다면, DI (ì˜ì¡´ì„± 주입)ì„ ì‚¬ìš©í•´ ë…립ì ì¸ ëª¨ë“ˆë¡œ ë§Œë“¤ê³ , 100%ì˜ í…ŒìŠ¤íŠ¸ 커버리지를 ìœ ì§€í•˜ì—¬ 최소 1ë…„ê°„ì€ ê±´ë“¤ì§€ ì•Šì•„ë„ ë˜ë„ë¡ ë§Œë“¤ì–´ë¼.
아키í…처 ìš°ì„
나는 “우리는 빨리 ê°œë°œì„ í•´ì•¼í•˜ê¸° ë•Œë¬¸ì— ì•„í‚¤í…처를 ì„¤ê³„í• ì‹œê°„ì´ ì—†ë‹¤”ë¼ê³ ë§í•˜ëŠ” ì‚¬ëžŒì„ ë§Žì´ ë´ì™”다. ê·¸ë¦¬ê³ ê·¸ 중 99%ê°€ ì´ëŸ¬í•œ ìƒê° ë•Œë¬¸ì— í° ë¬¸ì œë¥¼ 겪었다.
아키í…처를 ìƒê°í•˜ì§€ ì•Šê³ ì½”ë“œë¥¼ 작성하는 ê²ƒì€ ëª©í‘œ 달성ì„위한 계íšì—†ì´ ìžì‹ ì˜ ìš•ë§ì„ 꿈꾸는 것처럼 쓸모가 없다. 코드를 작성하기 ì „ì— ë¨¼ì € 수행 í• ìž‘ì—…, 사용 방법, 모듈화 방법, 서비스가 서로 어떻게 ë™ìž‘하는지, 구조가 무엇ì¸ì§€, 테스트 ë° ë””ë²„ê¹… 방법, ì—…ë°ì´íŠ¸ ë°©ë²•ë“¤ì„ ë¨¼ì € ìƒê°í•˜ê³ ì´í•´í•´ì•¼í•œë‹¤.
테스트 커버리지
테스트는 ì¢‹ì€ ì¼ì´ì§€ë§Œ í•ìƒ 비용 효율ì ì¸ê±´ 아니며 프로ì íŠ¸ì— ë”°ë¼ ë‹¤ë¥´ë‹¤.
테스트가 필요한 경우:
- 최소 í•œ ë‹¬ê°„ì€ ê±´ë“¤ì§€ ì•Šì•„ë„ ë 모듈ì´ë‚˜ 마ì´í¬ë¡œì„œë¹„스를 개발하는 경우
- 오픈소스 코드를 작성하는 경우
- 핵심 코드 ë˜ëŠ” ê¸ˆì „ì ì¸ ë¶€ë¶„ê³¼ 맞닿는 코드를 작성하는 경우
- 코드를 ì—…ë°ì´íŠ¸ 하는 것과 ë™ì‹œì— 테스트를 ì—…ë°ì´íŠ¸ í• ìˆ˜ 있는 충분한 ë¹„ìš©ì´ ìžˆëŠ” 경우
테스트가 필요하지 않는 경우:
- ìŠ¤íƒ€íŠ¸ì—…ì¸ ê²½ìš°
- íŒ€ì´ ìž‘ê³ ì½”ë“œê°€ ë¹ ë¥´ê²Œ 변하는 경우
- ì¶œë ¥ê°’ì„ ë³´ê³ ê°„ë‹¨í•˜ê²Œ 수ë™ìœ¼ë¡œ 테스트가 가능한 스í¬ë¦½íŠ¸ë¥¼ 작성하는 경우
ë‚˜ìœ í…ŒìŠ¤íŠ¸ 코드와 함께 코드를 짜는 ê²ƒì€ í…ŒìŠ¤íŠ¸ê°€ 없는 코드보다 ë” ìœ„í—˜í• ìˆ˜ 있ìŒì„ 기억하ë¼.
ê°„ë‹¨í•˜ê³ ë‹¨ìˆœí•˜ê²Œ
복잡한 코드를 작성하지 ë§ë¼. 간단하게 작성하면 버그가 ì¤„ì–´ë“¤ê³ ë””ë²„ê¹… ì‹œê°„ë„ ì¤„ì–´ë“¤ 수 있다. 코드는 ìˆ˜ë§Žì€ ì¶”ìƒí™” ë° ê¸°íƒ€ ê°ì²´ì§€í–¥ì ì¸ ë¬¸ì œ (특히 Java 개발ìžì™€ ê´€ë ¨ì´ ìžˆìŒ) ì—†ì´ ë”± 필요한 ì¼ë§Œì„ 수행해야하며, ì¶”í›„ì— ê°„ë‹¨í•œ 방법으로 코드를 ì—…ë°ì´íŠ¸í•˜ê¸° 위해 필요한 ê²ƒì˜ 20%를 수행해야한다.
주ì„
주ì„ì€ ë‚˜ìœ ì½”ë“œë¥¼ 보여준다. ì¢‹ì€ ì½”ë“œëŠ” ì£¼ì„ ì—†ì´ë„ ì´í•´í• 수 있어야한다. 그러면 새로운 개발ìžë¥¼ 위해 ì‹œê°„ì„ ì ˆì•½í•˜ê¸° 위해 해야 í• ì¼ì€ 무엇ì¸ê°€? — ë©”ì„œë“œì˜ ì •ì˜ì™€ ì‚¬ìš©ë²•ì„ ì„¤ëª…í•˜ëŠ” í•œ 줄짜리 간단한 문서를 작성하ë¼. ì´ëŠ” ì´í•´ë¥¼ 위한 ë§Žì€ ì‹œê°„ì„ ì ˆì•½í•´ 줄 것ì´ë©° — ë” ë§Žì€ ì‚¬ëžŒë“¤ì—게 메서드를 ë” ìž˜ êµ¬í˜„í• ìˆ˜ 있는 기회를 ì œê³µí•´ì¤€ë‹¤. ë˜í•œ ì´ëŠ” 글로벌 코드 문서화를 위한 ì¢‹ì€ ì‹œìž‘ì ì´ ë 것ì´ë‹¤.
ê°•í•œ ê²°í•© VS ëŠìŠ¨í•œ ê²°í•©
í•ìƒ 마ì´í¬ë¡œì„œë¹„스 아키í…처를 사용하ë„ë¡ ë…¸ë ¥í•˜ë¼. 모놀리틱 소프트웨어는 마ì´í¬ë¡œì„œë¹„스 소프트웨어보다 ë¹ ë¥´ì§€ë§Œ, ë‹¨ì¼ ì„œë²„ 환경ì—서만 ê·¸ë ‡ë‹¤. 마ì´í¬ë¡œì„œë¹„스는 ì—¬ëŸ¬ë¶„ì˜ ì†Œí”„íŠ¸ì›¨ì–´ë¥¼ 여러 ì„œë²„ë¡œì˜ ë¶„ì‚°ë¿ë§Œ ì•„ë‹ˆë¼ ê°€ë”ì€ í•˜ë‚˜ì˜ ë¨¸ì‹ ì—ì„œì˜ ë¶„ì‚°ì²˜ë¦¬ (프로세스 ë¶„ì‚°ì„ ì˜ë¯¸í•œë‹¤)ë„ í• ìˆ˜ 있는 ê°€ëŠ¥ì„±ì„ ì œê³µí•´ì¤€ë‹¤.
코드 리뷰
코드 리뷰는 ì¢‹ì„ ìˆ˜ë„ ìžˆê³ ë‚˜ì ìˆ˜ë„ ìžˆë‹¤.
ì—¬ëŸ¬ë¶„ì˜ íŒ€ì— ì½”ë“œì˜ 95%를 ì´í•´í•˜ê³ ìžˆê³ ì‹œê°„ ë‚비 ì—†ì´ ëª¨ë“ ì—…ë°ì´íŠ¸ 사í•ì„ ëª¨ë‹ˆí„°ë§ í• ìˆ˜ 있는 개발ìžê°€ 있는 경우ì—만 코드 리뷰를 ë„입하ë„ë¡ í•˜ë¼. ì´ ì™¸ì˜ ê²½ìš°ì—는 단지 시간 ë‚비가 ë 수 있으며 모ë‘ê°€ ì´ë¥¼ 싫어하게 ë 것ì´ë‹¤. ì´ ë¶€ë¶„ì€ ë§Žì€ ì§ˆë¬¸ì„ ê°€ì ¸ì˜¤ê¸° ë•Œë¬¸ì— ì´ë¥¼ 좀 ë” ê¹Šê²Œ 살펴보ìž.
ë§Žì€ ì‚¬ëžŒë“¤ì€ ì½”ë“œ 리뷰가 새로운 사람ì´ë‚˜ ì½”ë“œì˜ ë‹¤ë¥¸ ë¶€ë¶„ì„ ìž‘ì—…í•˜ëŠ” 팀ì›ì„ 가르치는 ì¢‹ì€ ë°©ë²•ì´ë¼ê³ ìƒê°í•œë‹¤. 그러나 코드 ë¦¬ë·°ì˜ ì£¼ìš” 목표는 코드 í’ˆì§ˆì„ ìœ ì§€í•˜ëŠ” 것ì´ì§€ 가르치는게 아니다. ì—¬ëŸ¬ë¶„ì˜ íŒ€ì´ ì›ìžë¡œ ë˜ëŠ” 우주 로켓 엔진 ëƒ‰ê° ì‹œìŠ¤í…œì„ ì œì–´í•˜ëŠ” 코드를 ìž‘ì„±í–ˆë‹¤ê³ ê°€ì •í•´ë³´ìž. ê·¸ë¦¬ê³ ì—¬ëŸ¬ë¶„ì€ ì•„ì£¼ ì–´ë ¤ìš´ ë¡œì§ì—ì„œ í° ì‹¤ìˆ˜ë¥¼ ì €ì§ˆë €ê³ , ì´ë¥¼ 새로운 사람ì—게 코드 리뷰를 위해 ì œê³µí–ˆë‹¤ê³ í•´ë³´ìž. ì´ ê²½ìš° ì—¬ëŸ¬ë¶„ì€ ì‚¬ê³ ìœ„í—˜ì— ëŒ€í•´ 어떻게 ìƒê°í•˜ëŠ”ê°€? — ë‚´ ëŒ€ë‹µì€ 70% ì´ìƒì´ë‹¤.
ì¢‹ì€ íŒ€ì€ ê°ìžê°€ ìžì‹ ì˜ ì—í• ì„ ê°€ì§€ê³ ìžˆìœ¼ë©° ì¼ì˜ í•œ ë¶€ë¶„ì— ëŒ€í•´ ì™„ì „í•œ ì±…ìž„ê°ì„ ê°–ê³ ìžˆëŠ” 팀ì´ë‹¤. 만약 누가 ì½”ë“œì˜ ë‹¤ë¥¸ ë¶€ë¶„ì„ ì´í•´í•˜ê³ 싶으면 해당 ë¶€ë¶„ì„ ë‹´ë‹¹í•˜ê³ ìžˆëŠ” 사람ì—게 찾아가 ì§ˆë¬¸ì„ í•˜ë©´ëœë‹¤. ëª¨ë“ ê±¸ 아는건 불가능하며 ì „ì²´ë³´ë‹¤ëŠ” ì½”ë“œì˜ ìž‘ì€ ë¶€ë¶„ì„ (하지만 ì ì–´ë„ 30%는) ì™„ì „ížˆ ì´í•´í•˜ëŠ”ê²ƒì´ ë” ë‚«ë‹¤.
ë¦¬íŒ©í† ë§ì€ ìž‘ë™í•˜ì§€ 않는다
나는 ì¼í•˜ëŠ” ë™ì•ˆ â€œë‚˜ì¤‘ì— ë¦¬íŒ©í† ë§ í• ê±°ë‹ˆê¹Œ ê±±ì •í•˜ì§€ë§ˆë¼”ë¼ëŠ” ë§ì„ ë§Žì´ ë“¤ì—ˆë‹¤. ê·¸ë¦¬ê³ ë‚˜ì¤‘ì— ì´ëŠ” í° ê¸°ìˆ ì 부채로 ëŒì•„오거나 ëª¨ë“ ì½”ë“œë¥¼ 다 ì‚ì œí•œ 후 처ìŒë¶€í„° 다시 작성하게 ë˜ì—ˆë‹¤.
ë”°ë¼ì„œ 처ìŒë¶€í„° 여러번 소프트웨어 다시 ê°œë°œí• ìˆ˜ 있는 ìžê¸ˆì´ 있는게 아니ë¼ë©´ 부채를 만들지 ë§ë¼.
피곤하거나 ì»¨ë””ì…˜ì´ ì¢‹ì§€ ì•Šì„ë•Œ 코딩하지 ë§ë¼
개발ìžë“¤ì´ í”¼ê³¤í• ë• í‰ì†Œë³´ë‹¤ 2-5ë°° ë” ë§Žì€ ë²„ê·¸ì™€ 실수를 만들어낸다. ë”°ë¼ì„œ ê³¼ì—…ì€ ë§¤ìš° 나ì˜ë‹¤. ê·¸ë ‡ê¸° ë•Œë¬¸ì— í•˜ë£¨ì˜ ì—…ë¬´ì‹œê°„ì„ ì•½ 6시간으로 ê³ ë ¤í•˜ëŠ” êµê°€ê°€ ì ì ë” ë§Žì•„ì§€ê³ ìžˆìœ¼ë©°, ì¼ë¶€ êµê°€ì—서는 ì´ë¯¸ ì‹¤ì²œí•˜ê³ ìžˆë‹¤. ì •ì‹ ì ì¸ ì¼ì€ 육체ì ì¸ ì¼ì„ 다루는 것과 같지 않다.
ëª¨ë“ ê±¸ í•œêº¼ë²ˆì— ìž‘ì„±í•˜ìž ë§ë¼ – 반복ì 으로 개발하ë¼
코드를 작성하기 ì „ì— ìš°ì„ ì—¬ëŸ¬ë¶„ì˜ ê³ ê°ê³¼ í´ë¼ì´ì–¸íŠ¸ê°€ ì •ë§ë¡œ 필요로 하는걸 분ì„í•˜ê³ ì˜ˆì¸¡í•˜ê³ , ì§§ì€ ê¸°ê°„ë™ì•ˆ ê°œë°œí• ìˆ˜ 있는 MVF(Most Valuable Features)를 ì¶”ë ¤ë‚´ë¼. 품질 ì—…ë°ì´íŠ¸ë¥¼ ë°°í¬í•˜ê¸° 위해 ì´ëŸ¬í•œ ë°˜ë³µì„ ì‚¬ìš©í•˜ë„ë¡ í•˜ê³ ë¬´ë¦¬í•œ 요구사í•ê³¼ 품질 í¬ìƒì— 시간과 ìžì›ì„ ë‚비하지ë§ë¼.
ìžë™í™” VS 수ë™
ìžë™í™”는 장기ì 으로 100% 성공ì´ë‹¤. ë”°ë¼ì„œ 지금 당장 무언가를 ìžë™í™” í• ìˆ˜ ìžˆëŠ”ê²ƒì´ ìžˆë‹¤ë©´ 바로 하ë„ë¡ í•˜ë¼. “5 분 ë°–ì— ê±¸ë¦¬ì§€ 않는ë°, 왜 ìžë™í™” 해야해?“ë¼ê³ ìƒê°í• ìˆ˜ë„ ìžˆë‹¤. 하지만 í•œ 번 계산해보ìž. 예를 들어 5ëª…ì˜ ê°œë°œìžë¡œ ì´ë£¨ì–´ì§„ íŒ€ì˜ ì¼ìƒì ì¸ ìž‘ì—…ì„ ë“¤ì–´ë³´ìž. 5분 * 5명 * 21ì¼ * 12개월 = 6,300분 = 105시간 = 13.125 ì¼ ~ 5,250$. ì§ì›ì´ 40,000ëª…ì¼ ê²½ìš°ì—” ë¹„ìš©ì´ ì–¼ë§ˆë‚˜ 커질까?
나가서 취미를 ê°–ìž
ì¼ì˜ 차별화는 ì •ì‹ ëŠ¥ë ¥ì„ í–¥ìƒì‹œí‚¤ë©° 새ë¡ê³ ì‹ ì„ í•œ ì•„ì´ë””어를 ì œê³µí•œë‹¤. ë”°ë¼ì„œ ìž ì‹œ ì‰¬ê³ ì‹ ì„ í•œ 공기를 마시거나 친구들과 ì´ì•¼ê¸°ë¥¼ 하거나 기타를 ì—°ì£¼í•˜ëŠ”ë“±ì˜ ì·¨ë¯¸ë¥¼ ê°€ì ¸ë¼.
ì—¬ìœ ì‹œê°„ì— ìƒˆë¡œìš´ê±¸ 배워ë¼
í•™ìŠµì„ ì¤‘ë‹¨í•˜ë©´ 퇴화하기 시작한다.
ì¢‹ì€ ì½”ë“œ ìž‘ì„±ì— ëŒ€í•œ ì•„ì´ë””어와 ê´€í–‰ì— ëŒ€í•œ ì˜ê²¬ì„ ê³µìœ í•´ì¤€ë‹¤ë©´ 매우 ê°ì‚¬í•˜ê² 다
13 Simple Rules for Good Coding (from my 15 years of experience)를 번ì—í•œ 글입니다.
최근 답글