본문 바로가기
728x90
반응형

전체 글647

황폐한 뿌리, 아보카도의 비극 최근 들어 영 자라지 않고 잎 끝부터 타들어가던 아보카도 무엇이 문제일까 유심히 지켜봤다 물을 자주 안 갈아줬더니 뿌리 잔해 같은 부유물이 떠다니고 물이 좀 탁해진 것 같았다. 근데..... 뿌리 잔해같은 부유물이.... 자꾸 위아래로 흔들리는 것이다. 난 화분을 건드리지 않았는데... 장구벌레였다. 5급 썩은물에 산다는 장구벌레가 내 화분에 산다는 것이 충격적이었다. 바로 들고나가서 물 다 버리고 깨끗한 물로 헹궜다. 자세히 보니 뿌리도 절반이상 썩어버렸길래 다 뜯어버렸다 얼마 전 흙 화분에서는 버섯이 자라더니 이번엔 장구벌레 난리다 관리 제때 안 해준 내 잘못이지만 이젠 더 이상 식물이든 뭐든 안 키우고 싶다 2023. 8. 11.
뚜레주루에서 빵을 산 날 오늘은 뭐랄까 좀 신기한 하루였다. 10시 30분쯤에 일어났었던것 같다. 왜이렇게 늦게 일어났냐면 난 선풍기를 항상 120분 예약으로 틀어놓는데(계속 틀어놓으면 감기걸릴까봐) 선풍기가 꺼질때마다 더워서 깨고 선풍기 120분 예약 걸어놓고 또 선풍기 꺼지면 깨고... 반복하면서 잠을 많이 설쳤기 때문에 너무 피곤해서 더 잤다. 그러고선 일어나자마자 뜬금없이 고깃집에 가서 점심특선으로 돼지갈비를 구워먹었다. 그리고 운동을 하고 집에 왔는데 집앞에 뚜레주루가 오픈했다는 전단지가 붙어있었다 근데 좀 의아했다 집앞 뚜레주르는 내기억상으로 10년전부터 쭉 있었고 문 닫은적이 없었다. 맨날 지나치며 보는 뚜레주루인데 오픈기념으로 할인한다는 전단지를 보고 이게뭐지 한참을 생각했다 아직도 왜그런진 모르겠다. 그리고 스터.. 2023. 8. 9.
칠보산 자연휴양림 (23.08.04. - 23.08.06) 소떡소떡 먹으며 출발 대구에서 무려 2시간넘게 걸린다 산을 계속 구비구비 올라감 도로폭도 좁고 커브구간에서 맞은편에 차가 올까봐 무서웠다 아주 산 중턱에 있어 나무들이 우거짐 숙소는 이런 느낌 근데 원룸이다. 거실 하나에 화장실 하나가 끝 벌레도 참 많았는데 예쁜 나비도 있었다. 이런 나비 얼마만에 보는거지? 이렇게 알록달록 예쁜 나비는 살면서 처음 본 것 같다. 귀여운 고양이가 있었는데 뽀송뽀송하고 사람을 안무서워하더라 먼저 다가와서 머리를 비벼댔다. 저 멀리 바다가 보인다 속 시원한 경치 바베큐도 해먹었다 고기는 초지일밋에서 파는 송아지고기 티본스테이크 송아지고기라 그런가 부드러운 맛이 있다. 조카들이랑 마시멜로 도원결의. (이후 숯불에 구워먹음) 다음날 해수욕장에 갔다 애들 놀기 좋을정도로 얕은데 .. 2023. 8. 7.
부산 (23.08.02. - 23.08.03) 부산에 살고있는 J군. 최근 일본여행을 가려다가 배를 놓쳐 여행을 취소하게 되었다는데. 그 여파로 정신병이 온 듯해서 구경하러 갔다. 동대구역에 도착. 동대구역하면 떠오르는 생각 나는 군생활을 대구에서 했는데 간간히 수도권에 살던 친구들도 있었다. 나는 대구가 낯선 친구한테 동대구역 진짜 크다고 자랑하듯 말했다. (동대구역에 붙어있는 신세계백화점 포함하면 전국에서 가장 큰 역이라는 정보가 있었음) 별로 자랑거리가 아니란걸 말하고 나서 깨달았다. (별 얘긴 아님) 삼송빵집 가서 한우고로케 한개 먹었다. 맛있었고, 오븐에 구웠다는 사실은 몰랐었는데 먹으면서 보니 안 기름져서 좋았다. 부산역 도착 난 다이나믹 부산이 좋은데 부산이즈굿으로 바꿨구나 점심으로 장승진 스시 먹으러 옴 정말 오랜만에 보는 회전초밥집이.. 2023. 8. 7.
영천 치산관광지 (23.07.23. - 23.07.24.) 자연으로 구비구비 들어가야 한다 영천인데 왜 부산교회지 신기해서 찍었다. 카라반들이랑.. 뒤에는 집이 있음. 집은 이렇게 생겼다 2층 다락방은 천장이 너무 낮아서 앉아서 이동해야 한다. 옆에는 얕은 물가가 있다. 깊은곳은 골반까지 물이 차는데, 계곡이 좁고 물살이 세서 놀기에는 좀 아쉬운면이 있었다. 그리고 계곡이라 물이 차가운 편. 저녁에는 고기를 구워먹었다. 고기는 무려 송아지고기. 티본스테이크와 토마호크 스테이크. #초지일밋 맛있고 부드러우니 다들 한번씩 사먹어보길. 고기냄새 맡고 고양이가 왔다. 왜인지 자꾸 생닭모양으로 앉아있었다. 가서 뭘 했는지 기억이 잘 나진 않는데 나오기 직전 베트남컵라면을 먹었던 것이 사진으로 남아있다. 2023. 8. 7.
파일 업로드 구현하기 게시물 작성시 파일을 업로드할 수 있게 하고, 게시물 조회시 업로드한 파일을 보고, 다운로드받을 수 있도록 해보자. 1. 파일 업로드 화면 만들기 ... Upload save 게시물 작성 화면에 파일 업로드 input을 생성한다. ``` 2023. 7. 27.
네이버 검색 API를 이용하기 외부 API를 이용해보는 경험을 쌓고자 백과사전 검색기능을 프로젝트에 추가해보기로 했다. 네이버 검색(백과사전) API를 이용해서, 검색어를 입력하면 검색결과를 보여주도록 만들어보자. 사전 준비 https://developers.naver.com/docs/serviceapi/search/blog/blog.md#%EB%B8%94%EB%A1%9C%EA%B7%B8 검색 > 블로그 - Search API 검색 > 블로그 블로그 검색 개요 개요 검색 API와 블로그 검색 개요 검색 API는 네이버 검색 결과를 뉴스, 백과사전, 블로그, 쇼핑, 영화, 웹 문서, 전문정보, 지식iN, 책, 카페글 등 분야별로 볼 수 developers.naver.com 위 링크로 접속해서, API 이용방법을 숙지. (로그인 후 이용.. 2023. 7. 26.
검색 기능 적용하기 게시물을 제목으로 검색할 수 있는 기능을 만들어본다. (페이징 적용) 검색 기능 적용하기 1. Repository public interface ArticleRepository extends JpaRepository { ... Page findByTitleContaining(String keyword,Pageable pageable); } JpaRepository를 상속받는 레파지토리 인터페이스에, findBy{필드명}Containing({타입} 검색어) 형식으로 메소드를 작성한다. 나는 Article엔티티에 String타입의 title이 있고, 이 title을 이용해서 검색할것이기 때문에 findByTitleContaining(String keyword) 로 작성했다. 그럼, title필드에 keywo.. 2023. 7. 26.
페이징 기능 적용하기 예전에 혼자 만들던 프로젝트에 페이징기능과 검색기능을 추가해보기로 했다. (1로 표시해놓은 페이지 전환버튼까지 적용함. 2번은 게시물 검색기능인데 이건 다음 글에서...) 페이징 1. Repository public interface ArticleRepository extends JpaRepository { ... Page findAll(Pageable pageable); } JpaRepository를 상속받는 레파지토리 인터페이스에서, 메소드 파라미터로 Pageable을 넣으면 Page로 엔티티를 반환받을 수 있다. Pageable은 SpringDataJPA에서 제공하는 인터페이스로, 페이지 번호, 페이지 크기, 정렬 기준 등의 정보를 가지고 있다. Page는 SpringDataJPA에서 제공하는 인터.. 2023. 7. 26.
JPQL JPQL(Java Persistence Query Language) 기본 문법과 기능 JPQL은 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL로 변환된다. select m from Member as m wehere m.age > 18 기본적인 문법은 SQL과 거의 동일하다. 유의할 점 - 엔티티와 속성은 대소문자를 구분한다. - 테이블 이름이 아닌 엔티티 이름을 사용한다. - 별칭이 필수이다. TypeQuery: 반환 타입이 명확할 때 Query: 반환 타입이 명확하지 않을 때 TypedQuery query = em.createQuery("select m from Member m", Member.class); TypedQuery query1 = em.createQuery("select m.usern.. 2023. 7. 22.
JPA가 지원하는 다양한 쿼리 방법 JPA는 다양한 쿼리 방법을 지원한다. JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL JPA를 사용하면 엔티티 객체를 중심으로 개발하는데, 검색을 할때도 테이블이 아닌 엔티티 객체를 대상으로 검색할 수 있어야한다. 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능하므로 결국 검색 조건이 포함된 SQL이 필요하다. JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다. SQL과 문법이 유사하지만 JPQL은 엔티티 객체를 대상으로 쿼리하고, SQL은 데이터베이스 테이블을 대상으로 쿼리한다는 점이 다르다 JPQL은 객체 지향 SQL이라고 말할 수 있다. List resu.. 2023. 7. 22.
chatgpt api를 이용해보다 https://platform.openai.com/docs/libraries/community-libraries OpenAI Platform Explore developer resources, tutorials, API docs, and dynamic examples to get the most out of OpenAI's platform. platform.openai.com 여기 openAI 홈페이지에서 api사용법이랑 다 나와있다. 라이브러리도 많이 나와있는데, https://github.com/TheoKanning/openai-java GitHub - TheoKanning/openai-java: OpenAI Api Client in Java OpenAI Api Client in Java. Contr.. 2023. 7. 20.
[Springboot] Jsoup라이브러리를 이용하여 크롤링하기 크롤링해서 현재 날씨와 기온을 가져와보자.. (아래 문장은 chatgpt api를 이용해서 만든건데.. 현재 서비스중인 chatGPT3.5보다 더 형편없는듯한 답변이..) //크롤링 implementation 'org.jsoup:jsoup:1.15.3' 크롤링을 위해 jsoup 라이브러리를 사용한다. build.gradle 파일에 dependencies에 위 코드를 추가한다. @Getter @Builder public class Weather { private String condition; private String temperature; } 날씨와 온도 정보를 저장하기 위해서 Weather클래스를 정의했다.(예시) 그리고 WeatherService라는 서비스 클래스를 만들었고, getWeather메소.. 2023. 7. 20.
값 타입 JPA는 데이터 타입을 엔티티 타입과 값 타입으로 분류한다. 엔티티 타입은 @Entity로 정의한 객체 엔티티의 속성이 변경되면 식별자(id)로 인식 가능함 ==> 데이터가 변경돼도 식별자로 추적 가능 값 타입은 int, Integer, String같은 기본타입 식별자가 없고 값만 있으므로 변경시 추적불가 값 타입의 분류 기본값타입 임베디드 타입 컬렉션 값 타입 기본값타입 자바 기본 타입(int, double), 래퍼 클래스(Integer,Long), String 생명주기를 엔티티에 의존함. 값 타입은 공유하면 안됨.(만약 회원1과 회원2가 속성으로 값타입을 공유하면 회원1이 속성을 변경했을 때 회원2도 같이 적용되겠지) (근데 래퍼클래스, String등은 변경이 불가능하기때문에 문제없음) 임베디드 타입.. 2023. 7. 19.
캘리포니아 비치의 추억(바른마음 합기도) 친구가 다니는 합기도에서 단체로 놀러가는데 (초등학생들 대거 존재) 어른은 몇 없긴하지만 나도 껴서 같이가기로 했다. 합기도 이름이 아마 바른마음합기도 였던것같음. (옆에서 그냥 앉아있으면서 좀 봤는데 여기 관장님께서 아이들을 잘 챙기시고 아주 친절하시다. 여기서 일하는 사범님들도 아이들 잘 챙기고 친절하고 애들이랑 많이 친해보였다.) 버스에서 과자도 먹고... 했다. 그와중에 비가 세차게와서 좀 걱정. 10시 전에 도착해서 좀 기다리긴 했지만 10시 딱 지나니까 숙숙 들어갔다. 입장하면 비치코인 환전소가 있다. (사진은 까먹고 안찍음) 캘리포니아비치 내부에서 사용할 수 있는 바코드에 돈을 충전해놓고서 음식사먹거나 할 때 팔찌바코드로 돈 지불할 수 있다. 다 못쓴건 일주일후에 환불된다니까 난 5만원 함 .. 2023. 7. 19.
칠성야시장의 추억 이날 조카보러 갔는데 자기가 모은 포켓몬스티커 자랑하길래 구경했다 서문시장 가는 길목이 운치있어서 한번 찍어봤다. 원래 서문시장 야시장에 가려고 했는데 갔더니 휑하고 아무것도 없길래 찾아봤더니 무슨무슨 요일에는 서문시장야시장을 열고 나머지 무슨무슨 요일에는 칠성야시장이 열린다고 한다. 그래서 급하게 택시타고 칠성야시장으로 갔다. 삼겹말이 치킨,막창,닭꼬치,돼삼겹말이 시켰다. 개인적으로 양념막창이 참 맛있었다 (사장님도 친절) 그나저나 앞에 취객 할아버지가 한명 있었는데 내가 막창 만원짜리 시키니까 옆에서 보고있다가 자기였으면 만원이 아니라 2만원을 냈을거래나 뭐래나 하면서 시~발시발 욕까지 하면서 뭔가 열심히 말을 하심 (뭔 말을 했는지는... 모르겠음. 말을 너무 천박하게해서 발음이 잘 안들렸음. 한국.. 2023. 7. 19.
버섯이 자라다(버섯 풍년) 하루이틀 화분을 안봤을 뿐인데 그새 손가락만한 버섯이 자랐다. 마음같아선 버섯도 키우고싶었는데 버섯이 다른 화분까지 침투할까봐 무서웠다 그래서 버섯이랑 저 화분에 있던 흙까지 다 갖다버렸다. 저 갓의 아랫부분이 자글자글한게 소름이 돋는다 가만보면 화분에서 막 자란것 치고 예쁘게 자랐다 근데 출처불명, 정체불명의 버섯이 자랐다는점때문에 저 버섯이 좀 무섭다 그리고 흙 처리하려고 저 초록화분을 들었는데.. 아래 물받침대에서 물 빨아들이면서 자라고있는 버섯이 하나 더 있어서 진짜 너무 무섭고 징그러웠다. 천혜향은 생각보다 예쁘게 잘 자랐다 뿌리도 단단하고 뭔가 나무같은 느낌 그리고 신기했던것이 천혜향 씨앗을 하나만 심었는데 개체가 두개였다는 점이다.(오른쪽의 조그마한것) 안그래도 천혜향 화분을 볼때마다 큰 개.. 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.
728x90
반응형