본문 바로가기

<타냐 라일리> 개발자를 넘어 기술 리더로 가는 길: 성공적인 프로젝트 실행력 ✍🏻 밑줄 그으며 책읽기대규모 프로젝트 진행일반적으로 프로젝트가 어려운 이유는 기술의 경계를 넓혀야 하기 때문이 아니다. 모호한 업무 방향, 복잡한 인간관계, 예측 불가의 레거시 시스템을 다루기 때문이다. 5.1 프로젝트 진행 프로세스스태프 엔지니어는 프로젝트가 공식적으로 시작하기 전에 업무를 시작한다. 프로젝트 시작 전에 압도적으로 느껴지는 일들을 미리 살펴보아야 한다. 5.2.1 새로운 프로젝트의 압박감을 극복하는 방법기존 프로젝트에 새로운 인력으로 투입된다면 투입 전에 고려해야하는 부분이 많다. 대규모 프로젝트를 시작할 때, 프로젝트에 압도당하는 것은 정상적인 일이다. 모든 것을 탐색할 수 있는 지도를 머릿속에 제대로 구상하기 위해 많은 시간과 에너지가 필요하다. 심지어 초기에는 프로젝트를 감당하기..
<타냐 라일리> 개발자를 넘어 기술 리더로 가는 길: 빅 피처 관점의 사고력 ✍🏻 밑줄 그으며 책읽기 스태프 엔지니어의 역할 빅피처 관점: 가능한 것들을 이해하고, 좋은 판단력을 지니는 것 성공적인 프로젝트 실행력: 내놓은 해결책이 실제로 문제를 해결할 수 있어야한다. 롤 모델 역할: 공유하는 의견이 코드와 아키텍처를 실제로 더 좋게 만들어야 한다. 제안한 의견이 옳아야하기 때문이다. 기술적 지식은 모든 스태프 엔지니어의 기본 소양이기 때문에, 해당 역량을 키우기 위해 지속적으로 노력해야 한다. 필요한 리더십 역할 커뮤니케이션 및 리더십 복잡한 문제 탐색하기 업무상 관점 제시하기 멘토링, 후원, 위임하기 다른 사람들이 관심을 갖도록 문제 구성하기 리더가 아니어도 리더처럼 행동하기 빅 피처 관점의 사고력 왜 스태프 엔지니어인가? 시니어 단계에서 꾸준히 자기 계발을 지속하면 '기술..
[Spring] 유틸리티 클래스에 빈 생성자를 만들어야하는 이유 public final class AmericanoUtils { public static boolean isEmpty(String source) { return source == null || source.length() == 0; } } 위와 같은 유틸리티 클래스를 만들면, 소나큐브에서 "add a private constructor to hide the implicit public one" 워닝이 뜬다. 유틸리티 클래스에는 기본 생성자가 만들어져있어야하기 때문이다. 유틸리티 클래스에 왜 기본 생성자를 만들어야할까? 컴파일러는 생성자 코드가 없으면, 자동으로 기본 생성자를 생성한다. new AmericanoUtils(); 이 경우, 예상치 못한 방식대로 코드가 구현될 수 있다. 그래서 소나큐브는 기본..
개발자의 눈으로 이모지 바라보기 프로그램은 이모지를 어떻게 알아볼까? '유니코드'는 전 세계의 모든 문자를 여러 프로그램에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다. '이모지'는 유니코드로 표현한다. '이모지' 유니코드가 텍스트에 포함된 경우, 각 프로그램은 '이모지' 유니코드를 자신들이 사전에 정의한 '이모지 이미지'로 변경한다. OS / 프로그램 별로 이모지 그림체가 다른 이유는 이러한 배경 때문이다. 이모지 유니코드는 유니코드 사이트에서 확인할 수 있다. (모든 이모지 유니코드 확인하기 👉🏻 https://www.unicode.org/Public/emoji/15.0/) 이모지가 점점 다양해지고 있다! 이모지의 종류가 점점 다양해지고 있다. 그리고 다양성을 존중하는 문화가 자리잡으면서, 이모지를 다양한 피부톤과 성..
kodekloud: devops 온라인 실습 툴 유데미 강의에 실습 링크가 있어서 사용해봤다. 터미널에서 쿠버네티스 명령어를 실행하고, 퀴즈에 답하는 방식으로 해봤는데, 재밌다. 예전에 AWS / Google Cloud hands-on labs는 실습 시간동안 서버를 부여받고, 직접 클라우드 시스템을 설정해보는 방법이었다. 그런데 이건 웹 콘솔이 진짜 콘솔인 것처럼 느껴지게 만든, 가상의 학습 환경이다. AWS / Google Cloud hands-on labs + leetcode가 섞인 실습도구인 것 같다.
개발자를 위한 최소한의 모니터링 지식: spring actuator + prometheus + grafana prometheus이란? prometheus은 시스템 모니터링 시스템이다. prometheus은 시스템의 매트릭을 주기적으로 수집한다. 그래서 시스템에 문제가 발생했을 때, 이를 인지하고 디버깅할 수 있는 기준이 되는 지표를 제공해준다. prometheus를 사용하는 기본 아키텍처는 다음과 같다. spring actuator이란? spring actuator은 실행중인 애플리케이션의 내부 매트릭을 api으로 제공하는 역할을 담당한다. prometheus에서 spring의 매트릭을 수집할 수 있게 하려면, 두 개의 의존성을 추가해야한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implement..
12월의 추천 서적: 마이크로서비스 아키텍처 구축 가이드 실무에서 고민했던 것들이 축약되어 쓰여있는 책이다. MSA 뿐만 아니라, 외부 시스템을 연동할 때 고민해야 하는 요소들이 포함되어 있다. 이 책을 통해 실무에서 사용했던 패턴들이 무엇이었는지 제대로 인지할 수 있어서 좋았다. MSA 패턴을 경험해본 적이 없거나, 초기 적용 단계라면 이 책이 많이 유용할 것 같다. 애플리케이션 패턴의 장/단점들이 꼼꼼히 작성되어 있고, 예제 사례가 실무와 똑같은 경우도 있다. (낯익은 코드가 나타나서 흠칫했다.) MSA 패턴 혹은 외부 시스템 연동이 많은 시스템을 운영하고 있는 개발자라면, 이미 아는 내용들일 것이다. 그런데 가볍게 리마인드 하면서 훑어보기 좋을 것 같다. (후루룩 읽으면 2주 이내에 읽을 수 있다.) 나의 경우에는 책의 이론/예제와 내가 경험했던 실무 사..
<김용욱> 마이크로서비스 아키텍처 구축 가이드: 설계원칙 서비스의 의존관계 코드 레벨의 참조 코드 레벨의 참조는 다른 서비스의 API나 이벤트 정의를 따르는 것이다. 참조하는 서비스의 스펙이 변경되면, 자신도 같이 변경되어야 한다. 런타임 레벨 참조 실행 중에 다른 서비스의 API나 이벤트를 호출하는 것이다 런타임 레벨에서 다른 서비스의 기능을 호출한다면, 해당 서비스에 장애가 발생했을 때 영향을 받을 수 있다. 설계원칙 (1) 참조 방향을 역전하자! 코드 레벨의 참조와 런타임 레벨의 참조는 보통 동일한 방향을 가진다. 하지만 코드 레벨의 참조를 역전시키는 경우, 둘의 방향이 반대가 된다. 예제로 살펴본 참조의 역전: Callback API callback API가 코드 레벨 참조와 런타임 레벨 참조의 방향이 바뀌는 대표적인 사례이다. Payment serve..