본문 바로가기

개발 방법론10

[Refactoring] 변수 추출하기 1. 개요 - 지역변수를 활용해 표현식을 쪼개서 관리하기 쉽게 만든다 - 표현식에 이름을 붙이는 것 - 함수 추출하기와 상당히 유사하다. - 반대로 작업하면 변수 인라인하기이다. 2. 절차 - 불변 변수를 하나 선언하고 이름을 붙일 표현식의 복제본을 대입한다. - 원본 표현식을 새로 만든 변수로 교체한다. - 테스트 - 표현식을 여러 곳에서 사용한다면 변수로 바꿔준다. - 주기적으로 테스트해준다. 3. 예시 - 주문수량 * 개별가격 부분을 추출해보자 - 다음은 수량 할인 / 배송비 부분을 추출해본다. - 주석은 지워도 된다. 리턴 뒤 표현식 자체가 주석처럼 이해하기 쉽게 정리되었기 때문이다. 4. 예시 2 - OOP에서 - 변수로 추출할 수도 있지만, 메서드로 추출할 수도 있다. - 덩치가 큰 클래스에서.. 2023. 5. 3.
[Refactoring] 함수 인라인하기 1. 함수 인라인하기 : - 함수의 본문이 제목보다 읽기 명확한 경우에는 함수제목이 거슬릴 뿐이다. 함수를 인라인으러 넣어버리는 작업을 행하기도 한다. - 이전 단계에서 함수 추출하기의 반대 행위이며, 함수의 목적과 행위의 흐름을 파악하기 좋은 방향으로 추출 혹은 인라인을 진행한다. - 좋은 코드는 컴퓨터가 읽기 좋은 코드가 아니고 사람이 읽기 좋은 코드이다. 그래서 이짓거리(리팩터링)를 하는거다. - 간접호출을 너무 과하게 쓰는 코드도 인라인 대상이다. 위임관계가 복잡하게 얽혀 있으면 인라인 해버려서 차라리 한눈에 파악이라도 하는 방향이 낫다. 2. 함수 인라인 절차 1) 다형 메서드인지 확인한다 : 다형메서드란 동일한 이름을 가지지만 호출되는 객체의 유형에 따라 다른행동을 수행하는 메서드이다. - 서.. 2023. 5. 1.
[Refactoring] 함수 추출하기 1. 함수 추출하기 - 목적과 구현을 분리하는 방식을 기준으로 함수를 추출하는 방법 - 함수의 호출이 많아져 성능이 저하될까 걱정하는 부분에 대해서는 일반지침을 따르자. - 성능최적화의 일반지침 : "최적화를 할 때는 두 규칙을 따른다. 첫 번째, 하지마라. 두 번째, 아직 하지마라." - M. A. 잭슨 - 이름짓기 : 함수 추출의 가장 핵심적인 부분이다. 목적과 하는 일에 대해서 가장 직관적인 이름을 지어라. - 함수의 이름은 나를 당장이라도 때릴 수 있는 사람이 내 코드를 유지/보수 해야된다고 생각할 정도로 확실하고 명확하게 짓는다. 2. 함수 추출하기의 절차 1) 함수를 새로 만들고 목적을 잘 드러내는 이름을 붙인다. ('무엇을' 하는지가 드러나야 한다. '어떻게' 가 아니다. 추상화의 영역이다... 2023. 5. 1.
[Refactoring] 애자일과 TDD 애자일 방법론과 TDD의 관계 애자일 방법론은 소프트웨어 개발 방식 중 하나로, 빠르게 변화하는 고객의 요구사항에 유연하게 대응할 수 있도록 개발하는 것을 목표로 합니다. 애자일 방법론의 핵심 원칙 중 하나는 '지속적인 테스트와 통합'인데요, 이 원칙은 테스트 주도 개발(TDD)과 밀접한 관련이 있습니다. TDD는 개발자가 요구 사항을 충족하는 코드를 작성하기 전에 테스트 케이스를 먼저 작성하는 방법론입니다. 이렇게 함으로써 개발자는 코드의 정확성과 안정성을 보장하고, 리팩토링 과정에서 발생할 수 있는 오류를 최소화할 수 있습니다. 애자일 방법론과 TDD는 서로 상호 보완적인 관계를 가지고 있습니다. 소프트웨어 설계의 중요성 소프트웨어 설계는 개발 과정에서 굉장히 중요한 역할을 담당합니다. 소프트웨어 설.. 2023. 4. 24.
[DevOps] 도구와 기술 - 2 1. 컨테이너 기술 - 컨테이너란 ? : 고립된 사용자 공간 사이에 커널이 공유되는 OS 수준의 가상화를 사용하여 항상 동일한 환경을 제공하는 기술이다. * 도커 : 도커(Docker)는 코드, 런타임 환경, 시스템 도구, 라이브러리를 랩핑하는 오픈소스 도구다. - 도커 컨테이너는 실행하는 커널을 공유한다. 따라서 경량 방식으로 바로 실행된다. - 도커 컨테이너는 리눅스 뿐만아니라 윈도우에서도 실행된다. - OS 수준의 가상화로 고려된다. - 각 컨테이너는 호스트 OS상의 사용자 공간에서 격리된 프로세스로 실행된다. (커널) - 각 컨테이너를 위한 별도의 OS가 필요없으므로 컨테이너의 크기가 훨씬 작다. - 각 컨테이너는 커널을 공유하므로 더 많은 자원이 공유 범위에 있다. - 가상 머신은 컨테이너에서 .. 2023. 4. 13.
[DevOps] 도구와 기술 - 도구와 기술은 DevOps 문화에서 중요한 역할을 담당한다. - 그러나 주의가 필요한 유일한 부분은 아니다. - 스킬적인 부분이 많고, 파이프라인과 도구의 장점, 기술스택과 연동성, 프로젝트의 요구사항 등을 잘 고려해서 사용해야 한다. 1. Git (Version Control System) - 모르면 취업 못함 - 코드의 버전을 이용해서 이전 버전까지 추적이 가능하고, 개발자의 협업에서 매우 중요한 역할을 한다. - 많은 개발자가 동시에 작업이 가능하게 해준다. - 소스코드 저장 서버가 있으므로 문제 발생 시 복구가 가능하다. - 비선형 개발을 지원한다. - 호환성이 좋다. 업계 표준이다. - 툴킷 기반 설계이다. - 다양한 병합기법(git branch strategy)을 지원한다. 2. SVN(S.. 2023. 4. 11.
[Jenkins] 설치 및 기본 문법 1. 설치 : 나는 MacOS다. brew install jenkins 2. 실행 : 설치가 다되면 실행한다. brew services start jenkins - 설치 이후 http://localhost:8080 로 접속한다. - 터미널에 적힌 키를 이용하여 첫 접속을 한다. 안적혀있으면 다음 명령어를 터미널에 실행한다. cat /Users/내컴터유저이름/.jenkins/secrets/initialAdminPassword - 나오는 키를 입력하고 접속한다. - 추천하는 플러그인을 설치하고 메인 대시보드를 확인한다. 3. 새로운 작업 생성(Pipeline) - Jenkins 대시보드에서 "새로운 작업"을 선택하고, "Pipeline"을 선택한 후 작업 이름을 지정한다. - 작업 설정 페이지에서 "Pipe.. 2023. 4. 10.
[DevOps] CI(지속적인 통합, Continuous Intergration) 1. 지속적인 통합 메커니즘 - CI는 개발자가 체크인하는 경우 다음 방법 중 하나로 검증하는 소프트웨어 엔지니어링 실천방법이다. 1) Pull Mechanism : 예정된 시간에 자동화된 빌드 작업을 실행한다. 2) Push Mechanism : 변경 사항이 저장소에 저장되는 경우 자동화된 빌드가 실행된다. - 이 단계에서는 소스 코드 저장소에서 이용 가능한 최신 변경사항에 대한 단위 테스트의 실행이 뒤따른다. - 빌드-테스트-통보 : 돌고 도는 파이프라인이 구성된다. 빌드 실행 결과에 기반한 빠른 피드백이 핵심이다. - CI의 필요성 : 개발의 초기단계에서 보완하고 고칠 수 있는 파이프라인 생성, 같은 이슈가 매우 오랜 기간 후에 발생하고 의존성과 복잡성이 증가했을 때 발생한다면, 고치기 어려워진다... 2023. 4. 10.