[6. 토이프로젝트 개발일지] 중간점검
·
✍🏻/일지록
❤️ 개발자의 고민과 서비스에 관한 내용이 적혀 있습니다. 🚨 넋두리가 있을 수 있습니다. 오랜만에 적는 헬로우마이팀 개발일지. ver1.0의 배포 일은 3월 1일이었는데 개발 일정이 밀려 배포일이 미뤄졌다. 프런트엔드 기존 멤버로 들어오셨던 분이 통보와 함께 탈주를 하시는 바람에 그분이 하셨던 내용을 다른 프런트엔드 분이 다시 해야 했다. 프런트 개발 일정이 많이 밀려 프론트 엔드 2분을 뽑았고, 현재 프론트 3명과 백엔드 1명이서 작업을 진행하고 있다. 앞선 글을 보면 백엔드 2명이었는데 왜 1명이라고 적었냐고 궁금해하는 분도 있을 것 같다. 다른 백엔드 개발자도 회원가입 기능을 개발하고 나서 회사의 업무가 바빠져 잘 참석을 못하고 있다. 양해를 구하셨고 회사의 업무가 우선적인 것도 잘 알기에 배려차..
[JPA] JPA에서 update하는 방법, 더티체킹과 벌크연산
·
💻 개발/JPA, Querydsl
토이 프로젝트 게시판을 구현하면서 CRUD의 Update를 구현할 일이 있었다.update를 구현하면서 내가 원하는 동작은 테이블에서 하나의 컬럼만(이름) 수정하는 것이었지만, update query가 나갈 경우 이름을 제외한 다른 값들이 null처리가 되었다.이에 따라 공부를 하던 중 더티체킹(변경감지), 벌크연산의 차이에 의해 발생한 부분이었고, 이 둘의 차이점과 더 나은 코드 퀄리티를 유지하는 방법에 대해 작성하게 되었다. [들어가기에 앞서]update 할 데이터를 설정하는 경우, builder 패턴과 setter 사용법 중 나의 경우 @Builder 패턴을 즐겨 사용했지만, 변경감지일 경우만 @Setter를 사용했다.  다음은 Builder와 Setter에 대한 인프런 서포터즈님의 의견이다.JPA..
[JPA] Lazy 로딩 Jackson Serialize 에러, @JsonIgnore말고 더 나은 방법 제시
·
💻 개발/JPA, Querydsl
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..
[Spring][JPA] JPA + S3 + DB 사용해서 파일 업로드 하기
·
💻 개발/프레임워크
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..
[Querydsl] Querydsl과 DTO와 BooleanBuilder를 활용하여 조회하기
·
💻 개발/JPA, Querydsl
사이드프로젝트를 하면서 검색조건에 따른 검색 쿼리를 개발하였다. 검색쿼리를 개발하는 데에 있어서 다양한 방법이 있었지만 나의 경우는 jpql보단 Querydsl 를 활용하였고, Where조건보단 BooleanBuilder를 활용하여 보다 관리하기 편하도록 했고, DTO에 전달할 값을 명시하여, API통신할 때 전달 데이터를 정의하였다. 위의 방법에 따라 작성한 글이다. 🚨 들어가기에 앞서... | Querydsl, DTO, BooleanBuilder를 사용한 이유 JPQL이 아닌 Querydsl를 사용한 이유 Querydsl은 JPQL 빌더이다. 솔직히 아무거나 사용해도 상관없는데 실제로 회사에서 일해보니까 Querydsl이 코드 지향적이라 관리하기 편했다 JPQL 같은 경우는 코드가 커질 경우 JPA,..
[5. 토이프로젝트 개발일지] ec2 서버 다운되는 현상 발생
·
✍🏻/일지록
오늘 다룰 주제는 ec2를 구축하고 나서 일주일 뒤 서버 다운되는 현상에 관련된 글이다.. 🚨 간헐적으로 ec2 서버 다운 되는 현상 ec2 서버를 구축하고 열심히 개발하고 있던 어느 날 API서버에 접속이 되질 않았다. 정확하게는 서버를 구동하고 백엔드와 프론트엔드를 배포했을 때 약 1시간 주기로 서버가 다운되었다. 무슨 일인가 싶어 AWS와 SSH를 확인해보니 인스턴스 상태 검사 에서 에러가 발생했다. 나의 기존 ec2 인스턴스에는 프런트엔드(리액트)와 백엔드(스프링부트)가 돌아가고 있었는데 프런트엔드와 백엔드를 실행하면서 오류가 발생했는지 오류 검증을 위한 시나리오를 세우기 시작했다. # 시나리오 T. 프론트엔드 실행 및 가각의 로그인 백엔드 API 호출 R. 특정 API 호출 시 서버 다운 T. ..
[Spring] application-oauth.yml를 .gitIgnore에 등록하지않고 보안을 유지하고, 깃허브 액션을 사용해서 빌드 방법
·
💻 개발/프레임워크
하루종일 삽질을 하면서 나 같은 사람이 있을 거라는 생각이 들어 글을 작성하게 되었다. 글에 들어가기 전 참고용 구성할 환경: 로컬/개발 서버: 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]즉시로딩과 지연로딩은 언제 사용할까? (feat. 프록시)
·
💻 개발/JPA, Querydsl
즉시로딩과 지연로딩에 대해 정리해 보았다. 즉시로딩과 지연로딩을 어떤 상황에서 사용하는지, 왜 사용하는지에 대한 정리 글이다. 먼저 즉시로딩과 지연로딩을 알기 위해선 JPA의 프록시에 대한 개념을 알아야 한다. 여기서는 즉시로딩과 지연로딩에 대한 글이므로 프록시는 아래 글을 통해 간단하게 알아보고 즉시로딩과 지연로딩을 이해하도록 하자. 목차 1.프록시란 2.지연로딩 3.즉시로딩 1. 프록시란? 프록시 정의 대리, 가짜라는 의미를 가지고 있는 proxy. 프록시 사용이유 ex) Member 엔티티를 조회할 때 Team도 함께 조회해야 할까? 비즈니스 로직에서 필요하지 않을 때를 구분해야 한다. ⭐️ 낭비가 발생하게 된다. JPA는 이 낭비를 하지 않기 위해, 지연로딩과 프록시라는 개념으로 해결한다. 프록시..