Search
Duplicate

2021년 6월 3주차 회고록 - 포스팅 주제에 대한 고민

포스팅 주제에 대한 고민

2021년 6월 21일 블로그 방문자 통계
내가 포스팅을 하는 주제와 스타일은 주로 인강, 스터디과정, 책을 분류해서 챕터별로 요약글을 올리는식이다.
그래서 처음부터 차분히 책을 보듯이 보거나 내가 다회차를 하면서 책읽는 시간을 단축하는데는 많은 도움이 된다. 하지만, 블로그로써 좀 더 많은 사람들이 찾는 글을 써서 방문자를 늘리고 싶다는 욕심도 조금이지만 있다.
하지만, 내가 작성하는 스타일의 글은 방문자를 올리기에 좋은 스타일은 아니다. 사람들은 책 혹은 인강을 보면 봤지 굳이 블로그에서 차례대로 글을 정독 할 필요가 없다고 생각한다.
차라리 트러블슈팅에 관련해서, 혹은 특정 실무에서 필요한 기술들(엑셀 업/다운로드, 파일 업로드/다운로드, xxx사용법)에 대해서 작성하는게 맞다고 본다. 이런 저런 고민들로 새로운 분류의 포스팅을 작성해보고 있는데, 요즘 새로 시작한 분류로는 자바 기술면접 관련해서 포스팅을 시작했는데, 이제 슬슬 스프링에 대해서도 작성해 볼 예정이다.
그래도 본말전도가 되면안된다는 점을 잊지 말아야한다. 내 공부를 하는김에 부가적으로 방문자도 생각하는거지 방문자만 생각한다고 필요하지도 않은 글을 정리하고 시간을 쓰는것은 시간낭비이다.
지난주에는 사실 이펙티브 자바를 제외하면 거의 글을 쓰지 못했다.
요근래 글을 쓰는 속도가 느려진 것 같고 그렇다고 글 하나하나에 대한 깊이나 이해도도 예전만 못하다는 생각이 든다. 아무래도 공부하는 것들이 초급을 벗어나는 시점이라그런것 같다. 그래도 꾸준히 하다보면 뭐라도 있겠지...

ZGC

아는 지인들이 이직관련 기술면접으로 받았다는 내용으로 ZGC가 언급되었다.
JDK 11에 등장한 이 새로운 가비지컬렉터(이하 GC)에 대해 설명해보라는 질문이였는데, 나는 G1 GC 이후 이런 GC가 나왔다는 사실조차 몰랐기에 당황했다.
이 GC는 모든 GC가 그럿듯이 Stop-The-World를 줄여서 성능개선을 하려는 시도를 한 GC로
낮은 지연시간(Low-Latency)과 확장성(Scalable)이라는 특징을 가지고 있는데, 이는 64비트 주소 체계에 사용되지 않는 18비트를 사용함으로써 가능하게 한다.
그런고로 64비트가 아니라면 (32비트라면) 사용을 할 수 없다.
더 자세한 내용은 위 북마크를 참고하자.
일반적으로 우리가 실무에서 가비지컬렉터 튜닝을 할 기회가 얼마나 있냐고 한다면 나는 아직까진 없었다고 할 수 있다. 그렇기에 뭔가 붕 뜬 것처럼 그저 기술면접에 대답하기위한 블로그 포스팅을 하고 공부를 했기에 장황하게 설명은 했지만 각인되듯이 머리에 입력되진 않은 상태다.
내가 조금 더 연차가 높아지고 큰 회사를 가면 이런 지식들을 실제로 쓸 일이 있을까 궁금하다.

이펙티브 자바: 아이템 22 - 아이템 26

