분류 전체보기106 [TIL]20230901 - JPA 프록시 em.find() vs em.getReference() em.find는 데이터베이스를 통해서 실제 엔티티 객체를 조회하지만 em.getReference()는 데이터베이스 조회를 미루고 가짜(프록시) 엔티티 객체를 조회한다 SQL 쿼리 비교 Member member = new Member(); member.setName("A"); em.persist(member); em.flush(); em.clear(); Member member = em.getReference(Member.class, member.getId()); System.out.println(findMember.getId()); 다음 쿼리와 같이 member.getId()를 실행하였을떄에는 select문이 실행되지 않는것을 볼수 있다. Membe.. 2023. 9. 14. [TIL]20230831 - JPA @MappedSuperclass, 실전 예제 @MappedSuperclass는 공통 매핑 정보가 필요할 때 사용한다. 공통 매핑 정보의 필드를 가지는 추상 클래스를 생성 후 @MappedSuperclass어노테이션을 붙인 후 포함 시키고 싶은 엔티티에 추상클래스를 상속한다. 상속관계 매핑X 엔티티X, 테이블과 매핑X 부모 클래스를 상속 받는 자식 클래스에 매핑 정보만 제공 조회, 검색 불가(em.find(BaseEntity) 불가) 직접 생성해서 사용할 일이 없으므로 추상 클래스 권장 다음과 같은 도메인 모델이 존재할 때 단일 테이블 전략을 사용하여 매핑하려면 @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) public abstract class Item { @Id @GeneratedV.. 2023. 9. 11. [TIL]20230830 - JPA 상속관계 매핑 관계형 데이터베이스는 상송관계가 존재하지 않는다. 하지만 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하기 때문에 객체의 상속 구조와 슈퍼타입 서브타입 관계를 매핑한다. 슈퍼타입 서브타입 논리모델을 실제 물리모델로 구현하는 방법에는 세가지가 있다. 각각 테이블로 변환 -> 조인 전략 통합 테이블로 변환 -> 단일 테이블 전략 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 조인 전략 각각의 테이블로 변환하여 필요시 조인하는 전략 장점 테이블 정규화 외래 키 참조 무결성 제약조건 활용가능 저장공간 효율화 단점 조회시 조인을 많이 사용하므로 성능이 저하됨 조회쿼리가 복잡함 데이터 저장시 INSERT 2번 호출 단일 테이블 전략 하나의 테이블에 저장하는 전략 장점 조인이 필요 없으므로 일.. 2023. 9. 11. [TIL]20230829 - 쓰레드 풀 지난 시간에 톰캣 튜닝을 통해 서버 성능을 향상 시키는 방법을 알아보다가 쓰레드 풀이라는 구조에 대해 궁금해져서 알아보았다. 쓰레드의 문제 자바 쓰레드는 직접 운영체제 쓰레드에 접근한다. 운영체제 쓰레드를 만들고 종료하려면 비싼 비용을 지불한다. 하지만 운영체제의 쓰레드 숫자는 제한되어있다. 때문에 기존 쓰레드가 실행하는 상태에서 계속 새로운 쓰레드를 만든다면 운영체제가 지원하는 쓰레드 수를 초과하게 되고 이는 심각한 오류를 발생시킬것이다. 위와 같은 이유로 쓰레드 풀을 만들어 사용한다. 자바 ExecutorService는 태스크를 제출하고 나중에 결과를 수집할 수 있는 인터페이스를 제공한다. 프로그램은 newFixedThreadPool같은 팩토리 메서드중 하나를 이용해 스레드 풀을 만들어 사용할 수 있.. 2023. 9. 5. [TIL]20230828 - 톰캣 튜닝 멘토링 시간 중 멘토님이 성능 향상을 위한 여러 방법을 소개해주셨는데 톰캣 튜닝, HikariCP 튜닝 등의 방법을 알려주셨다 톰캣 튜닝은 WAS인 톰캣을 튜닝하여 성능을 높이는것이고 HikariCP란 Springboot 2.0 부터 default로 설정되어 있는 DB Connection Pool을 튜닝하여 성능을 높이는 것이다. 나는 톰캣을 튜닝을 담당하여 이에 대한 정보와 성능을 향상시키는 방법에 대해 알아보았다. 톰캣의 설정 정보를 변경하는 방법에는 여러가지가 있다. 찾아본 결과 스프링부트 이전 스프링에서는 xml파일로 설정 정보를 바꾸기도 하였고 직접 톰캣 서버를 구축하는 경우도 있었다. 우리는 스프링 부트를 사용하고 스프링부트는 내장 톰캣서버를 기반으로 실행되기 때문에 application.pr.. 2023. 9. 5. [TIL]20230827 - 최종 프로젝트 4주차 회고 오늘로 4주차가 끝났다. 최종프로젝트가 슬슬 마무리 되어가고있는 느낌이다. 4주차에는 본격적으로 고도화 작업을 시작하였다. 예를 들어 과부하 테스트를 진행하여 우리의 서비스가 몇명의 사용자를 버틸 수 있는지 확인해보았고 이에 대해 대응하기 위해 오토스케일링을 도입하여 가변적으로 서버의 크기를 늘렸다. 또한 기존 MVP기능 중 완료되지 않았던 매매서비스가 1차적으로 완료가 되었는데 이 기능이 아직 완성도가 높지 않기도하고 특성상 복잡한 기능이라 실행시간이 너무 길다. 아마 다음주 부터는 매매기능을 최적화하는데 몰두해야할것같다. 그 외에도 예전부터 모자르다 생각했었던 JPA강의를 보기 시작했고 면접대비 질문도 슬슬 준비하기 시작했다. 프로젝트를 진행하면 할수록 해걀하기 어려운 부분들이 나와 종종 포기하고 싶.. 2023. 9. 4. 이전 1 2 3 4 ··· 18 다음