728x90 전체 글651 버섯이 자라다(버섯 풍년) 하루이틀 화분을 안봤을 뿐인데 그새 손가락만한 버섯이 자랐다. 마음같아선 버섯도 키우고싶었는데 버섯이 다른 화분까지 침투할까봐 무서웠다 그래서 버섯이랑 저 화분에 있던 흙까지 다 갖다버렸다. 저 갓의 아랫부분이 자글자글한게 소름이 돋는다 가만보면 화분에서 막 자란것 치고 예쁘게 자랐다 근데 출처불명, 정체불명의 버섯이 자랐다는점때문에 저 버섯이 좀 무섭다 그리고 흙 처리하려고 저 초록화분을 들었는데.. 아래 물받침대에서 물 빨아들이면서 자라고있는 버섯이 하나 더 있어서 진짜 너무 무섭고 징그러웠다. 천혜향은 생각보다 예쁘게 잘 자랐다 뿌리도 단단하고 뭔가 나무같은 느낌 그리고 신기했던것이 천혜향 씨앗을 하나만 심었는데 개체가 두개였다는 점이다.(오른쪽의 조그마한것) 안그래도 천혜향 화분을 볼때마다 큰 개.. 2023. 7. 19. 영속성 전이 CASCADE Cascade 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고싶을 때 사용한다. (부모 엔티티 저장시 자식 엔티티도 함께 저장) @Entity class Parent{ ... @OneToMany(mappedBy="parent") private List childList; void addChild(Child child){ this.childList.add(child); child.parent=this; } } @Entity class Child{ @ManyToOne private Parent parent; } Parent, Child 클래스가 있다고 하자. Child child1=new Child(); Child child2=new Child(); Parent parent=new.. 2023. 7. 19. 즉시 로딩과 지연 로딩 Member와 Team이 연관관계로 묶여있다고 할 때, Member를 조회할 때 Team도 조회해야할까? 프록시 개념 필요 2023.07.14 - [JPA] - 프록시 지연 로딩 @Entity public class Member { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="TEAM_ID") private Team team; ... } FetchType.LAZY로 설정하면 프록시로 조회하게 된다. 예를들어 멤버1을 조회하면, 멤버1객체를 가져오고, 멤버1과 관련된 team은 프록시로 가져온다. 이후, team의 속성을 사용하는 시점에 프록시 객체가 초기화되면서 쿼리가 발생하고 team객체를 가져오게 된다. Member와 Team이 가끔씩만 함께 .. 2023. 7. 16. 프록시 em.find() vs em.getReference() em.find는 DB를 통해 실제 엔티티 객체를 조회 em.getRefrence()는 DB조회를 미루는 가짜(프록시)엔티티 객체 조회 프록시? 실제 클래스를 상속받아 만들어져서 실제 클래스와 겉 모양이 같다. 사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용해도 됨(이론상) 프록시 객체는 실제 객체의 참조 target을 보관하고 있음. 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출함. 프록시 객체를 통해 메소드를 호출하면 다음과 같은 순서로 프록시 객체 초기화가 이루어진다. 1. 프록시 객체의 메소드를 호출 2.영속성 컨텍스트에 초기화 요청 3. 영속성 컨텍스트는 DB를 조회하여 실제 객체를 찾음. 4. 조회한 .. 2023. 7. 14. 어제 비가 옴 어제 점심은 뭘 먹었더라 집에 남아있던 찜갈비 몇조각이랑 계란후라이 치킨너겟 냉동떡갈비 좀 구워서 먹었던것 같다 (맛 없었다) 점심먹고 헬스장갔다가(깔짝깔짝 하고 나옴) 나왔는데 비가 억수같이 내렸다. 우산을 안갖고가서 그냥 비 맞으면서 집에 왔다. 이미 다 젖은김에 팔거천 가서 강물 흐르는것 구경도 했다. 그러고 나서 집에서 좀 쉬었다. 내가 챙겨보는 유튜브 채널이 있는데, 야생토끼를 찍어서 올리는 채널이다. 할아버지같은 분이 가끔씩 찾아오는 야생토끼 2마리(흰색,회색)를 찍어서 올리신다. 요근래 토끼들 영상이 안 올라오다가 약 4달만에 새로운 영상이 올라왔다. 흰색 토끼가 오랜만에 돌아와서 기쁘다는 내용이었다. 근데 회색토끼는 영 보이지 않아서 아무래도 안좋은 일이 있거나 먼곳으로 간것같다고 한다. .. 2023. 7. 12. 인스턴트 이치란라멘을 먹다 일본에서 먹었던 돈코츠라멘이 자꾸 먹고싶었다. 생각해보니까 돈키호테에서 이치란라멘을 사왔었다. 5인분 들어있고 이게 아마 천몇백엔 했던거같은데 그럼 한국돈으로 만몇천원 하겠다 (이거 살때 우리나라 라면 생각하고서 5인분에 만원 넘는다는게 좀 비싼거같다고 생각했었음) 까보니 면이랑 스프 고춧가루가 5개씩 들어있다. (면은 1인분씩 나누어져 있음) 물 450ml에 면넣고 2분30초 끓이고, 스프까서 넣으면 끝이다. (감동란 까서 넣고 차슈 대신에 찜갈비 좀 잘라서 넣음) 집에 쪽파가 없어서 못넣은게 좀 아쉬웠고 차슈가 없었던게 좀 아쉬웠다 감동란은 꼭 올려먹자. 신라면 끓이는것보다 간단하고 빠른데, 국물에서 진짜 돼지 묵직한 맛이 나서 놀랐다. 쪽파랑 차슈만 좀 준비해서 먹으면 진짜 파는맛 날듯 그리고 매운.. 2023. 7. 12. @MappedSuperclass 공통 매핑 정보가 필요할 때 사용할 수 있다. MappedSuperclass 어노테이션이 적용된 클래스는 엔티티로 직접 매핑되지 않으며, 데이터베이스 테이블로 생성되지 않는다. 대신, MappedSuperclass 어노테이션이 적용된 클래스를 상속하는 하위 클래스에서 해당 클래스의 속성과 매핑 정보를 상속받아 사용할 수 있다. MappedSuperclass로 지정된 클래스는 공통적으로 사용되는 속성이나 매핑 설정을 정의할 수 있다. 예를 들어, 여러 엔티티 클래스에서 공통적으로 사용되는 생성일자(createdDate)와 수정일자(modifiedDate)를 MappedSuperclass 클래스에 정의하고, 해당 클래스를 상속받는 엔티티 클래스에서는 추가적인 속성만 정의하여 사용할 수 있다. MappedSu.. 2023. 7. 7. 상속관계 매핑 관계형 데이터베이스에서 상속 관계를 구현하는 전략은 주로 다음과 같이 세 가지 방법이 사용된다. 1. 조인 전략 (Join Strategy): 조인 전략은 각각의 서브타입에 해당하는 테이블을 별도로 생성하고, 슈퍼타입과 서브타입 간의 관계를 조인을 통해 맺는 방식이다. 이 전략에서는 슈퍼타입과 서브타입의 속성을 각각의 테이블에 저장하며, 서브타입 객체를 조회할 때 조인을 사용하여 필요한 정보를 가져온다. 이 방식은 데이터베이스 정규화를 지원하며, 서브타입의 추가나 삭제가 용이하다. 하지만 매번 조인이 필요하기 때문에 성능에 영향을 줄 수 있다. 저장공간은 효율화되지만 쿼리가 복잡하다. @Entity @Inheritance(strategy=InheritanceType.JOINED) @Discrimiator.. 2023. 7. 7. 경주 여행(경주월드, 황리단길..) 경주로 감... 차타고 가는데 뒤에 더불어민주당 버스가 6대가 둘러싸서 너무 무서웠다. 경주월드 앞에있는 한식당에 가서 제육볶음과 부대찌개를 시켜먹었다. 맛있었따. 주차장에서부터 보이는 놀이기구들.. 이게 드라켄이었던것같다. 내가 타본 놀이기구 중 가장 재밌었다. (두번 탔는데, 맨앞줄 앉았을때는 재밌었는데 맨뒷줄 앉았을땐 감흥이 별로 없었다) 물 튀는 놀이기구가 몇 있는데, 비옷이 2500원이니 한번 사서 물 튀는 놀이기구를 한바퀴 싹 도는것을 추천. 나는 물배를 세번이나 탔다. (그런데, 다른 물 놀이기구가 있는걸 모르고 세번타고 비옷 갖다버림) 드라켄 말고 재밌었던 놀이기구는.. 메가스윙?( 이월드에도 있는데 그냥 똑같은 놀이기구였음. ) 이곳은 켄싱턴호텔 복도형아파트. 일본스러운 건물이었다. 6명.. 2023. 7. 5. 칠곡의 하루 경주가기 전 날 비는 안왔는데 윗동네에서 흘러온 물이 많았는지 다리가 다 잠겨버렸다 홈플러스 가서 토끼구경 칠곡 사운즈커피 가봤음. 시원하고 가격도 괜찮았던듯. 스벅보다 저렴했다. 탕후루 먹음 생각보다 안시원해서 아쉽 애플포도가 맛있다는데 샤인머스캣으로 사서 아쉽 2023. 7. 5. swagger 작성해보기, Springboot swagger 연동하기 Swagger는 API명세 문서를 작성하는데 도움을 주는 도구이다. https://app.swaggerhub.com/home Build, Collaborate & Integrate APIs | SwaggerHub app.swaggerhub.com 여기서 회원가입 후, create버튼을 눌러 새 문서를 작성할 수 있다. 템플릿 없이 문서를 생성하면 이런 기본 창이 뜬다. https://jsonplaceholder.typicode.com/ JSONPlaceholder - Free Fake REST API {JSON} Placeholder Free fake API for testing and prototyping. Powered by JSON Server + LowDB. Tested with XV. Servi.. 2023. 7. 5. 다양한 연관관계 연관관계 매핑시 고려사항 다중성 단/양방향 연관관계의 주인 다중성 @ManyToOne @OneToMany @OneToOne @ManyToMany (이 중 다대다는 실무에서 쓰지 않는다.) 단방향과 양방향 테이블은 외래키 하나로 양쪽 조인 가능(사실상 양방향) 그러나 객체는 참조용 필드가 있어야 참조가능하다. 한쪽만 참조하면 단방향, 양쪽 서로 참조하면 양방향이다.(사실 각각 단방향인것이긴 하지만..) 연관관계의 주인 테이블은 외래 키가 하나인데, 객체 양방향 관계는 참조가 두군데 있다. 둘 중 테이블의 외래 키를 관리할 곳을 지정해야한다. 연관관계의 주인은 외래키를 관리할 수 있고, 주인의 반대편은 단순 조회만 가능하며 값을 관리할 수 없다. 다대일 이전 포스트를 참고. 다(Many)가 연관관계의 주인이.. 2023. 7. 3. 연관관계 매핑 일대다, 다대일 관계 예시 멤버, 팀 도메인이 있다고 가정하자. 멤버는 하나의 팀에 속할 수 있고, 한 팀에는 여러명의 멤버가 존재할 수 있다. 멤버-팀은 다대일, 팀-멤버는 일대다 관계가 된다. 데이터베이스 테이블에는 다가 되는 멤버쪽에 team_id를 FK로 가지고 있으면 된다. 이런 방식대로 객체를 모델링하면 @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name="username") private String name; private Long teamId; } 이렇게 된다.(Long teamId에 주목) 이 방식은 객체 지향적인 방법이 아니다. 만약, em.find로 member 인스턴스를 가져온 후에, 해당 .. 2023. 6. 30. 엔티티 매핑 객체와 테이블 매핑 @Entity, @Table @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. 기본 생성자가 필수이다. @Entity 속성: name JPA에서 사용할 엔티티 이름을 지정한다. (지정하지 않으면 기본값으로 클래스 이름을 그대로 사용한다) @Table은 엔티티와 매핑할 데이터베이스 테이블을 지정한다. @Table(name=테이블명)으로 사용한다. 데이터베이스 스키마 자동 생성 JPA에서는 애플리케이션 로딩시점에 DB테이블을 생성하는 기능을 지원한다. hibernate.hbm2ddl.auto 속성: create,create-drop,update,validate,none 데이터베이스에 맞는 적절한 DDL을 생성한다. 이렇게 생성된 DDL는 개발에서만 사용(운영서버에서는 사용하지.. 2023. 6. 29. 영속성 컨텍스트 더보기 영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻. 엔티티 매니저를 통해 접근할 수 있다. 엔티티의 생명주기 비영속 영속 준영속 삭제 영속성 컨텍스트의 이점 조회시에 1차캐시를 조회-> 캐시에 있으면 캐시에 있는 값을 바로 반환 ->캐시에 없으면 DB조회 후 1차캐시에 저장 후 객체반환 (그런데, 1차캐시는 한 트랜잭션 내에서만 유효하기때문에 성능상 약간의 이점을 갖는다) 영속 엔티티의 동일성 보장 똑같은 객체를 각각 find한 후, 두 객체를 비교하면 true가 나옴. 같은 트랜잭션 내에서 같은 객체는 동일하다. 트랜잭션을 지원하는 쓰기 지연 영속 컨텍스트 내에는 1차캐시 외에 쓰기 지연 SQL저장소가 있다. 어떤 객체를 영속하면 JPA가 객체를 분석해서 insert 쿼리를 만들어 쓰기 지.. 2023. 6. 29. JPA 기초 이미 JPA를 사용해봤지만 기초를 제대로 배우지 못했다는 생각이 들어 기초부터 다시 차근차근 배우고자 한다. (이번시간에는 간단한 실행만 해보았다) public class Main { public static void main(String[] args) { EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); EntityManager em = emf.createEntityManager(); EntityTransaction tx = em.getTransaction(); tx.begin(); try { // Member member = em.find(Member.class, 1L);//멤버클래스 PK1번 찾아옴 // Syste.. 2023. 6. 29. 엘리멘탈(2023)을 보다 일본여행 다녀온 이후로 계속 마음이 붕 떠있는것같고 공부도 잘 안되고 해서 갑자기 영화를 보러가기로 했다. 스파이더맨이랑 엘리멘탈이랑 고민하다가 엘리멘탈을 보러가기로 함. 2240으로 예약을 해놨는데 생각보다 너무 일찍가서 혼자 롯데리아 가서 데리버거세트 시켜먹음. 이때 남은 콜라를 텀블러에 부어서 가져가서 영화보면서 남은콜라를 먹을 수 있도록 설계했다. 이후 영화관 도착해서 카라멜팝콘을 삼. 5500원이 미디움인데 6000원이 라지길래 라지로 삼. 라지로 산건 좀 실수였다. 너무 커서 영화보는 내내 먹었는데도 삼분의일밖에 못먹었음 -어찌저찌 영화 끝- 처음에 들어가서 앉았는데 웬 UP할아버지 나오는 단편영화가 나오길래 잘못들어온줄 알았다. 할아버지가 새 여자 만나서 첫데이트 하러가는 내용이었다. 왜 만.. 2023. 6. 28. 도쿄 여행(롯폰기 힐즈/오다이바/아키하바라/시부야 스크램블) 첫날(대구공항->나리타공항->센다가야역 숙소->롯폰기힐즈) 대구공항 갈때 택시를 탔다. 처음에는 친절한것같아서 좋았는데 중간에 차가 끼어드니까 클락션3연타 하더니 그때부터 택시기사 흑화함 여기저기 칼치기하고 보호구역으로 지름길타서 드리프트함 (이때 살짝 지릴뻔) 대구공항에서 간단히 아침밥을 먹었다. 본죽이 있길래 새우죽 시켜먹음 역시나 맛있었다. 그리고 공항갔는데 앞에 TBC에서 취재같은거 하길래 신기하다~하면서 보고있었다. 근데 그 아저씨가 나한테 오더니 인터뷰 해달라해서 인터뷰 함. 티비에도 출연함. 일본으로 가는중... 대구에선 비왔는데 일본은 날씨가 좋았다. (나리타 공항 사진) 나리타 공항은 정말 넓었다. 공항이 2개의 건물로 나뉘어있는데 길을 못찾아서 한참을 헤맸다. 마침 길을 헤매던 미국인을.. 2023. 6. 27. 밥풀을 달고 나간 날 밥풀을 달고 하루종일 돌아다녔다. 내가 밥먹다가 밥풀을 단게 아니라 이날 조카가 집에 놀러왔는데 조카가 밥먹다가 내옷에 붙인것같다. 그것도 모르고 스터디카페도 가고 홈플러스도 가고 산책까지 했다. 그래도 부끄럽진 않았다. 아무도 신경 안쓸것같기 때문이다. 나도 별 생각이 들지는 않았다. 2023. 6. 19. 배낭 채우기 문제 n개의 물건이 있다. 각 물건은 무게와 가치가 정해져있다. 무게는 w[n]={...}, 가치는 p[n]={...}이다. W = 배낭에 넣을 수 있는 총 무게라고 할 때, "W 2023. 6. 18. 이전 1 ··· 3 4 5 6 7 8 9 ··· 33 다음 728x90