본문 바로가기

포스트464

브룩스의 법칙(Brooks' Law) 브룩스의 법칙(Brooks' Law)은 프레더릭 브룩스가 자신의 책인 (The Mythical Man-Month)에서 언급한 소프트웨어 개발과 관련된 법칙이다. 지체되는 소프트웨어 개발 프로젝트에 인력을 더하는 것은 개발일정을 더 늦출 뿐이다. - 맨먼스 미신, 페레더릭 브룩스 맨먼스 (Man/Month) 소프트웨어 프로젝트를 진행하면서 '맨먼스(Man/Month)'라는 용어를 자주 사용하게 된다. 맨먼스는 1명의 개발자가 1개월동안 작업할 수 있는 일의 양을 하나의 단위로 추상화시켜 놓은 것이다. 흔히 MM이라고 줄여서 표현한다. 맨먼스 방식은 소프트웨어 프로젝트를 진행하기 위한 인력 리소스를 파악하기위해 주로 사용된다. 1MM은 1명의 개발자가 1개월동안 작업하는 일의 단위다. 2MM은 1명의 개발자.. 2023. 12. 6.
페어 프로그래밍(Pair Programming)이란? 애자일 소프트웨어 개발 방법론 중 하나로 '페어 프로그래밍(Pair Programming)'이라는 것이 있다. 페어 프로그래밍은 두 명의 개발자가 한 컴퓨터를 가지고 프로그램을 설계하고, 알고리즘을 작성, 코드를 작성 밑 테스트를 진행하는 개발방식이다. 동료 프로그래밍, 쌍 프로그래밍 혹은 짝 프로그래밍이라고도 부른다. 두 프로그래머 중 한 명이 '네비게이터(Navigator)' 역할을 수행하여 전략을 제시하고, '드라이버(Driver)'가 실제 코드를 작성하게 된다. 그리고 이 역할은 각자 번갈아가며 수행하게 된다. 이름에서 알 수 있듯이 페어프로그래밍은 운전으로 생각할 수 있다. 자동차를 운전하는 사람을 드라이버라고 말하며, 조수석에 앉아 지도를 보고 방향을 알려주는 사람을 네비게이터라고 할 수 있다.. 2023. 12. 5.
구글이 말하는 좋은 매니저의 조건 (Managers Matter after All) 개발자들이 모인 조직에서는 관리자의 역할과 중요성에 대해 회의적이기 쉽다. 대부분 관리자는 실제 제품의 품질이나 기술에 대한 내용보다는 프로젝트의 진행과 결과물, 보고서 등에만 관심있어 보인다. 구글 역시 개발자 중심의 회사로 매니저의 역할에 대해 회의적이었다. 매니저의 역할이 중요하지 않음을 실험적으로 증명하고자 했는데, 결과는 정반대였다. 개발 조직이 유연하게 흘러갈 수 있는데에 매니저의 역할이 굉장히 크다는 것이다. 구글은 "훌륭한 매니저와 함께하는 팀은 더 행복하고 생산적이다"라는 결론을 내렸다. 그렇다면 훌륭한 매니저의 조건은 뭘까? Abel Avram이 쓴 'Google: Managers Matter after All'에서는 8가지를 들고 있다. They are good coaches (좋은 .. 2023. 12. 4.
[Java] 생성자 패턴 : 점층적 생성자(Telescoping Constroctor), 자바빈즈(Java Beans), 빌더(Builder) 패턴 자바의 생성자 혹은 정적 팩토리 메소드에는 공통적인 제약사항이 있다. 바로 선택할 수 있는 인자가 많을 때 깔끔하게 코드를 작성하기 어렵다는 점이다. 프로그래머들은 전통적으로 이런 상황에 점층적 생성자 패턴(Telescoping constructor pattern)을 즐겨 사용했다. 목차 점층적 생성자 패턴(Telescoping Constructor Pattern) 점층적 생성자 패턴은 생성자의 인자가 점점 많아지는 형태로 코드를 구성하는 방식을 의미한다. 필수 인자만 받는 생성자를 정의하고, 필수 인자에 선택 파라미터를 하나 더 받는 생성자를 생성자, 필수 인자와 선택 인자 두 개를 더 받는 생성자, ... 형태로 모든 선택 인자를 다 받는 생성자까지 만들어나간다. 예제 코드를 보자. (예제는 Effe.. 2023. 11. 17.
[Linux] Patrol Read(PR), Consistency Check(CC) 명령어 정리 리눅스 서버의 디스크 컨트롤러 중에는 Patrol Read라는 기능을 제공하는 경우가 있다. 일반적인 경우에는 Patrol Read가 서버의 성능에 영향을 주지는 않지만 가끔 지나치게 리소스를 잡아먹는 등 자신의 존재감을 드러내는 경우가 있다. Patrol Read가 무엇인지 알아보고 Patrol Read 설정을 변경할 수 있는 명령어를 정리해보자. Patrol Read(PR) Patrol이라는 단어에 '순찰을 돌다'라는 의미가 있다. 따라서 Patrol Read는 마치 순찰을 돌듯이 미리 디스크에 문제가 있을 만한 부분을 미리 발견해 문제를 예방하기 위한 기능이라고 볼 수 있다. Patrol Read는 하드 드라이브의 블럭을 미리 스캔해서 문제가 있을만한 배드블럭(Bad Block)을 예비 영역과 교.. 2023. 11. 10.
[Linux] perf 명령어 사용법 및 예제 - Flame Graph 해석 방법 perf 명령어는 리눅스 커널 프로젝트에서 관리되는 시스템 성능 프로파일링 도구다. perf 명령을 이용해서 특정 프로그램이나 시스템 전체 성능을 분석할 수 있다. perf 명령을 이용해서 성능에 문제를 일으키는 부분이 어디인지를 찾아낼 수 있다. 예를 들어 프로그램의 어떤 함수가 CPU 자원을 많이 소모하고 있는지 알 수 있으며, 코드의 어떤 부분이 메모리 할당을 얼마나 하는지 등을 어셈블리 및 소스코드 레벨로 확인할 수 있다. 커널에서 제공하는 특정 함수가 얼마나 호출되는지도 파악할 수 있다. 목차 perf 설치 perf 명령은 패키지 관리자인 yum을 통해 설치할 수 있다. yum -y install perf 데비안 계열의 리눅스에서는 apt-get을 통해 설치할 수 있다. apt-get insta.. 2023. 11. 8.
[Linux] 빈 RPM 패키지 만드는 방법 리눅스 서버를 운영하다보면 빈 RPM 패키지를 만들어 설치해야할 때가 있다. 특정 소프트웨어를 Makefile로 직접 빌드해 설치하는 경우 서버에는 소프트웨어가 설치되지만 rpmdb에는 패키지 정보가 추가되지 않는다. 소프트웨어를 사용할 수는 있지만 rpm을 통해 설치하지 않아서 의존성 체크는 계속 실패하게 된다. 이 경우 빈 rpm 패키지를 만들어 설치하는 식으로 rpm의 의존성 체크를 우회할 수 있다. 예를 들어 python 패키지는 특정 버전 이후부터 python2와 python3로 패키지 이름이 변경되었다. 오래된 버전의 운영체제에서 동작하던 소프트웨어 중에는 python 이라는 이름의 패키지에 의존성이 걸려있는 경우가 있다. python2, python3가 설치되어 있고 alias도 되어 있어 .. 2023. 8. 10.
블룸필터(Bloom Filter) 개념 소개와 예제 이번 포스트에서는 ‘블룸필터(BloomFilter)’의 개념과 특징을 알아보고 사용 예제를 통해 언제 어떻게 활용할 수 있는지 알아보겠다. 목차 블룸필터(Bloom Filter) HBase, Redis 같은 고성능이 필요한 소프트웨어는 블룸필터(Bloom Filter)라는 자료구조를 사용한다. 블룸필터를 사용하면 불필요한 리소스 소모를 줄일 수 있어 소프트웨어의 전반적인 성능을 끌어 올릴 수 있다. 블룸필터는 집합 내에 특정 원소가 존재하는지를 확인할 수 있는 확률적인 자료구조다. 디스크 입출력이나 네트워크 통신 혹은 스핀락 같은 성능 저하를 유발시킬 수 있는 작업들 앞에 블룸필터를 추가해서 하지 않아도 되는 작업을 건너 뛸 수 있게 해주는 장치다. 블룸필터의 원리 블룸필터의 동작 방식을 그림을 통해 확.. 2023. 6. 1.
[Java] NavigableSet 사용법 및 예제 Java의 NavigableSet 인터페이스는 SortedSet을 상속하는 인터페이스다. Set 인터페이스를 상속한 SortedSet 인터페이스를 상속하고 있기 때문에 NavigableSet 인터페이스를 구현하기 위해서는 Set, SortedSet의 메소드들도 구현해야한다. NavigableSet 이름에서 알 수 있듯이 NavigableSet은 저장되는 엘리먼트들에 Navigation 기능을 더한다. NavigableSet의 JavaDocs를 보면 다음과 같은 설명이 있다. A SortedSet extended with navigation methods reporting closest matches for given search targets. NavigableSet은 SortedSet을 상속하기 때문에.. 2023. 5. 25.