Back-End53 JPA) EM, EMF EMF (엔티티 매니저 팩토리)는 말 그대로 EM(엔티티 매니저)를 만드는 공장인데 생성비용이 크다. 따라서 애플리케이션 전체에서 공유하도록 설계되어 있다. 반면 공장에서 생성되는 엔티티 매니저의 비용은 거의 없다. EMF 는 여러 스레드가 동시에 접근해도 안전하지만, EM 은 여러 스레드가 접근하면 동시성 문제로 인해서 공유하면 안된다. EM 은 예를들면 트랜잭션이 시작할 떄 커넥션을 획다. 2022. 3. 11. JPA란? JPA 는 데이테베이스 기술이라기 보다 애플리케이션 데이터를 객체지향 관점으로 바라보고 다룰 수 있게 해주는 객체지향 기술이다. JPA 을 이용해 객체 관점에서 복잡한 문제를 다루는데 만 집중하면 자칫 이면에서 일어나는 데이터베이스 작업의 최적화를 놓칠 수 있다. 데이터베이스는 중요한 IT 자산이며, 확장에 비용이 많이드는 리소스로 항상 최적화를 염두해 두어야 한다. JPA/Hibernate 는 SQL 쿼리를 직접 작성할 때보다 월등한 개발속도와 유지보수성을 누릴 수 있다. JPA 를 사용해서 얻을 수 있는 가장 큰 효과 SQL이 아닌 객체 중심으로 개발하여 생산성 및 유지보수의 향상 테스트 작성의 용이 개발단계에서의 DB 마이그레이션 용이 2022. 3. 11. JPA) 1차 캐시 영속성 컨텍스트는 내부에 캐시를 가지고 있는데 이것을 1차 캐시 라고 한다. 영속 상태 엔티티는 모두 이곳에 저장된다. 쉽게 이야기 하면 영속성 컨텍스트 내부에 Map으로 된 컬렉션이 있는데 이곳에 id를 식별자로 하는 엔티티 인스턴스가 저장된다. Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); em.persist(member); 1차 캐시의 키는 식별자 값이다. 그리고 식별자 값은 DB의 기본 키와 매핑되어있다. 따라서 영속성 컨텍스트에 데이터를 저장하고 조회하는 모든 기준은 DB 기본 키값이다. 1차 캐시에서 조회 em.find() 를 호출 하면 우선 1차 캐시에서 식별자 값으로 엔티티를 찾는다. 만약 .. 2022. 3. 11. QueryDsl 설정하기 ( Gradle 5.0 이상 ) 기존에 쓰던 QueryDSL 설정이 안되서 다른 설정의 코드를 가져왔습니다. 정리용도이므로 참고만 해주시면 감사하겠습니다. 제 다른 블로그에서 쓰던 글을 이전시킵니다. build.gradle 파일에 추가한다. buildscript { ext { queryDslVersion = "5.0.0" } } plugins { // 추가 id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10' } dependencies { // 추가 implementation "com.querydsl:querydsl-jpa:${queryDslVersion}" // Test Code에서 적용하기 위한 의존성 implementation "com.querydsl:querydsl-apt:${que.. 2022. 3. 11. 로깅 라이브러리(@Slf4j) 사용시 log 메서드의 올바른 사용법 애플리케이션 계층에서 우리가 로그를 남길 때 사용하는 방식은 다 다르다. 이번에 강의를 들으면서 알게된 방법이 있어서 공유하게 되었음. 직접 예시 코드를 작성해본다.. String test = "test"; log.info("log Test = " + test); // 1 log.info("log Test = {} ", test); // 2 정확하진 않지만 대표적으로 로그 라이브러리를 사용할 떄 위와 같은 2가지 방식으로 쓰는 것으로 알고 있다. 나 같은 경우 1번 방식이 손에 익었기 떄문에 주로 1번방식을 사용했는데, 결론부터 말하자면 1번방식을 사용하면 안된다는 것이다. 이것은 자바언어와 관련이 깊은데, 1번 방식이 이루어지는 과정은 이러하다. 1. 'test' 라는 변수에 값이 치환이된다 2. "l.. 2021. 12. 18. MySQL) Partitioning ( Range , List ) 우선 , 파티션이란 DBMS 하나의 서버에서 테이블을 분산하는 것이다. 여기서 테이블의 분산은 특정한 원격서버간의 분산이 아니다. 좀더 쉽게 말하자면 특정 테이블에 대한 데이터들을 분산해서 조회하고 이를 통해서 기존의 테이블 전체를 검색하는게 아니라 특정 범위의 데이터를 조회할 수 있게 함으로써 성능적인 면에서 우위를 얻을 수 있게 해주는 것이 주된 기능이라 보면 된다. 해당 기능은 MySQL 5.1 버전부터 제공되게 되었다. 파티션의 기능은 4가지 방법으로 Range, List, Hash, Key 의 방법이 존재한다. 파티션 또한 마찬가지로 인덱스처럼 무조건 적으로 적용한다고 해서 좋은 방법은 아니다.. 파티션은 데이터와 인덱스를 조각화 하여 물리적 메모리를 효율적으로 사용하게 해준다. --- 주의사항.. 2021. 9. 19. 이전 1 2 3 4 5 6 7 8 9 다음