토이 프로젝트 게시판을 구현하면서 CRUD의 Update를 구현할 일이 있었다.update를 구현하면서 내가 원하는 동작은 테이블에서 하나의 컬럼만(이름) 수정하는 것이었지만, update query가 나갈 경우 이름을 제외한 다른 값들이 null처리가 되었다.이에 따라 공부를 하던 중 더티체킹(변경감지), 벌크연산의 차이에 의해 발생한 부분이었고, 이 둘의 차이점과 더 나은 코드 퀄리티를 유지하는 방법에 대해 작성하게 되었다. [들어가기에 앞서]update 할 데이터를 설정하는 경우, builder 패턴과 setter 사용법 중 나의 경우 @Builder 패턴을 즐겨 사용했지만, 변경감지일 경우만 @Setter를 사용했다. 다음은 Builder와 Setter에 대한 인프런 서포터즈님의 의견이다.JPA..
JPA 엔티티 사용 시 발생한 에러에 대해 다루고, @JsonIgnore이 아닌 DTO와 @Projection을 활용한 해결방법을 제시한다. 에러내용 serializer found for class -org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer..... 엔티티[엔티티]...-> [엔티티]... 블라블라~.. 오류 발생원인 순환참조로 인한 오류 JPA에서 엔티티 매핑을 하는 경우 엔티티 파일이 서로 참조하는 대상이 서로 물려 있어서 참조할 수 없게 되는 현상을 말한다. 순환참조가 발생하는 이유 Spring Boot는 @ResponseBody를 선언 할시 O..
JPA + S3 조합으로 S3에 파일 올리는 것은 예제가 많이 있는데 JPA + S3 + DB에 저장한 값 불러와서 실제로 사용할 수 있는 예제는 많이 없었다 그래서 글을 작성하게 되었다. 나의 경우는 팀 프로필 변경 건에 대한 API를 만들어보았다. 1. 코드 예제에서 import는 생략하니 실제로 사용하려면 import선언정돈 직접 하자 2. AMI랑 S3이용해서 만드는건 구글 검색하면 엄청 나오니까 이건 다른 포스팅 참고 Application.yml의 기본설정 # ------- 파일 업로드 시작 ---------- spring: servlet: multipart: enabled: true # 임시 저장경로 - 파일 확장자 체크 max-request-size: 100MB max-file-size: 1..
사이드프로젝트를 하면서 검색조건에 따른 검색 쿼리를 개발하였다. 검색쿼리를 개발하는 데에 있어서 다양한 방법이 있었지만 나의 경우는 jpql보단 Querydsl 를 활용하였고, Where조건보단 BooleanBuilder를 활용하여 보다 관리하기 편하도록 했고, DTO에 전달할 값을 명시하여, API통신할 때 전달 데이터를 정의하였다. 위의 방법에 따라 작성한 글이다. 🚨 들어가기에 앞서... | Querydsl, DTO, BooleanBuilder를 사용한 이유 JPQL이 아닌 Querydsl를 사용한 이유 Querydsl은 JPQL 빌더이다. 솔직히 아무거나 사용해도 상관없는데 실제로 회사에서 일해보니까 Querydsl이 코드 지향적이라 관리하기 편했다 JPQL 같은 경우는 코드가 커질 경우 JPA,..
오늘 다룰 주제는 ec2를 구축하고 나서 일주일 뒤 서버 다운되는 현상에 관련된 글이다.. 🚨 간헐적으로 ec2 서버 다운 되는 현상 ec2 서버를 구축하고 열심히 개발하고 있던 어느 날 API서버에 접속이 되질 않았다. 정확하게는 서버를 구동하고 백엔드와 프론트엔드를 배포했을 때 약 1시간 주기로 서버가 다운되었다. 무슨 일인가 싶어 AWS와 SSH를 확인해보니 인스턴스 상태 검사 에서 에러가 발생했다. 나의 기존 ec2 인스턴스에는 프런트엔드(리액트)와 백엔드(스프링부트)가 돌아가고 있었는데 프런트엔드와 백엔드를 실행하면서 오류가 발생했는지 오류 검증을 위한 시나리오를 세우기 시작했다. # 시나리오 T. 프론트엔드 실행 및 가각의 로그인 백엔드 API 호출 R. 특정 API 호출 시 서버 다운 T. ..
하루종일 삽질을 하면서 나 같은 사람이 있을 거라는 생각이 들어 글을 작성하게 되었다. 글에 들어가기 전 참고용 구성할 환경: 로컬/개발 서버: AWS EC2 1개 개발서버용 (백엔드, 프런트) DB: H2(로컬) AWS RDS(개발) CI/CD: 깃허브액션 회원가입: JWT CI/CD는 깃허브액션을 사용했고, 회원가입 부분에서 JWT를 이용해 application-oauth.yml에서 시크릿 키들을 정의했다. ssh에 접속해서 resources/ 경로에 vim 명령어를 통해 application-oauth.yml를 생성 및 키 값들을 포함한 내용 작성을 해주었다. nohup java -jar. jar --spring.profiles.active=dev & 명령어를 통해 백엔드를 배포할 때 applica..
즉시로딩과 지연로딩에 대해 정리해 보았다. 즉시로딩과 지연로딩을 어떤 상황에서 사용하는지, 왜 사용하는지에 대한 정리 글이다. 먼저 즉시로딩과 지연로딩을 알기 위해선 JPA의 프록시에 대한 개념을 알아야 한다. 여기서는 즉시로딩과 지연로딩에 대한 글이므로 프록시는 아래 글을 통해 간단하게 알아보고 즉시로딩과 지연로딩을 이해하도록 하자. 목차 1.프록시란 2.지연로딩 3.즉시로딩 1. 프록시란? 프록시 정의 대리, 가짜라는 의미를 가지고 있는 proxy. 프록시 사용이유 ex) Member 엔티티를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 필요하지 않을 때를 구분해야 한다. ⭐️ 낭비가 발생하게 된다. JPA는 이 낭비를 하지 않기 위해, 지연로딩과 프록시라는 개념으로 해결한다. 프록시..
AWS EC2 서버에서 프런트엔드를 띄우려던 중 발생한 오류이다. 최종적으로 npm run start를 하길 원하고 이 과정에서 발생한 오류들에 대해 해결방법을 남겨보았다. * 나의 경우는 프론트엔드 release브런치로 push 할 경우 github action - S3 - CodeDeploy - EC2의 과정을 진행한다. 이경우는 백엔드와 프론트에 모두 적용되었다. ⬇️ 참고 내용 2022.12.16 - [4. hellomyteam 개발일지] 서버/것 허브액션을 구축하며 느낀 점들 정리 1. 서버와 로컬 버전 확인 및 맞추기 로컬과 서버환경의 node와 npm의 버전확인 1. 로컬 터미널에서 npm 버전 체크 npm -v 2. 로컬 터미널에서 node 버전 체크 node -v 3. 서버 ssh 터미널..
- Total
- Today
- Yesterday