java


  • 디버깅의 함정: 슈뢰딩거의 쿼리?

    레벨 2의 세 번째 미션. JPA가 도입되면서 이런저런 학습을 하던 중, 크루로부터 기이한 현상을 제보받았다. 연관관계 지연 로딩에서 일어나는 현상이었는데, 정확한 상황은 아래 코드를 확인해 보자. 책과 출판사를 표현하는 두 가지 엔티티 Book과 Publisher가 존재한다. @JdbcTest를 통해 트랜잭션을 설정하고, 내부에서 아래와 같은 테스트 코드를 작성해 보았다. 현재 entityManager를 통해 flush 연산만 진행했고, 영속성 컨텍스트를 비우지 않았다. 같은 트랜잭션 아래에 있으므로 persist한 엔티티는 관리되고 있는 중이다. 따라서 findById에서 추가적인 쿼리가 발생하지⋯


  • 추상화 수준을 활용해 좋은 코드 작성하기

    제목부터 어려운 단어가 등장했다. 추상화 수준. 개인적으로 abstract라는 영단어가 추상화라는 단어로 온전히 표현되지 않는 감이 있지만, 통상적으로 사용되므로 이 글에서도 추상화라고 다룬다. 이 글에서는 추상화 수준에 대해 알아보고, 어떻게 코드로 적용할 수 있을지 설명한다. Java는 추상화를 통해 발전해 왔다. 추상 클래스, 인터페이스, 레이어의 분리 모두 객체지향과 책임 분리에서 시작됐다. 각 객체의 공통된 특성을 뽑아 나타낸다. 특성을 일반화하면 보다 쉽게 표현할 수 있고, 사람의 수준에서 문장을 읽듯 매끄러운 코드를 작성할 수⋯


  • Garbage Collection in Java Hotspot VM

    C, C++와 같은 언어에서 동적 할당을 해 본 적 있는가? 동적으로 메모리를 사용할 때 반드시 지켜야 하는 사항, 배울 때 귀에 딱지가 얹도록 들었던 말이 바로 얻어온 메모리를 OS에 다시 돌려주는 것이다. 제때 반환하지 않으면 OS로부터 동적으로 할당받을 수 있는 메모리가 줄어들게 된다memory leak . 최악의 경우에는 OS가 더이상 메모리를 더이상 할당해주지 못해 프로그램이 뻗어버리는 상황이 발생할 수 있다. 🤯 초심자들의 통곡의 벽이었던 포인터와 동적 할당을 Java에서는 걱정할 필요가 없다.⋯


  • Java Virtual Machine: 가상화는 무엇일까

    JVM 문서를 읽으면서 정리하는 글. Virtual Machine이라는 단어가 조금은 생소할 지 몰라도, 글을 읽음으로써 개념을 이해하는 데에 목적을 둔다. Java 프로그램이 실행되는 가상 머신이라는 무대는 무엇일까? 왜 가상화를 해야 했을까? 라는 질문을 스스로 던지면서 읽으면 더 도움이 되겠다! Virtualization? 가상화란 무엇일까? 라고 생각해 보면, 존재하지 없는 무언가를 만들어내는 느낌이다. 실제로 하드웨어 플랫폼, OS 등을 가상으로 만들어 그 위에서 어플리케이션이나 다른 OS와 같은 레이어를 얹을 수 있도록 한 것이다. 그 중에서도⋯


Categories