분류 전체보기 368

[Clean code] Chapter 12. Emergence (창발적 설계로 깔끔한 코드 구현하기)

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 창발성이란 이 책에서 창발성이란 단어를 처음 접했다. 위키를 찾아보면 창발(創發)또는 떠오름 현상은 하위 계층(구성 요소)에는 없는 특성이나 행동이 상위 계층(전체 구조)에서 자발적으로 돌연히 출현하는 현상이다. 이라고 적혀있다. 즉, 작은 요소들의 상호작용의 반복이 전체 구조에 영향을 미치는 점을 창발성이라고 한다. 이번 챕터에서는 개발에서도 단순한 4가지 규칙을 반복하다 보면 Clean code, 우수한 설계가 나오게 된다고 하며 4가지 규칙을 소개한다. 1. 모든 테스트를 실행하라. 테스트의 중요성은 몇 번 반복해서 나왔다. [Clean code] Chapter..

[Kubernetes] 쿠버네티스 Intro. 필요성, 구성, 동작 방식

대세는 쿠버네티스 강의와 Kubernetes와 Docker로 한 번에 끝내는 컨테이너 기반 MSA를 참고하여 공부한 바를 정리하였습니다. 1. 쿠버네티스 공부를 시작하는 이유 내가 해온 일 들 중 서비스 운영에 대해 고민했던 시기들을 그려본 것이다. Docker를 이용한 서비스 배포 과정에 CI/CD와 service alert 기능을 추가한 이후에도, 여러 서버에 container를 효과적으로 모니터링하고 관리하는데 어려움이 있었다. 예를 들면, 서버 health check는 정상이지만 그 안에 container가 지속적으로 down되는 문제가 발생했을 때 이를 알아차리기란 쉽지 않다. 그리고 많은 연산에 리소스가 들어가는 서비스의 경우 리소스를 효율적으로 관리하고 분배하도록 인프라를 직접 관리하는 것도..

Dev/DevOps, Infra 2022.03.04

Career 방향성에 대한 생각

을 읽으면서 머리가 많이 복잡했다. 아직까지도 시스템이라는건 너무 광범위하게만 느껴져서 온보딩 프로젝트에서 배운 3 Layer Architecture와 Dependency Injection, 머신러닝 코드를 리펙토링 할 때 머리싸매며 고민한 class의 적절한 사용, 디자인 패턴 아직도 누가 객체 지향 프로그래밍이 뭐냐고 물어보면 어버버 할 것 같은 그 객체 지향 확장성, 설계, ... 더 나아가선 MSA, 애자일, 문서화까지.. 실무에서 경험하긴 했지만 아직 내 안에서는 정리되지 않은 채 파편화되어 있는 개념과 경험들이 떠올랐기 때문이다. 그러면서 동시에 앞으로 추구하고 싶은 커리어 방향성을 알 것 같았다. 학생 때는 할 줄 아는 기술 스택들이 많은게 간지인 줄 알고, 유지보수나 확장성 등은 고려하지도..

Diary/Y2022 2022.03.02

[Clean code] Chapter 11. System

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 이번 장을 읽으면서 머리가 많이 복잡했다. 아직까지도 시스템이라는건 너무 광범위하게만 느껴져서 온보딩 프로젝트에서 배운 3 Layer Architecture와 Dependency Injection, 머신러닝 코드를 리펙토링 할 때 머리싸매며 고민한 class의 적절한 사용, 디자인 패턴 아직도 누가 객체 지향 프로그래밍이 뭐냐고 물어보면 어버버 할 것 같은 그 객체 지향 확장성, 설계, ... 더 나아가선 MSA, 애자일까지.. 실무에서 경험하긴 했지만 아직 내 안에서는 정리되지 않은 채 파편화되어 있는 개념과 경험들이 떠올랐기 때문이다. 그러면서 동시에 앞으로 추구..

[Clean code] Chapter 09. Unit test

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 테스트 코드를 추가하는 것을 넘어서 제대로 된 테스트 케이스를 작성해야 한다. 1. 테스트 코드의 중요성 테스트 코드는 실수를 바로 잡아준다. 코드에 유연성, 유지보수성, 재사용성을 제공하는 버팀목이 단위 테스트이다. 테스트 케이스가 없다면 모든 변경이 잠정적인 버그인 반면 테스트 케이스가 있으면 코드 변경이 두렵지 않다. 그래서 테스트 커버리지가 높을 수록 버그에 대한 공포가 줄어든다. 강의에서 추천 해 준 책 'Effective Unit Testing - 라쎄 코스켈라' 에서 말하는 테스트의 중요성에는 테스트는 실사용에 적합한 설계를 끌어내준다. 테스트를 작성해서..

