본문 바로가기

웹 개발98

스프링 데이터 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.
Jest 테스트 작성법 테스트 설계 및 방향 Controller -> Service -> Repository 현재 KLUB 프로젝트는 설계 방향은 위와 같이 Controller에서 Service를 호출하고 다시 Service에서 Repository를 호출하는 방향으로 설계되어 있습니다. Jest로 테스트를 진행할 부분은 Controller와 Service 파일인데 Controller를 테스트하는 경우 Controller 자체의 기능에 집중하기 위해서 Service를 모킹하고 Service를 테스트하는 경우 Repository를 모킹함으로써 격리된 환경에서 테스트를 진행할 수 있습니다. klub 프로젝트는 프론트에서 e2e 테스트를 진행해주기 때문에 백엔드에서는 통합 테스트를 보다는 단위 테스트를 먼저 진행합니다. Jest로 진.. 2023. 7. 27.
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.
배포 관련 링크 창고 Minumal UI Kit https://minimal-kit-react.vercel.app/dashboard/app Minimal UI Kit minimal-kit-react.vercel.app CORS 문제 https://shared.tistory.com/188 짜증나는 CORS(Cross Origin Resource Sharing) 오류 프론트엔드 개발자도 아니지만 웹서비스 관련 코드를 조금 만져야하는 위치에 있는지라 얇은 지식으로 근근히 버티고 있다. 지난번에 브라우저 관련해서 코드를 수정하다가 CORS 이슈를 알게되 shared.tistory.com https://velog.io/@suasue/NestJS-CORS-%EC%84%A4%EC%A0%95 NestJS | CORS 설정 프론트에서 난 에.. 2023. 6. 24.