GC 로깅 + Eclipse MATGC 로그로 메모리 누수 의심 구간을 식별.힙 덤프를 Eclipse MAT로 분석하여 누수 원인을 확인. JVisualVM초기 분석 단계에서 간단하고 빠르게 메모리 사용량 및 누수 여부 확인. APM 도구프로덕션 환경에서 실시간 메모리 이상 패턴 모니터링. SpotBugs 또는 SonarQube코드에서 잠재적인 메모리 누수 원인을 사전에 방지. 아직 메모리누수를 어떻게 처리하는지, 왜 발생하는지 등에 대해서도 알지 못한다. 그래서 발생원인부터 해결방법까지 알아보려고 한다.
영속성 컨텍스트 JPA가 관리하는 엔티티 객체의 집합으로 엔티티를 영구 저장하는 환경이라고 보면 된다. 애플리케이션을 실행하면 엔티티 매니저 팩토리가 생성되고 데이터베이스 작업을 위해 엔티티 매니저를 생성하면 엔티티 매니저에 안에 하나의 영속성 컨텍스트가 생성된다. 엔티티 매니저를 통해 영속성 컨텍스트에 접근할 수 있다. 엔티티 매니저를 통해 엔티티 객체를 영속성 컨텍스트에 넣으면 JPA는 엔티티 객체의 매핑 정보를 가지고 데이터베이스에 반영한다. 엔티티 생명 주기 비영속성(new/transient) 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태이다. 다르게 말하면 객체를 생성만 한 상태를 뜻한다. 그래서 영속성 컨텍스트에는 존재하지 않은 상태다. // 객체를 생성한 상태(비영속) Member memb..
값 타입은 JPA 강의를 보면서 엔티티를 정의할 때 Value Type이 명시 되어 있어서 자세히 알아보고자 정리하게 되었다. Value Type 값 타입은 자바에서 다루는 원시 타입(Primitive Type)으로 int, Integer, String 등을 의미한다. 값 타입은 3가지로 나눌 수 있다. 기본값 타입(basic value type) String, int, Integer 등 자바에서 제공하는 원시 타입 및 래퍼 클래스 타입 임베디드 타입(embedded type) JPA에서 사용자가 직접 정의한 값 타입 컬렉션 값 타입(collection value type) 하나 이상의 값 타입을 저장할 때 사용 기본값 타입 @Entity public class Member { @Id // ... (생략..
자바는 객체지향 언어로 객체 중심적으로 개발하며, 데이터베이스는 데이터를 저장하기 위해 질의어인 SQL을 사용하여 테이블 형태로 데이터를 관리한다. 객체와 테이블은 듣기만 해도 서로 다른 느낌이 들지만 구체적으로 어떤 부분에서 차이가 나는지 설명을 못한다. 그래서 이번에는 이 두 사이의 패러다임 불일치에 대해 이야기하고 JPA를 왜 사용해야 하는지까지 정리해보고자 한다. 패러다임 불일치 - JPA에게 맡기자 ▶️ 상속 Item 객체를 상속받는 Album, Movie, Book 객체를 도식화해서 관계를 나타내보았다. 데이터베이스에서도 Table 슈퍼타입 서브타입 관계로 테이블을 설계할 수 있다. 하지만 이는 객체 상속과 유사한 형태일 뿐이지 같다고 할 수 없다. ITEM은 DTYPE을 통해 앨범과 영화, ..
개발자 ≒ SQL Mapper 자바에서는 객체를 다루고 관계형 데이터베이스는 테이블을 다루게 된다. 객체를 SQL로 변환해서 RDB에 데이터를 관리한다. 그럼, 데이터베이스 연동을 위해 JDBC나 MyBatis를 사용하는 데, 이 두 가지 모두 SQL query를 직접 작성해서 데이터베이스에 넘겨줘야 한다. 이런 경우 어떤 불편한 점들이 있는지 확인해 보자. 클래스에 새 필드 변수가 추가 또는 삭제 되는 경우 회원 클래스에 memberId, name 두 필드 변수가 있다. 여기서 다른 필드 변수 email이 추가되거나, 변수 name이 삭제되는 경우 아래 query가 수정이 필요해진다. 수정 횟수도 많겠지만, Mybatis는 XML 파일에서 SQL 쿼리를 작성해서 컴파일 전 오류를 잡지 못한다. 그래서 ..
패키지 구조에 대해서 배웠다기 보다 Spring MVC 패턴으로 웹 개발하게 되면 Model, View, Controller 이 세 가지로 나누는 것으로 배웠고, 이 방식이 자연스러운 방식이라고 생각했다. 그런데 github에서 다른 사람들의 코드를 확인하면 내가 배운 내용과 동일한 구조를 가지거나 다른 구조를 가지는 경우가 있었다. 그래서 이참에 한 번 패키지 구조에 대해서 알아보고 정리하고자 작성한다. 1. 계층형 패키지 구조 controller ⎿ TaskController ⎿ MemberController service ⎿ TaskService ⎿ MemberService dao ⎿ TaskDAO ⎿ MemberDAO dto ⎿ TaskDTO ⎿ MemberDTO 위에 패키지 구조가 수업에서 다뤘..