전체 글
Happy Hacking!
-
공부한 이유 Java나 Kotlin으로 코딩할 때는 메서드 오버라이딩을 자주 한다. 특히 많이 쓰는 경우는 1. 주 / 부생성자를 생성할 때 2. 테스트하기 쉽도록 인자를 쪼갤 때다 테스트하기 쉽도록 쪼갠다는 건 무슨 의미냐면, 예를 들어 다음과 같은 코드가 있을 수 있을 수 있다 void go(RandomNumberGenerator randomNumberGenerator) { if (randomNumberGenerator.get() > 5) { this.state++; } } 위와 같은 코드에서 테스트 하고싶은 관심사는 RandomNumberGenerator.get()이 아니라, 5 이상일 때 state++하는 로직이다. 위와 같은 코드에서 인터페이스를 뽑아서 해결할 수도 있지만 나는 다음과 같은 식으..
Python에서 메서드 오버로딩하기공부한 이유 Java나 Kotlin으로 코딩할 때는 메서드 오버라이딩을 자주 한다. 특히 많이 쓰는 경우는 1. 주 / 부생성자를 생성할 때 2. 테스트하기 쉽도록 인자를 쪼갤 때다 테스트하기 쉽도록 쪼갠다는 건 무슨 의미냐면, 예를 들어 다음과 같은 코드가 있을 수 있을 수 있다 void go(RandomNumberGenerator randomNumberGenerator) { if (randomNumberGenerator.get() > 5) { this.state++; } } 위와 같은 코드에서 테스트 하고싶은 관심사는 RandomNumberGenerator.get()이 아니라, 5 이상일 때 state++하는 로직이다. 위와 같은 코드에서 인터페이스를 뽑아서 해결할 수도 있지만 나는 다음과 같은 식으..
2023.12.30 -
Engineering Ladders? SW 엔지니어링 매니저들이 직속 부하와 함께 포지션별 기대치에 관한 커리어 사다리에서 다음 단계를 위해 이야기해볼 수 있도록 도와주는 프레임워크다. https://zenyr.github.io/engineeringladders/ko/ 소개 A framework for Engineering Managers zenyr.github.io 위 블로그에서 참고해서 직접 해볼 수도 있다. 최근 지인이 본인이 그리고 싶은 커리어를 위해 자신이 어떤 역량을 키워야 할지 도움을 준다고 해서 해보았다. 여기서 역량 기준은 최근에 합격한 인턴 회사를 기준으로 내가 낼 수 있는 퍼포먼스를 (나름) 객관적으로 체크했다. 그러다 보니 전반적으로 점수가 다 낮게 나왔는데 이게 자신감 / 자존감이..
내 Engineering LaddersEngineering Ladders? SW 엔지니어링 매니저들이 직속 부하와 함께 포지션별 기대치에 관한 커리어 사다리에서 다음 단계를 위해 이야기해볼 수 있도록 도와주는 프레임워크다. https://zenyr.github.io/engineeringladders/ko/ 소개 A framework for Engineering Managers zenyr.github.io 위 블로그에서 참고해서 직접 해볼 수도 있다. 최근 지인이 본인이 그리고 싶은 커리어를 위해 자신이 어떤 역량을 키워야 할지 도움을 준다고 해서 해보았다. 여기서 역량 기준은 최근에 합격한 인턴 회사를 기준으로 내가 낼 수 있는 퍼포먼스를 (나름) 객관적으로 체크했다. 그러다 보니 전반적으로 점수가 다 낮게 나왔는데 이게 자신감 / 자존감이..
2023.12.22 -
읽은 이유 최근 혼자 공부하는 운영체제 + 컴퓨터 구조라는 책을 읽었다. 책 내용은 OS 전반적인 내용을 쉽게 잘 설명해 주었지만 추상적이라 그걸 알아서 어디에 써먹을 수 있을까? 하는 의문이 들었다. 또, 백엔드 개발자에게 OS가 중요하다는 말이 자주 나와서 왜 알아야 할까 궁금하여 읽었다. 들어가기 전에 이 책에서는 백엔드 개발자가 OS를 공부해야 하는 이유에 대해서 우선 말한다. 우리가 생각했을 때 OS는 계층화가 잘 이루어져 있어서 좌측과 같이 예쁜 모델로 생각하기 쉬워 애플리케이션 레벨만 혹은 바로 그 아래 레벨만 잘 알면 되겠지 생각하기 쉽지만, 사실은 계층들 끼리 복잡하게 섞여 있어 저 밑바닥까지 이해하지 못하면 해결할 수 있는 문제를 만날 수 있다. 그 문제를 만났을 때 대처할 수 있도록 ..
실습과 그림으로 배우는 리눅스 구조 - 알게된 것들과 느낀 점읽은 이유 최근 혼자 공부하는 운영체제 + 컴퓨터 구조라는 책을 읽었다. 책 내용은 OS 전반적인 내용을 쉽게 잘 설명해 주었지만 추상적이라 그걸 알아서 어디에 써먹을 수 있을까? 하는 의문이 들었다. 또, 백엔드 개발자에게 OS가 중요하다는 말이 자주 나와서 왜 알아야 할까 궁금하여 읽었다. 들어가기 전에 이 책에서는 백엔드 개발자가 OS를 공부해야 하는 이유에 대해서 우선 말한다. 우리가 생각했을 때 OS는 계층화가 잘 이루어져 있어서 좌측과 같이 예쁜 모델로 생각하기 쉬워 애플리케이션 레벨만 혹은 바로 그 아래 레벨만 잘 알면 되겠지 생각하기 쉽지만, 사실은 계층들 끼리 복잡하게 섞여 있어 저 밑바닥까지 이해하지 못하면 해결할 수 있는 문제를 만날 수 있다. 그 문제를 만났을 때 대처할 수 있도록 ..
2023.12.15 -
궁금증이 생긴 이유 docker 위에 db를 띄우고 spring 애플리케이션을 실행시킨 상황에 lsof 명령어를 수행했다. 그런데 이때 예상하기론 mysql ps 정보만 떠야하는데, 그것 외에 여럿 많은 정보를 볼 수 있었다. mysql과 java의 연결, 그리고 개수가 10 * 2인 걸 봐서 대충 connection pool이겠거니 싶었다. (Hikari CP의 default connection 수는 10개. 클라이언트 -> 서버 / 서버 -> 클라이언트 스레드가 각 존재해야 하므로 * 2) 그런데 localhost 다음에 보이는 포트 번호는 뭐지? 하는 궁금증이 들었다. 나는 분명 3306 포트로 mysql을 띄웠는데 왜 처음보는 포트들이 등록되어 있고, 또한 왜 각자 다른 포트들이 등록되어 있나 궁..
FD는 뭐고 TCP/IP 소켓은 뭐지?궁금증이 생긴 이유 docker 위에 db를 띄우고 spring 애플리케이션을 실행시킨 상황에 lsof 명령어를 수행했다. 그런데 이때 예상하기론 mysql ps 정보만 떠야하는데, 그것 외에 여럿 많은 정보를 볼 수 있었다. mysql과 java의 연결, 그리고 개수가 10 * 2인 걸 봐서 대충 connection pool이겠거니 싶었다. (Hikari CP의 default connection 수는 10개. 클라이언트 -> 서버 / 서버 -> 클라이언트 스레드가 각 존재해야 하므로 * 2) 그런데 localhost 다음에 보이는 포트 번호는 뭐지? 하는 궁금증이 들었다. 나는 분명 3306 포트로 mysql을 띄웠는데 왜 처음보는 포트들이 등록되어 있고, 또한 왜 각자 다른 포트들이 등록되어 있나 궁..
2023.12.07 -
최근 Kotlin을 사용하면서 TestStep을 선언할 때 확장 함수를 적극적으로 활용하고 만족하고 있다. 그러다가, 확장 함수를 멤버 함수로 선언할 수 있지만 그 경우 외부 파일에서 호출할 수 없기에 궁금증이 생겨 몇가지 실험을 해보았다. 우선 확장 함수를 최상단에 선언했을 때의 경우이다. 디컴파일한 코드를 보면 최상위에 파일명에 해당하는 클래스를 선언하고, 그 안에 정적 메서드를 선언한 것을 볼 수 있다. 그에 반해, 멤버 함수로 확장 함수를 선언할 경우 다음과 같게 된다. 정적 메서드가 아닌 인스턴스 메서드가 된다. Kotlin in Action을 보면 이런 말이 나온다. JVM이 클래스 안에 들어있는 코드만을 실행할 수 있기 때문에 컴파일러는 이 파일을 컴파일할 때 새로운 클래스를 정의해준다. ...
Kotlin에서 멤버 확장 함수는 왜 외부 파일에서 호출이 안되는 걸까?최근 Kotlin을 사용하면서 TestStep을 선언할 때 확장 함수를 적극적으로 활용하고 만족하고 있다. 그러다가, 확장 함수를 멤버 함수로 선언할 수 있지만 그 경우 외부 파일에서 호출할 수 없기에 궁금증이 생겨 몇가지 실험을 해보았다. 우선 확장 함수를 최상단에 선언했을 때의 경우이다. 디컴파일한 코드를 보면 최상위에 파일명에 해당하는 클래스를 선언하고, 그 안에 정적 메서드를 선언한 것을 볼 수 있다. 그에 반해, 멤버 함수로 확장 함수를 선언할 경우 다음과 같게 된다. 정적 메서드가 아닌 인스턴스 메서드가 된다. Kotlin in Action을 보면 이런 말이 나온다. JVM이 클래스 안에 들어있는 코드만을 실행할 수 있기 때문에 컴파일러는 이 파일을 컴파일할 때 새로운 클래스를 정의해준다. ...
2023.12.01 -
해시를 공부하다 보면 해시 충돌(Hash Collision)에 대해 공부할 수 밖에 없다. 물론 해시 함수를 만들 때 input과 output이 항상 1:1로 고정할 수 있으면 좋겠지만, output을 저장할 곳에 대한 물리적인 조건을 고려할 수밖에 없기 때문이다. 예를 들어, input이 들어올 수 있는 경우의 수는 100만가지인데, 정작 저장할 원소의 수는 10개라고 하자. 그러면 해시 충돌을 막기 위해 (input과 output을 1:1로 고정하기 위해) 배열의 크기로 100만으로 잡으면 이건 엄청난 낭비이다. 따라서 보편적으로 해시를 만들 때, 해시 함수를 적용한 output에 저장하는 테이블의 크기(m, 버켓의 크기)으로 나머지 연산을 수행해서 저장하도록 만든다. - output = hash(i..
Hash Collision 발생시 Open Addressing 방법은 Separate Chaining 방식에 비해 어떤 장점을 가질까?해시를 공부하다 보면 해시 충돌(Hash Collision)에 대해 공부할 수 밖에 없다. 물론 해시 함수를 만들 때 input과 output이 항상 1:1로 고정할 수 있으면 좋겠지만, output을 저장할 곳에 대한 물리적인 조건을 고려할 수밖에 없기 때문이다. 예를 들어, input이 들어올 수 있는 경우의 수는 100만가지인데, 정작 저장할 원소의 수는 10개라고 하자. 그러면 해시 충돌을 막기 위해 (input과 output을 1:1로 고정하기 위해) 배열의 크기로 100만으로 잡으면 이건 엄청난 낭비이다. 따라서 보편적으로 해시를 만들 때, 해시 함수를 적용한 output에 저장하는 테이블의 크기(m, 버켓의 크기)으로 나머지 연산을 수행해서 저장하도록 만든다. - output = hash(i..
2023.11.24