본문 바로가기

더 나은 엔지니어가 되기 위해

(80)
파이썬 클린 코드 3 - 좋은 코드의 일반적인 특징 이 장에서는 훌륭한 소프트웨어 디자인을 위한 몇 가지 원칙들을 살펴본다. 개인적으로 개발적으로 정리하고 유념해야 할게 많았던 장이라 내용이 조금 길다. 책의 내용을 따라가되, 내가 추가적으로 살을 붙인 것들도 있다. 1. 계약에 의한 디자인 컴포넌트는 기능을 숨겨 캡슐화하고 함수를 사용할 고객에게는 API를 노출한다. API를 디자인할 때는 예상되는 입력과 출력 그리고 부작용을 문서화해야 한다. 코드가 정상 동작하기 위해 기대하는 입력과 호출자가 반환받기를 기대하는 것은 디자인의 하나가 되어야 한다. 여기서 계약이라는 개념이 생긴다. 계약에 의한 디자인이란 양측이 동의하는 계약을 먼저한 다음, 계약을 어겼을 경우 명시적으로 왜 계속할 수 없는지 예외를 발생시키는 것이다. 계약은 주로 사전 조건과 사후 조..
파이썬 클린 코드 2 - 클린 코드와 코딩 가이드라인 클린 코드란 클린 코드란 한 마디로 말해, 쉽게 이해 가능하며 지속적으로 개발하기 용이한 코드를 말한다. 코드는 누구나 짤 수 있다. 하지만 보기 좋고 심플하면서도 핵심 로직을 잘 풀어낸 코드를 짜내는 건 아무나 할 수 없다. 지속해서 성장하는 시스템에 유연하게 코드를 바꿀 수 있도록 설계해야 하고, 올바른 자료구조와 로직으로 하려는 일을 간단하게 드러내야 한다. 무엇보다 코드만 보고도 무엇을 하려는지 이해 가능해야 한다. 클린 코드는 개발자에게 일종의 '선'과 같은 개념이다. 현실적으로 불가능하더라도, 이러한 이상향이 있다는 것을 인지하고 내 코드를 평가할 수 있어야 한다. 적어도 내 코드가 별로인지 괜찮은지는 알아야 한다. 클린 코드는 특히 엔지니어간의 커뮤니케이션과 코드의 유지 관리성을 강조한다. ..
파이썬 클린 코드 1 - 파이썬스러운 코딩을 파이썬 문법 컨셉 들어가며 이 글은 책 파이썬 클린 코드를 읽고 정리한 글이다. 클린 코드는 프로그래밍 언어 구분 없이 일반적으로 존재하는 개념인데, 파이썬에서는 좀 특이한 관습이 있다. '파이썬스럽게(Pythonic)' 라는 것인데, 이 때문에 같은 개념과 논리더라도 다른 프로그래밍 언어와는 클린 코드에 대한 구현이 조금 다르다. 그래서 이 책에서는 두 가지를 말한다. 파이썬스러운 코드와 이를 기반으로 한 클린 코드를 짜는 것. 클린 코드에 대한 여러 서적들이 있지만 이 책을 먼저 잡은 이유도 이 때문이다. 클린 코드의 개념을 잘 알면서, 이를 파이썬스럽게 짤 수 있는 능력, 하다 못해 그럴 수 있는 '감'이라도 잡고 싶었다. 정리하는 글은 책의 목차를 그대로 따라가지 않는다. 위에 설명한 두 가지에 초점을 두어 내 나..
책 리팩토링을 통해 보는 좋은 코드 원칙 회사에서 특정 로직 개발을 맡게 되면서, 요즘 들어 파이썬과 개발에 관심이 많이 생겼다. 좋은 코드란 무엇인지 자꾸 생각하게 되고, 코드 하나하나 짤 때마다 고민, 신중하게 된다. 이런 내게, 사내 다른 동료 분이 개발 관련 서적을 읽어보라고 권해주셨는데, 마틴 파울러의 "리팩토링" 이라는 책이다. 개발 서적에서 유명한 책인데, 최근 개정 2판이 나와 베타 리더로 책을 받으셨다고 한다. 개정되었어도 뭔가 고전 서적답게 표지부터 읽기 싫게 생겼다. 그래도 유명한 책이니 만큼, 또 좋은 코드에 대한 공부를 하고 싶어 퇴근 후 짬짬이 읽게 되었다. 이 포스팅은 이 책을 읽고 내게 필요한 내용만 정리한 글이다. 책에서는 몇 가지 리팩토링 과정을 500페이지의 분량으로 담아내는데, 이 글에서 나는 모든 내용을 정..
쿠버네티스(kubernetes) 기본 개념 정리 조대협님 블로그의 쿠버네티스 시리즈 를 공부하며 정리한 글입니다. 자세한 내용은 생략하고 핵심만 담았습니다. 1. 쿠버네티스란? 컨테이너 운영환경에서, 컨테이너들을 적절하게 매니징하는 솔루션 예를 들어, 서비스 요청이 많아지는 경우 이에 대한 부하를 줄이기 위해 노드 수를 동적으로 늘림. 대표적으로 다음과 같은 역할을 함. 스케쥴링 컨테이너별 자원 최적화 적절한 위치(클러스터 내 노드)에 배포 정상/비정상 상태 체크 및 재기동 컨테이너 리소스 모니터링 컨테이너 동적으로 삭제 관리 이러한 일들을 자동화하게끔 하는 솔루션임. 2. 기본 개념 이해 1) 구조와 오브젝트 클러스터 구조 마스터 / 머신 노드가 존재. 마스터는 하나, 머신은 여러개 쿠버네티스 오브젝트 기본적으로 오브젝트와 컨트롤러로 구성 오브젝트 ..
[스프링 프레임워크 핵심 기술] AOP 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. AOP 란 개념 AOP(Aspect-Oriented Programming) 는 OOP를 보완하는 수단으로, 흩어진 Aspect 를 모듈화 할 수 있는 프로그래밍 기법이다. 즉, 여러 곳에서 쓰이는 공통 기능을 모듈화하고, 쓰이는 곳에 필요할 때 연결함으로써, 유지 보수 혹은 재사용에 용이하도록 프로그래밍 하는 것. 주요 개념 Aspect 여러 곳에서 쓰이는 코드(공통 부분)를 모듈화한 것 Target Aspect 가 적용되는 곳 Advice Aspect 에서 실질적인 기능에 대한 구현체 Joint point Advice 가 Target 에 적용되는 시점 메서드 진입할 때, 생성자 호출할 때, 필드에서 값을 꺼낼 때..
[스프링 프레임워크 핵심 기술] SpEL 인프런에서 백기선님의 스프링 프레임워크 핵심 기술 을 공부하며 개인적으로 정리한 글입니다. SpEL SpEL 은 Spring Expression Language 로, 스프링에서 지원하는 일종의 표현식이다. 1) 예시 예를 들면 아래 같이 사용된다. @Value("#{1 + 1}") int value; 결과적으로 1 + 1 의 결과가 int value 에 담긴다. @Value("#{'hello' + ' world'}") String greeting; String greeting 에는 "hello world" 가 담긴다. 즉, 코드 내에서 #{...} 로 표현되는 부분들은 SpEL 이라고 보면 된다. 2) 문법 사용 문법은 다음과 같다. #{"표현식"} ${"프로퍼티"} 표현식은..
[더 자바] 바이트 코드 조작 인프런에서 백기선님의 더 자바, 코드를 조작하는 다양한 방법을 공부하며 개인적으로 정리한 글입니다. 코드 커버리지 코드 커버리지는 내가 작성한 테스트 코드가 내 코드를 얼마나 커버했는지의 정도를 말한다. 즉, 테스트 코드가 내 코드를 구석구석 잘 테스트 했는지를 알 수 있다. Jacoco 를 이용한 예시 Jacoco 를 통해 코드 커버리지를 측정하는 예시를 살펴보자. 먼저 다음과 같은 간단한 클래스 하나를 만든다. public class Moim { int maxNumOfAttendees; int numOfEnrollment; public boolean isEnrollmentFull() { if (maxNumOfAttendees == 0) return false; if (numOfEnrollment < ..