인프라 진도로 인해 미뤄뒀던 이펙티브 자바를 다시 포스팅했다. 드디어 제네릭 챕터에 들어가게 되었는데,
새삼 느끼지만 내가 인터페이스를 참 대충 알고 적당히 쓰고 있었구나~ 라는 생각을 하게 된다.
아이템 22~ 25까지는 모두 3장인 클래스와 인스턴스에 대한 내용인데, 그동안 관성적으로 사용하던 코드들에 대해서 다시 한 번 생각하게 해줬다. 대충이나마 요약해서 말하자면 다음과 같다.
아이템 23: 태그달린 클래스보다는 계층 구조를 활용하라. : 하나의 클래스에 enum이나 기타 필드를 이용해 여러 가지 목적으로 클래스를 사용하는 경우가 있는데 이 경우 하나의 타입으로 정해질 때 버려지는 많은 코드들과 유지보수의 어려움으로 비용낭비가 많다는 점을 알려주는데, 예제로 도형을 가지고 구현해보니 바로 이해가 된다.
멤버 클래스는 되도록 static으로 만들어라.
:나도 그렇고 많은 주니어 개발자들이 그렇지만 중첩 클래스는 잘 쓰지 않는다 대부분 톱 레벨 클래스로 만들어 사용하는데, 나같은 경우에는 중첩 클래스도 되는대로 썻지 static의 용도 그외의 용도에 고민한적이 없다. 그런데 정적 멤버 클래스와 비정적 멤버 클래스의 차이점에 대해 살펴보니 마구잡이르 쓸 경우의 비용낭비와 사이드이펙트를 알 수 있게 되었다.
아이템25: 톱레벨 클래스는 한 파일에 하나만 담으라.
: 이 부분은 사실 요즘 많은 개발자들도 기본적으로 지키는 부분으로 중첩 클래스와는 다르다.
톱레벨 클래스 자체를 한 파일에 여러 개 선언하는 것으로 이렇게 사용할 경우 발생하는 문제를 경험해본다. 하지만 최신 IDE 대부분은 컴파일러에서 체크를 해주기에 알아서들 다 잘 지키고 있을 것이다.
아이템26: 로 타입은 사용하지 말라.
: 나는 원래 잘 사용하지 않았지만 그냥 별 이유 없었는데 어째서 로 타입의 지네릭스를 사용을 자제해야하는지 그리고 사용을 권장하지 안는데 어째서 존재는 하는것인지에 대해 알아봤다.
요약하자면 하위호환성 때문에 로 타입이 존재하는 것인데 최신 코드에서 로 타입을 쓰는건 문제만 가득이다. 차라리 와일드카드 타입이라는 훌륭한 대체제가 있으니 그것을 사용하도록 하자.

기술면접 준비

위에서도 말했듯이 기술면접을 준비하며 여러 키워드들에 대해 포스팅을 한다.
이번에는 zgc와 volatile에 대해 포스팅을 하고, 공부를 했는데 문득 이런 생각이 든다.
요즘 컴퓨터 성능자체가 엄청 뛰어나지고, 인프라등도 aws같은 전문 업체들이 생기면서 분업화가 되고있고, 그 하나하나에 대한 필요학습량은 계속해서 늘어나는 상황에서 내가 어디까지 파고 들어서 알아야 할까?
시간은 제한적이고 컴퓨터 공학이라는 분야는 갈수록 방대해지고 깊어지고 있다. 그런이유로 풀스택이라는 의미가 퇴색되는 것인데, 그 선을 어디로 정해놓고 해야하는가에 대한 생각이 든다.
이사님은 그렇게 너무 뻘짓하다가 정작 중요한걸 놓칠 수 있다고하는데, 틀린말은 아니다.
당장 주니어 개발자인 내가 당장 실무에서 사용하는 기술이나 비즈니스 로직 파악하는게 zgc 원리를 파고들고 하는 것보다 중요하지 않을까?
이를 축약한 단어가 바로 야크쉐이빙인데, 말그대로 현재의 나를 표현한다고 할 수 있을 것 같다.
하지만, 이런 과정들을 거쳐야 길을 찾을 수 있는게 아닐까? 라는 생각도 든다.
작년까지만해도 프론트에도 관심이 있고 백엔드와 프론트중 어디를 더 깊게 공부해서 진로로 가야하나 고민할때가 있었는데 프론트를 딱 6개월정도 공부하고 난 뒤 백엔드가 나한테 더 맞는다는 사실을 깨달았으니..