본문 바로가기

분류 전체보기

(120)
1. 마이엔펠트. 하이디 마을. 우리가 꿈꾸던 스위스 그 자체였다. 이번 스위스 여행의 시작은 하이디 마을 마이엔펠트에서 시작했다. 보통 마이엔펠트를 설명할 때 일본 애니메이션 를 함께 언급하는데 이 애니메이션의 원작 동화의 배경지로 등장했기 때문이다. 를 보지 않은 사람도 애니메이션의 제목이 주는 분위기로 이 곳의 분위기를 연상할 수 있다. 마이엔펠트(Maienfeld) 마이엔펠트는 인구가 3,000명이 채 되지 않는 스위스 동부의 작은 도시이다. 처음 들어섰을 때 감도는 고즈넉한 분위기는 도시 전반에 걸쳐 자리잡고 있다. 곳곳에 포장되지 않은 울퉁불퉁한 붉은 벽돌 길은 그런 분위기를 더욱 자연스럽게 만든다. 물론 캐리어를 끄는 여행객에겐 굉장한 불편함으로 다가오겠지만. 마이엔펠트에서 조금 더 안쪽으로 가면 이 도시를 유명하게 만든 하이디 마을(Heididorf)이 있..
7. 뮌헨. 님펜부르크 궁전. 한적함. 여유로움. 2년 전 방문했던 님펜부르크 궁(Nymphenburg Palace)을 다시 찾았다. 본궁인 레지덴츠(Residenz)가 뮌헨 시내 중심에 자리 잡고 있는 것과는 달리 님펜부르크 궁은 별궁으로 뮌헨 시내에서 차량으로 15분 정도 떨어진 거리에 있다. 궁전으로 들어가는 길목에는 호수를 따라 양쪽으로 길이 뻗어 있다. 이때부터 정원 끝까지 뻗어 있는 좌우 대칭이 시작된다. 이 철저한 대칭을 따라 길을 걷고 있으면 괜한 안도감이 생긴다. 님펜부르크 궁 입구 여느 궁전과 성들이 그러하듯이 마냥 '관광지'스러울 것만 같은 님펜부르크 궁은 의외로 그렇지 않다. 고요하고 한적하다. 시내에서 도보로 찾아오기에는 무리가 있어서인지 활기차고 북적한 시내와는 전혀 다른 분위기가 느껴진다. 이곳에는 다양한 사람들이 있었다. 정..
JPA를 이용한 다대일 객체 관계 매핑 JPA를 이용한 다대일 객체 관계 매핑한 회원은 하나의 팀에 속하며, 한 팀에는 여러 회원이 속하는 경우를 생각해보자. 팀은 회원에 대한 정보를 몰라도 괜찮다고 하면 아래와 같이 표현할 수 있다. JPA EntityMember.java @Entity public class Memeber { @Id @GeneratedValue @Column(name = "memberId") private Long id; private String userName; @ManyToOne @JoinColumn(name = "teamId") private Team team ​ //bla bla }@JoinColumn을 사용하여 Team과 다대일 관계를 매핑한다. @JoinColumn 주요 속성name - 속성은 외래키 컬럼의 이..
6. 다시 또 뮌헨. 유럽에 온다면 항상 다시 찾고 싶은 도시. 뮌헨 구 시가지 구석 구석 우리는 뉘른베르크 여행을 마치고 뮌헨에 도착했다. 이미 지난 유럽 여행 때 한번 찾은 도시이지만 꼭 다시 오고 싶었고, 추후 유럽 여행 시에도 기회가 된다면 또 한번 들르고 싶은 도시이다. 뮌헨은 독일 여행 시 가장 많이 찾는 도시이지만 로마, 파리, 베니스 등 '유럽'하면 대표적으로 떠오르는 도시들에 비하면 무언가 2% 부족한 느낌을 준다. 그럼에도 불구하고 나는 첫 유럽 여행 중 가장 기억에 남은 곳을 물어보면 늘 뮌헨이라고 말하곤 했다. 마리엔 광장(Marienplatz) 뮌헨의 어떤 스팟이나 건축물에 반한 것이 아니다. 정열적인 바르셀로나가 있고, 낭만적인 파리가 있듯이 뮌헨이 주는 이 도시만의 분위기가 있다. Karlstor을 지나면 마리엔 광장을 중심에 두고 있는 뮌..
JPA 기본 키 전략 JPA 기본 키 전략1. 직접 할당@id 애노테이션으로 필드와 매핑한다. 자바 기본형, 래퍼형, String, Date, BigDecimal, BigInteger가 타입이 가능하다 2. IDENTITY기본 키 생성을 데이타베이스에 위임한다. 데이타베이스의 auto_increment와 같은 기능을 사용할 때 쓴다. 키 필드에 @GeneratedValue(strategy = GenerationType.IDENTITY)를 사용한다.이 전략을 사용하면 JPA는 기본 키 값을 얻어오기 위해 데이타베이스를 추가로 조회한다. 따라서 이 전략을 사용하는 엔티티를 새로 생성하여 식별자 값을 할당하려면 1차 캐시를 넘어서 데이타베이스에서 Insert한 후에 기본 키 값을 조회한다. 즉, persist()를 호출하는 즉시 ..
JPA를 이용한 엔티티 CUD(등록,수정,삭제) 엔티티 등록엔티티 매니저를 이용해서 엔티티를 영속성 컨텍스트에 등록한다1 transaction.begin(); 2 em.persist(memA); 3 em.persist(memB); 4 transaction.commit();트랜잭션이 시작된 후 memA 를 persist 하면 DB에 바로 반영되는 것이 아니다. memA의 Insert Query 를 영속성 컨텍스트 내의 내부 쿼리 저장소(쓰기 지연 SQL 저장소)에 저장하고 1차 캐시에만 엔티티를 저장한다. memB를 persist 할 때에도 마찬가지이다. 마지막으로 transaction.commit()이 호출될 때 flush가 일어나고 이때 실제 DB로 SQL을 날린다.persist 할 때마다 쿼리를 날리든, 모아서 한번에 날리든 결국 트랜잭션 커밋이 ..
EntityManager 와 EntityManagerFactory Entity Manger FactoryEntity Manger 를 생성하기 위해서는 persistence.xml의 설정 정보를 사용해서 Entity Manger Factory를 먼저 생성해야한다.EntityManagerFactory emf = Psersistence.createEntityManagerFactory("name");Entity Manager Factory 생성 비용은 굉장히 크기 때문에, 애플리케이션 전체에 걸쳐 한 번 생성하고 재사용 해야 한다.Entity Manager Entity Manager Factory 에서 Entity Manager를 생성한다.EntityManager em = emf.createEntityManager();JPA 대부분의 기능은 Entity Manger 가 제공한..
Persistence Context 영속성 컨텍스트 Persistence Context - 영속성 컨텍스트영속성 컨텍스트는 엔티티 매니저를 생성할 때 같이 만들어 지며 엔티티 매니저를 통해서 영속성 컨텍스트에 접근할 수 있다. 즉, 엔티티 매니저가 하는 어떤 행위는 영속성 컨텍스트에 반영되고 이것이 최종적으로 DB에 반영된다.특징식별자 값영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다(@Id 애노테이션)데이터베이스와의 관계영속성 컨텍스트에 엔티티가 저장된다고 바로 DB에 반영되는 것이 아니라 일반적으로 트랜잭션이 커밋될 때 DB에 반영된다.(flush)영속성 컨텍스트에 엔티티를 관리할 때의 장점1차캐시동일성 보장트랜잭션이 지원되는 지연 쓰기변경 감지지연 로딩Entity Life Cyclenew / transient : 비영속 상태라고 하며 영속성 컨텍스..