05.09 ~ 05.15

유수민·2023년 5월 15일
0

인사이트

목록 보기
15/15
post-thumbnail
post-custom-banner

📌 목록

📌 감상

  1. 달리는 인증 서비스의 NoSQL을 바꾸자. - 실전편
    기존에는 Couchbase만 단독으로 쓰던 것을 조회 유형에 따라 MongoDB, MSSQL을 씀으로써 조회 속도 개선을 이룬 것에 대해 작성되었다.
    읽어보면서, 나도 이러한 과정을 실무에서 겪고 싶다라는 생각을 가지면서 부럽다는 생각을 가졌던 것 같다.

  2. 훌륭한 개발자의 5가지 특징
    여기서 내가 가장 가슴 깊이 새겼던 특징은 '결과를 공유하는 것에 두려움이 없다'이다.
    이 글에서 '많은 주니어 개발자들이 결과 공유를 부끄러워하고 두려워합니다. 본인의 작업을 잘 못했다고 생각할까봐 그런것인데'라는 말이 딱 나를 지칭하는 말이였다. 내가 작업한 결과가 남들이 보기에는 잘 못했다고 생각할 수 있다는 나의 생각에 사로잡혀 스트레스가 엄청 높았다. 하지만 이글에서는 '훌륭한 개발자가 되고 싶다면 정말 많은 피드백을 받아야 합니다. 피드백을 통해 자신의 약점을 파악하고, 다음 해야 할일이 어떤 것인지 깨달을 수 있습니다'라고 말했다. 나에게 엄청 엄청 도움되는 말이고 위로되는 말이었다. 노트북 밑에 적어놓아야겠다는 생각이 들었다.

  1. 19년 차 개발자가 실무에서 맞닥뜨린 기술 이슈들
    현재 나는 내 기술 스택인 자바와 스프링, 알고리즘에 집중된 공부를 하고 있다. 아티클을 통해 다시금 자바, 스프링 이외에도 운영체제, 컴퓨터 구조 등 cs 적 지식과 네트워크, DBMS, 운용환경에 대해서도 놓치지 않아야 한다는 생각을 새겨넣었다. 무엇보다 놀라웠던 것은, 해당 글에서 내가 모르는 말들이 정말 너무나도 많았다는 사실이었다. 하지만, 조급해하지 않기로 했다. 현재 내가 공부를 중단하고 있지 않고 계속 하고 있고, 난 단지 앞으로 공부를 해야할 방향을 확인했다는 생각으로 접근하려고 한다. 공부의 끝은 없겠지만, 방향은 있으니 꾸준히 잘 따라가다보면, 언젠가 개발자로써 내 자신의 능력 확신을 가지게 되지 않을까?

  2. JVM Architecture, 제대로 이해하기

  • 순서 : JDK로 개발 → JVM의 메모리에 컴파일된 바이트 코드 올리기 → JRE를 통해 로직 실행
  • JDK 8에서 JDK 9로 바뀌면서 생긴 변화 (모듈 지원 시작)
    1) monolithic으로 JDK 내에 JRE를 포함 → Java API를 73개의 모듈로 나눔
    2) 사용자가 내부 API에도 액세스 할 수 있음(보안 취약) → 특정 패키지에서 원하는 부분만 공개, 특정 부분은 재사용 할 수 없음.
  • JVM이 작동되는 방식
    순서 : JDK로 개발 → JVM의 메모리에 컴파일된 바이트 코드 올리기 → JRE를 통해 로직 실행
    1) Java코드로 개발된 것을 JDK에서 JIT Compiler에 의해 class파일로 변환
    - Class File : Java byte code를 포함한 .class 확장자 파일
    - javac : 모든 Java 소스 파일을 Class 파일로 변환하는 명령어
    Java 코드를 Runtime시 인터프리터 혹은 JIT 컴파일러가 읽을 수 있는 형태인 Java Virtual Machine Code로 변환하여 .class 확장자를 가진 파일로 저장
    2) ClassLoader를 통해 서로 다른 디렉터리에 분산된 class 파일들을 메모리에 올린다.
    ClassLoader의 역할 : Loading, Linking, Initialization
    - Loading : JVM이 파일 로딩시 데이터를 로드하고 읽는 단계, 클래스 파일을 메모리에 적재. Type에 대한 binary data 찾고 가져오기
    - Linking : 클래스 파일의 데이터를 메모리 영역에 연결
    유효성 판단 → 클래스 변수에 메모리 할당 후 기본값으로 초기화 → Direct references로 대체
    - Initialization : 모든 static 변수와 인스턴스 변수에 실제 값 할당
  • Runtime Data Area
    1) 메서드 영역 : JVM 당 오직 하나
    ClassLoader reference, Type 정보, Runtime constant pool, 생성자, 메서드, 필드
    2) Heap 영역 : 모든 객체들과 그에 해당하는 인스턴스 변수들이 저장된다.
    3) Stack 영역 : 스레드마다 분리된 스택 영역을 갖는다. 호출되는 메소드 실행을 위해 해당 메소드를 담고 실행 완료시 제거
    4) PC register : 현재 실행되고 있는 명령어의 주소를 저장
    5) Native Method Stack : native 메서드들 정보 저장
  • Execution Engine : Class 파일 실행하기
    1) Interpreter : 바이트코드를 '한 줄씩' 읽어 기계어로 변환. 로드 속도와 실행 속도는 매우 빠르나 인터프리터 자체의 속도는 느림
    2) JIT 컴파일러 : 반복되는 코드 블록을 기억. 컴파일 시간이 필요하여 인터프리터보다 더 많은 시간 필요.
    3) 가비지 컬렉터 : 힙 메모리 영역에서 필요없는 객체를 지움
profile
배우는 것이 즐겁다!
post-custom-banner

0개의 댓글