본문 바로가기

전체 글

(124)
프로젝트 init (group, artifact, package name) Group: 프로젝트 생성하는 조직, 회사 이름 (com.example) Artifact: 프로젝트 이름 (auth-chatting) Package name: 소스 코드 패키지 이름 (com.example.authchatting)
Entity의 Id 직접 주입 시, select 쿼리가 발생하는 이유와 isNew()오버라이딩하기 (성능 개선) 문제 발생 로직은 1. 사람 정보를 주는 외부 api 호출 시, 응답으로 Id와 그 외 정보를 받는다. 2. 이 Id를 그대로 user entity의 id로 사용하고 그 외 정보와 함께 저장한다. 입니다. 따라서, 원인은 id를 @generatedValue 으로 저장하지 않고 우리가 직접 값을 넣어줄 경우입니다. 문제는 엔티티를 저장할 때, select query가 다량으로 발생하는 것이죠. 100개를 저장했는데 100개의 select query + 100개의 insert query가 발생하네요! 왜인지 디버깅해서 천천히 뜯어보겠습니다. 동작 과정 우리는 새로운 데이터를 저장해주지만 save 호출 시, isNew()가 false이기 때문에 persist가 아닌 merge로 동작하고 있습니다. 왜 isNe..
IT동아리 Prography 8기 Spring 회고 안녕하세요~ 오늘은 2023년을 마무리하고자, 올해 가장 기억에 남았던 활동 프로그라피에 대해 이야기 해보겠습니다. 먼저 프로그라피가 무엇인지 소개를 해봐야겠네요! * 8기와 9기는 많은 차이가 있음에 유의해주세요. (차이점은 제일 하단에 !) 프로그라피란? 6개월 동안 실력 있는 IT인들이 모여, 한 개의 서비스를 런칭하는 동아리입니다. 8기는 이전과 다르게 Node 파트가 빠지고 Spring, Django 파트만 운영됐어요. 그래서 [AOS, IOS, Flutter / React / Django, Spring / Design] 파트로 운영되었습니다. 저는 Spring 파트로 참여했고 지금부터 제 성장 이야기를 들려드리겠습니다. 먼저 제가 이 동아리에 지원한 이유는 크게 3가지입니다. 1. 새로운 사람..
QueryDSL 데이터 조회 시, Entity, Tuple, DTO 사용법 + 각 장단점 QueryDSL은 select 절에서 원하는 컬럼만 조회할 수 있다. (DB와 서버 사이에 사용하는 네트워크 사용량도 줄고 물론 속도도 줄어듦) 데이터를 조회할 때, Entity나 Tuple을 직접 조회하거나 DTO를 사용해 데이터를 조회해오는 방법이 있다. 모두 장단점이 있으니, 아래에서 설명해보겠다. Entity 사용하기 Entity 조회시 Hibernate 캐시, 불필요한 컬럼 조회, OneToOne N+1 쿼리 등 단순 조회 기능에서는 성능 이슈 요소가 많다. (OneToOne 관계는 null인 경우 때문에 Lazy Loading을 허용하지 않음. 따라서 연관된 entity전체가 아닌 entity의 id만 필요해도 entity 전체를 조회함 => store.image.id.as("imageId")..
성능테스트 (부하테스트 도구 비교) - jmeter, k6, ngrinder, locust 부하 테스트 도구 후보군: jmeter, k6, ngrinder, locust후보군 선정이유: jmeter는 내가 사용해보았고 나머지는 주변에서 사용해봤다는 도구들을 대표적으로 비교해봤다. 구분jmeterk6ngrinderlocust개발 언어JavaGoJavaPython사용 방법(스크립트 작성언어) GUI, CLI(XML로 작성, java로 실행) 모두 지원모두 지원 주로 CLI(javascript 코딩) GUI, CIL(Groovy, Jython로 코딩)CLI(python 코딩)리소스 & 동시 접속자 수각 사용자에 대해 별도의 스레드를 할당하는 스레드 기반 모델이라 스레드 할당에 상당한 리소스 필요아래 참고아래 참고gevent 코루틴을 사용하여 이벤트 및 비동기 접근 방식 기반 모델이라 jmeter보다..
[Spring boot] 쿼리 속 ? 인자 확인하는 방법 Spring boot 3.0.5 기준! application.yml에 추가 spring: jpa: properties: hibernate: # show_sql: true format_sql: true logging: level: org.hibernate.SQL: debug org.hibernate.orm.jdbc.bind: trace
나의 Git Convention 🌟 깃 컨벤션 스타일 : angular 커밋 메시지 헤더 (): │ │ │ │ │ └─⫸ 명령문, 현재 시제로 작성합니다. 대문자를 사용하지 않으며, 마침표로 끝내지 않습니다. │ │ │ └─⫸ Commit Scope: animations|bazel|benchpress|common|compiler|compiler-cli|core| │ elements|forms|http|language-service|localize|platform-browser| │ platform-browser-dynamic|platform-server|router|service-worker| │ upgrade|zone.js|packaging|changelog|dev-infra|docs-infra|migrations| │ ngcc|ve │..
k8s + Postgresql PersistentVolume 생성 PersistentVolume, PersistentVolumeClaim에 대해 소개는 나중에 하겠다. 우선 생성 방법만 알아보자! https://d-life93.tistory.com/458와 https://www.sumologickorea.com/blog/kubernetes-deploy-postgres/를 참고했습니다. Secret 생성 kubernetest의 secret을 이용해 postgres password를 관리할 것이기 때문에 먼저 password가 될 평문을 encoding 해준다. 아래의 password가 비밀번호이며 기본적으로 쿠버네티스로 시크릿 키를 사용할 경우 자동 디코딩 된다. echo -n password | base64 결과는 이렇게 나온다. vi secret.yml 하고 data..