[Dev Culture] 내가 경험하고 배운 Project Post-mortem 문화

오늘 동료 개발자 분께서 인프랩 기술 블로그 - 을 공유해주시면서 사내 Project post-mortem 문화를 좀 더 체계적으로 할 수 있도록 개선도 하셨다. 올해 '2022년에는 함께 일하기 즐거운 회사, 팀이 되기 위해 pain point에 좀 더 관심을 가지고 좀 더 팀 문화 개선에 기여하는 사람이고 싶다.'고 다짐했는데, 아직까진 매번 도움받고, 배우고, 감동받는 단계인가보다. 우리 회사에는 post-mortem문화가 있다. 입사 한 지 별로 되지 않았을 때 우리 서비스에 어떤 버그가 발생했는데, 모든 개발자가 모여 다같이 부검해보고 action item을 도출해보는 시간을 가졌다. 이 경험을 통해서 처음 post-mortem(부검)와 그 문화에 대해서 알게되었다. post-mortem 문화를..

Diary/Y2022 2022.02.18

[Clean code] Chapter 08. 경계

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. 여기서 말하는 경계라는 것은 우리 코드와 외부 코드의 구분이다. 오픈소스, 라이브러리를 사용하지 않는 프로젝트는 없다. 또한 개발을 하다 보면 시스템에 들어가는 SW를 직접 개발 하기보다 외부 코드를 우리 코드에 깔끔하게 통합해야 하는 일이 생긴다. 또한 외부 코드 사용시 해당 코드의 인터페이스 제공자와 사용자는 이런 경계에 있는 사람들이다. 인터페이스 제공자는 자신의 코드의 적용성을 최대한 넓히고자 하는 반면 사용자는 자신의 요구에 집중하는 인터페이스를 원한다. 이런 입장 차이가 시스템 경계에서 문제를 야기시킬 수 있다. 그래서 이 때 우리 코드와 외부 코드의 경계..

[Network] Transport Layer - TCP: Connection-oriented transport

한양대학교 - 컴퓨터네트워크 수업을 듣고 정리한 내용입니다. 1. TCP Segment Structure TCP Segment Structure는 Header와 data 로 구분되고 header에 있는 각 필드의 의미를 아는 것이 중요하다. 몇 가지는 앞서 Reliable Data Transfer을 공부할 때 나온 개념인데 이렇게 header에 담겨져가는 것을 보니 좀 더 이해에 도움이 된다. 1) sequence number, ACK sequence number is byte stream "number" of first byte in segment's data. ACKs(TCP uses cumulative ACK) is sequence number of next byte expectred from ot..

[Clean Code] Chapter 04. 주석, Chapter 05. 포맷팅

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 제가 이해한 바를 정리한 글입니다. Chapter 04. 주석 잘 달린 주석은 그 어떤 정보보다 유용하다. 반면 경솔하고 근거없는 주석, 오래되고 조잡한 주석은 코드를 이해하기 어렵고, 거짓과 잘못된 정보를 전달한다. 그래서 '(그럴 거면) 주석을 최대한 쓰지 말자' 라는 말이 왜 나왔는지 알 것 같다. 작년 말, 새로운 서비스를 구현하면서 한 번에 30개가 넘는 코드 리뷰를 받곤 했다. 그 중에 1/3은 다름아닌 '주석'에 관련된 것이었다. 이전까지는 주석에 대해 크게 생각하지 않고 TODO 정도만 남겼었었는데 이에 대한 코드리뷰를 받은 후 그에 대해서 토론하고, 수정해보니 크게 배운 것이 있다. 주..

[Network] Transport Layer - Reliable Data Transfer(신뢰성 있는 데이터 전송; RDT)의 통신 원리, Pipelined protocols

한양대학교 - 컴퓨터네트워크 수업을 듣고 정리한 내용입니다. 1. Reliable Data Transfer란 Reliable Data Transfer(신뢰성 있는 데이터 전송; RDT)이란 application layer에서 transport layer로 전달 된 데이터가 유실 없이 상대 application layer로 전달하는 것. 하지만 unreliable 한 상황은 언제든 발생할 수 있다. What can happen over unreliable channel? 1. Message error 2. Message loss unreliable한 상황에는 이 2가지가 있다. 다시말해 이 두가지 사항만 잘 handling하면, reliable한 channel을 만들 수 있다는 것! 그래서 TCP에서 제공..