본문 바로가기

[IT]30

[JAVA] static 메소드 Spring 오픈 카톡방에 흥미로운 질문이 올라왔다. 부모클래스의 static 메소드를 오버라이딩한 자식메소드에서 왜 super로 접근이 불가능 하냐는 질문이었다. static 메소드 자바에서 메소드에 static을 붙이면 Class.methodName(); 으로 호출이 가능하다. 대신에 이렇게 만들어진 static 메소드는 해당 클래스로 부터 만들어진 인스턴스에서 호출할 수 없다. 그래서 클래스 메소드라고 부르기도 한다. 앞서말한 코드를 보자, 메소드 내부에 super를 참조하는 내용을 작성하기 전까지는 오류가 나지 않았는데, 작성하니 저런 오류가 발생했다. 원인은 근본적인 곳에 존재했다. 애초에 this, super는 클래스 기준의 this, super로의 참조가 아닌 생성된 객체 기준에서 this,.. 2021. 3. 25.
[JPA] JPA 임베디드 타입 (값 타입 과 불변객체) JPA의 데이터 타입 JPA의 데이터 타입은 크게 두 가지 엔티티 타입과 값 타입으로 나뉜다. 엔티티 타입은 연관관계 매핑 시, @Entity로 선언한 객체를 필드 값으로 넣은 것을 떠올리면 되고, 값 타입은 int, Integer, String처럼 그 자체가 단순한 값을 가지고 있는 타입들이 속한다. - 엔티티 타입 - @Entity로 정의하는 객체 - 데이터가 변해도 식별자로 추적 가능 - 예) Member 엔티티 이름, 나이 등을 변경 시 id값으로 식별할 수 있음. - 값 타입 - 단순히 자바 기본 타입이나 객체 - 식별자가 없고 단순한 값이므로 추적이 불가능함. - 예) 물품 개수를 100개에서 200개로 변경하면 완전히 다른 값으로 대체된다. 엔티티 타입은 @Entity로 선언한 객체 자체를 .. 2021. 3. 25.
[Redis] Redis 란 무엇인가? Redis에 대해 알아보기 전에 일단 NoSQL에 대해 알아보자. - NoSQL NoSQL. 이름만 들었을 때는 "뭐지? SQL문 없이 쓰는 건가?"라고 생각하기 쉽다. 하지만 No SQL은 Not Only SQL의 줄임말로, 비관계형 데이터베이스를 지칭하고 NoSQL은 Key-Value나 컬럼, 문서 형식으로 데이터를 관리한다. (일반적으로 먼저 접하게 되는 MySQL, MariaDB은 대표적인 관계형 데이터베이스(RDBMS)이다.) NoSQL은 아주 많은 양의 데이터를 효율적으로 처리가 필요할 때, 데이터의 분산처리, 빠른 쓰기 및 데이터의 안정성이 필요한 경우에 RDBMS 보다 적합하다. - Redis (InMemory Data Structure Store) REDIS(REmote Dictionar.. 2021. 3. 23.
[JPA] JPA 프록시 JPA 프록시 다음과 같이 Team 엔티티와 Member엔티티가 1:N 연관관계에 있다고 생각해보자. 위와 같이 Member 엔티티에는 Team이라는 타입의 필드 값이 존재하게 된다면, Member 엔티티를 조회할 때마다 매핑된 Team에 대한 정보도 같이 조회될 것이다. 즉, 관계된 모든 테이블에 쿼리가 발생하고 연관관계가 많아지면 상상할 수 도 없을 만큼의 select 쿼리가 발생하게 될 것이다. 추가로 Member 객체를 조회했지만 당장 Team에 대한 정보를 필요로 하지 않는 경우도 있을 것이다. 이때도 Team에 대한 쿼리가 발생하는데, JPA는 프록시 개념을 이용해 쿼리가 발생하지 않도록 처리한다. EntityManager의 getReference(class, Object)라는 메소드를 호출하.. 2021. 3. 22.
[JPA] 양방향 연관관계에서의 주의할 점( N:1 ) JPA의 연관관계 문제점 JPA의 영속성 컨텍스트는 데이터베이스를 객체 관점으로 관리하기 위해 만들어졌지만, 태생적인 차이로 문제점이 생기곤 하는데, 이번에는 연관관계 설정시 주의할 점을 알아보자 [데이터베이스 관점] [객체 관점] JPA를 사용하게되면 객체와 DB의 연관관계 방식의 불일치로 문제점이 생기게 된다. // ----------테스트 코드 ------------// Team team1 = new Team(); Team team2 = new Team(); team1.setName("team1"); team2.setName("team2"); teamRepository.save(team1); teamRepository.save(team2); Member member1 = new Member(); M.. 2021. 3. 19.
[JPA] JPA의 영속성 관리 (JPA 영속성 컨텍스트) 이번에는 JPA 영속성 컨텍스트, 엔티티의 라이프 사이클, 영속성 컨텍스트가 엔티티 매니저에 의해 어떻게 관리되는지 알아봅시다! 1. 엔티티 매니저 팩토리 & 엔티티 매니저 //JpaMain.java 중 일부 //엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성 EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득 엔티티 매니저 팩토리는 하나를 공용으로 쓰고 엔티티 매니저를 생성한다. 엔티티 매니저는 DB와 상호작용 하는 역할을 한다. 엔.. 2021. 3. 16.
728x90