[하이버네이트 성능 튜닝] 패칭 전략

참조: http://www.javadev.org/files/Hibernate%20Performance%20Tuning.pdf

하이버네이트에서 패칭 전략은 애플리케이션에서 어떤 객체와 연관된 객체를 가져오는 방법이다. 즉 A->B 또는 A->Collection 이런 관계가 있을 때 A와 연관되어 있는 B 또는 Collection를 가져오는 방법이다. 쉽게 생각해보면 A를 가져갈때 B나 C도 같이 가져가는 방법이 있고, A를 가져갈땐 A만 가져가고 B는 나중에 a.b라고 접근하는 순간에 가져갈 수 있겠다. 그런데 이렇게 단순하지 많은 않다.

  • Join fetching: 연관된 인스턴스나 콜렉션을 동일한 SELECT 절에서 OUTER JOIN으로 가져온다.
  • Select fetching: 연관된 인스턴스나 콜렉션을 부가적인 SELECT 절을 사용해서 가져오기. lazy=”false”라고 명시하지 않는한 이 부가적인 쿼리는 실제 해당 컬렉션에 접근할 때 발생한다.
  • Subselect fetching: 이전 쿼리나 패치에서 가져온 모든 엔티티에 연관된 인스턴스나 콜렉션을 부가적인 SELECT 절을 사용해서 가져오기. lazy=”false”라고 명시하지 않는한 이 부가적인 쿼리는 실제 해당 컬렉션에 접근할 때 발생한다.
  • Batch fetching: select fetching의 최적화 전략. 하이버네이트는 인스턴스나 컬렉션을 주키나 외래키 목록을 사용해 하나의 SELECT 절로 묶어서 가져온다.

패칭 전략을 이렇게 나누기도 한다.

  • Immediate fetching: owner 쪽을 로딩할 때 컬렉션이나 속성을 그 즉시 가져온다.
  • Lazy collection fetching: 해당 컬렉션에 접근할 때 가져온다.(이게 컬렉션의 기본 전략)
  • “Extra-lazy” collection fetching: 컬렉션의 개별 요소에 접근할 때 데이터베이스에 접근한다. 컬렉션을 전부다 메모리로 가져오지 않는 방법인데 컬렉션이 매우 클때 적합하다.
  • Proxy fetching: 단일 값 관계에 있는 인스턴스는 id가 아닌 다른 속성에 접근할 때 가져온다.
  • “No-proxy” fetching: 인스턴스 변수에 접근하면 바로 가져온다. Proxy fetching에 비해 덜 lazy한 방식이지만 프록시를 사용하지 않으니 더 깔끔하다. 이 방법을 사용하려면 빌드시 바이트코드 조작을 해야 하다. 이 방법은 거의 사용하지 않는다.
  • Lazy attribute fetching: 어떤 속성이나 단일 값 관계에 접근할 때 인스턴스 변수를 접근한다. 이 방법도 빌드시 바이트코드 조작을 해야 하며 거의 사용하지 않는다.


봄싹 스웨거 스터디 개설!

이전에 올렸던 봄싹 기존 스터디의 문제점에 대한 보완책을 구상해 새로운 스터디를 운영해볼 생각입니다.

[봄싹] 기존 스터디의 문제점

이에 대한 해결책과 개략적인 스터디 운영 방법을 스터디 소개에 적어뒀으니 참조하시기 바랍니다.

봄싹 스웨거

httpv://www.youtube.com/watch?v=HDTwQGEeGZc&feature=player_embedded

한국 남사당패의 줄타기를 보고 어떤 독일인이 스포츠로 발전시켰다고 합니다. 저는 이걸 보면서 봄싹 스터디에 대해서 생각했습니다.

한국 줄타기는 그대로의 가치를 지니고 있지만 일반인들이 즐기기에는 줄의 탄성이 너무 약하고 너무 높고 위험했습니다. 탄성 높은 줄을 만들어 여러가지 묘기를 부릴 수 있고 높이는 원하는 곳에 설치하 수 있어 안정성을 확보해 ‘줄타기’라는 걸 ‘Slackline’이라는 형태의 스포츠로 발전시킨 것을 보고 정말 멋지단 생각이 들었습니다.

스터디도 그래야 합니다. 일부 잘하는 사람 몇몇이 모여서 자기들끼리만 잘난척하는 스터디는 그 나름대로 가치가 있겠지만 저는 그러고 싶지 않습니다.

그 보다 더 가치있는 스터디를 하고 싶습니다. 기왕 스터디에 쏟을 시간이라면 ‘일부 선택받은 자’를 위한 스터디 말고 ‘의지가 있는 자’를 위해 열려있는 스터디를 하고 싶습니다.

제가 운영하는 봄싹은 나눔과 노력의 가치를 소중하게 생각합니다. 그리고 더 잘 나눌 수 있는 방법을 고안하고 실철하는게 바로 봄싹 운영자인 제가 할 일입니다.

2011년 봄싹 스웨거에는 그런 스터디가 될 겁니다. 파아팅!!


[Git] rm –cached

http://progit.org/book/ch2-2.html#removing_files

잘못해서 버전관리 하지 않아야 할 파일을 추가한 경우가 있습니다. 인텔리J 설정 파일이나 이클립스 관련 파일 중 일부는 개발자 환경마다 다르기 때문에 버전관리에서 빼주는게 맞는 듯 합니다. 괜히 그런 파일을 버전관리 해봤자. update나 pull 받는 쪽에서 환경 설정이 이상해져서 클래스패스 이상해지고 컴파일 에러나는 상황만 연출될 뿐이니까요.

암튼.. 어떻게 해야되냐면.

git rm –cached 파일

이러면 됩니다. –cached를 붙이지 않으면 파일시스템에서도 삭제되기 때문에 조심해야 합니다. 뭐 아에 지워버릴 파일이라면 git rm만 사용해도 되겠지만.. 그런 경우는 흠.. 드물겠죠.

ps: –는 (빼기 두개)인데 화면에선 이상하게 보이네요. @_@;

D-3 올해 마지막 강의

내년에도 강의를 하게 될지 어떨지 모르겠다. 한동안 강의 요청이 없었다. 그러다 갑자기 저번주부터 주중에 강의가 잡혔다. 저녁 8시반부터 10시반까지 강남에서 강의를 하고 있는데 이제 3일 남았다.

난 지금 쓰리잡이다. 본업, 부업, 알바. 본업으로 분당에 있는 회사로 출퇴근하며, 출퇴근길에 부업을 한다. 그리고 퇴근한뒤에 알바를 하고 있다.

그래도 벌이가 시원찮다. 부업은 전혀 돈이 되지 않는 업이고, 알바는 그나마 부업에 비하면 나은 편이지만 그만큼 고생이 따른다.

약간 피곤하지만 올해 마지막 강의니까 기운내자. 이제 3일 남았다. 수강생들을 실컷 괴롭혀 줘야지… 아잣!!!!

httpv://www.youtube.com/watch?v=bxDlC7YV5is&feature=player_embedded#!