웹 개발/블로그 만들기 프로젝트20 스프링 데이터 JPA - @EntityGraph 사용 및 Page로 받아오기 @Query("SELECT p FROM Post p JOIN FETCH p.writer WHERE (:search IS NULL OR p.title LIKE %:search%) AND (:writer IS NULL OR p.writer.uid = :writer)") List findAllWithFetchJoin(String search, String writer, Pageable pageable); long count(); @Query("SELECT COUNT(p) FROM Post p WHERE :search IS NULL OR p.title LIKE %:search%") long countBySearch(String search); 조금씩 레포지토리에 조건이 추가되다 보니깐 점점 복잡해지는 느낌이 든.. 2023. 11. 19. 패치 조인, 인덱싱, 캐싱 적용 및 성능 실험 public List getPostService(String search) { List findPosts = (search == null) ? postDataRepository.findAll() : postDataRepository.findAllByTitleContaining(search); List postList = new ArrayList(); for (Post e : findPosts) { AllPostsResponseDto allPostsResponseDto = AllPostsResponseDto.builder() .postId(e.getId()) .title(e.getTitle()) .writer(e.getWriter().getUid()) .createDate(e.getCreateDate()).. 2023. 9. 6. 이팩티브 자바 따라하기 요즘 여유가 생겨서 한달 전에 사놨던 이펙티브 자바를 읽기 시작했다. 책에는 아이템이 90개 정도 있는데 1번 부터 순서대로 읽어보고 내 블로그 만들기 프로젝트에 적절한 내용이면 아이템들을 적용하는 방식으로 공부하려고 한다. 하루에 아이템 3개씩 하면 괜찮지 않을까 예상해본다. 일반 자바 책보다 내용이 깊고 생각해야할 부분이 많아서 아이템 3개도 많다. 유지만 하면 30일 만에 책 한권을 끝낸다는 목표이다. 아이템 1. 생성자 대신 정적 팩터리 메서드를 고려하라 -> 이미 전부다 빌더 패턴을 사용하고 있어서 생성자는 사용하고 있지 않다. -> 기본 생성자는 사용하지 않는 경우 protected로 설정해서 사람들이 해당 클래스는 생성할 수 없다는 것을 인식하도록 하자. 아이템 2. 생성자에 매개변수가 많다.. 2023. 8. 11. git action을 이용한 자동 배포 처음에는 젠킨스를 통해서 자동 배포를 하려 했으나 배보다 배꼽이 큰 느낌이 나서 더 간단하게 자동 배포를 할 수 있는 git action을 사용하기로 했다. 젠킨스를 사용하려면 프리티어 메모리로는 용량이 부족해서 swapfile을 만들어서 메모리 자원을 늘리는 방식으로 진행하였다. gui 환경에서 편하게 배포를 관리할 수 있었으나 아무래도 조금 개인 프로젝트에서 사용하기에는 부담스러웠다. 젠킨스는 아래 블로그를 참고하였다. https://velog.io/@appti/Jenkins-CodeDeploy%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-EC2%EC%97%90-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B6%80%ED%8A%B8-%ED%94%84%EB%A1%9C%.. 2023. 7. 23. Jwt 적용하기 블로그 만들기 프로젝트에서 Jwt를 어떻게 생성하고 사용하는지를 공유하려고 한다. 처음에는 자바 스프링을 시작하면서 Jwt를 사용하려 했지만 코드를 작성해야하는게 많고 어려워서 쿠키,세션으로 로그인 기능을 구현했었다. 쿠키, 세션으로 로그인을 구현하는 방법부터 설명하겠다. Cookie idCookie = new Cookie("memberId", String.valueOf(loginMember.getId())); response.addCookie(idCookie); 코드는 위와 같이 키 값으로 적당한 변수를 만들어 넣어주고 보내주면 사용자가 해당 쿠키를 받아서 사용자의 권한으로 로그인할 수 있었다. 그러나 요즘에는 쿠키를 잘 사용하지 않는다고 한다. 이유는 다음과 같다. 보안 문제 -> https://le.. 2023. 7. 5. aws 비용 줄이기 처음에는 내 코드가 문제인가 싶어서 base64로 저장하던 이미지를 s3 서비스에 저장하고 이미지 미리보기를 한번에 모두 가져오던 것을 한 페이지씩 가져오는 등 노력을 쏟아부었는데 한달에 오천원이던 비용이 오히려 한달에 2만원 가까이 비용이 올라갔다. 결국 청구서를 하나씩 세세하게 뜯어 보았다. 첫번째로 로드 밸런서에서 거의 만원 가까이 나갔다. 로드 밸런서는 프리티어를 사용하면 750시간이 무료인데 왜 돈이 만원이 넘게 나갔을까 확인하다가. 프론트와 백엔드를 각각 로드밸런서를 설정해서 2개의 로드밸런서를 생성했기 때문에 750시간을 넘어서 하루에 각각 500원씩 추가되어 한달에 마지막 15일동안 만오천원이 결제되는 것이었다. https를 프론트, 백엔드로 나눠서 각각 로드밸런서를 적용해야 하는 줄 알았.. 2023. 7. 4. toast ui vs React-Quill 블로그에서 에디터를 두개 중 뭘 써야할지 고민하다가 결국 toast ui를 사용하기로 했다. 사실 React-Quill을 사용하면 이미지 크기를 마우스 드래그로 편하게 조절할 수 있어서 더 좋은데 toast ui처럼 그냥 사진을 붙여넣기 하면 자동으로 이미지 핸들러가 작동해서 핸들러 함수에서 백엔드로 이미지 데이터를 넘겨주면 정말 좋을텐데 React-Quill에는 제공하는 이미지 핸들러가 없어서 내가 직접 구현해야 하는데... 너무 귀찮다... toast ui에서 이미지 크기를 조절하면 되잖아?? 그런데 toast ui는 이미지 조절 옵션을 제공하지 않는다. 그래서 직접 또 구현해야하는데 React-Quill에서 이미지 핸들러를 어떻게 동작하게 할 것인가가 더 쉬워보여서 반나절 정도 도전했는데 결국 실패.. 2023. 6. 29. https 적용(Route 53, ACM, 로드밸런서) 오늘 하루를 https를 적용하는데 써버렸다.. 처음 목표는 github.io로 프론트 서버를 돌리고 백엔드는 ec2에서 돌리는데 도메인을 구입해서 github에서 설정을 잘 해서 예쁘게 만들려고 했지만 도메인을 적용하면 ec2 프론트 엔드 서버로 자꾸 리다이렉트 돼서 그냥 돈을 조금 더 내더라도 ec2로 프론트를 돌리기로 했다. 도메인 구매 오늘 사용한 aws 서비스는 ACM(AWS Certificate Manager), Route 53, 로드밸런서 이렇게 3가지 서비스를 사용하였다. hosting.kr에서 도메인을 1년짜리를 5천원이었나 구입하였다. 무료 도메인을 사용하고 있었는데 내도메인.한국 사이트에서 무료로 제공하는 도메인은 ssl 인증이 안된다고 알고 있어서 결국 유료로 도메인을 구매했다. 구.. 2023. 6. 6. 블로그 만들기 지금까지 한거 총정리 블로그 만들기 프로젝트를 시작한지 꽤 된 것 같은데 어찌저찌 여기까지 온게 신기하다. https://lemonsoju.blog/ http://lemonsoju.kro.kr/ 창규's 블로그 lemonsoju.kro.kr 도메인 도메인은 "https://내도메인.한국" 이라는 사이트에서 도메인을 발급 받았다. 도메인은 당연히 유료일 줄 알았는데 무료여서 너무 좋았다. 프론트엔드 프론트는 리액트를 공부하고 나서 뭔가 날 것 그대로의 지식들을 가져와서 조금씩 붙이면서 동작시켰는데 특히 css 부분은 일일이 폰트부터 글씨 크기까지 직접 타이핑을 하다가 mui라는 리액트에서 가장 유명한 css 라이브러리를 사용해서 깔끔하게 디자인 했다. 프론트는 열심히 할 생각이 없었는데 우연히 klub 팀에 프론트엔드 역할로 .. 2023. 5. 17. 이전 1 2 3 다음