분류 전체보기 366

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에서 제공..

[Clean Code] Chapter 03. 함수

Clean Code 클린 코드 - 로버트 C. 마틴 저 를 읽고, clean code 해설 강의를 통해 보충 이해한 내용을 정리한 글입니다. 현업에서 어떤 code를 refactoring 해야하는 경우가 있었다. 그 때 1. 함수 인자가 8개가 넘어가고, 2. 한 파일에 모든 함수가 모여있고 3. 한 함수에 기능과 추상화 수준이 섞여있어서 한 함수당 코드가 백 몇 줄이 넘어가는 경우도 많았다. 그 때 동료분께서 Clean Code 책을 읽어보는 것을 추천해주셨는데, 그 당시에는 이 많은 내용 중에 어떤 부분에 중점을 두어서 읽고 적용해보는 것이 좋을지 막막한 느낌이 들었다면, 그 일을 다 마치고 시간이 조금 흐른 지금 이 책을 다시 읽어보니 가장 많은 도움이 된 부분이 이 chapter인 것 같다. 1...

[Network] Socket Programming

한양대학교 - 컴퓨터네트워크 수업을 듣고 정리한 내용입니다. 1. Socket이란 client process와 server process간의 통신이 application program이라면 개발자나 사용자 입장에선 OS내부를 건들이는건 아니다. 그냥 OS에서 제공하는 API를 사용할 뿐! 이처럼 process와 process간 통신에서 사용하는 API를 socket이라고 한다. 그리고 이 API는 OS에서 제공해주는 것이기 때문에 제공해주는 것들 '만' 사용할 수 있다. 2. Socket Type (protocol) 다른 관점에서 생각해보면, OS에는 application layer 아래의 layer들, 즉 transport layer부터 쭉 구현되어 있다. application layer 에서는 이 t..