멘토링 내용
진행 상황 공유
백엔드
이번주 한일
- 디버깅 작업 위주로 진행
- DB 성능 작업 진행
쿼리 성능 개선을 mysql을 postgre로 교체하여 시도했으나, 다른 곳에서 문제가 있음을 발견(distinct). / 테이블로 매핑되어있는 것을 리스트로 바꾸는 방법 생각중.
-> 쿼리 개선은 백엔드에서 중요한 문제이다. 원인, 개선한 방법 등을 정리해두면 좋다. 지역 쿼리가 요즘 뜨고 있는 추세. 알아두면 좋다. 비슷한 기술로는 redis가 있음.
- 타입을 지정해서 array를 가지고 있게 할지 모르겠다. jpql로 사용을 시도했으나 잘 되지 않아서 어떻게 해야할지 고민중.
jpql을 사용하는 이유는?
- 네이티브 쿼리를 사용하면 postgre에 종속되는 것 같아서 jpql이나 쿼리 dsl 같은 인터페이스를 사용하려고 했다.(이 부분을 잘 정리해두면 좋을 것 같다.)
- 오류가 나는 부분 : 다일랙트 설정하는 부분에서 오류가 났다.
-> 그 부분이 다양한 방법으로 시도를 해야하는데 이 설정을 공부하고 기억해두면 좋을 것 같다.
-> jpa Hibernate 안에 들어가는지 jpa properties 안에 Hibernate 안에 들어가는지 구분(비교)해야한다.
현재는 네이티브 쿼리로 array간의 검색이 가능하게 구현된 상태이다.
무중단 배포는 어떻게 하고 있는지?
- 단일 서버에서 엔지닉스 활용해서 사용했는데 헬스체크 기간동안 서버가 다운이 되는 문제가 발생해서, 구조를 바꿔서 빈스토크로 서버를 하나더 띄워서 바꿨음.
- 이렇게 새로 배포를 하면 3-4분 소요가 되는 문제가 생겨서 질문
-> 엘라스틱이나 ecr,ec2같은 경우는 서버를 띄워서 사용하기 때문에 문제가 생길 수 있음. 서버를 띄우는데에는 시간이 걸릴 수 있음.
-> 4분 걸리는 이 방식이 큰 문제가 되지는 않음. 배포 방식은 여러가지 있는데 그 중 어떤것을 사용하고 이유를 정리해두면 좋다.
현재 도커를 사용하면 이미지가 아닌 허브로 사용하는지 퍼블릭인지 프라이빗인지?
- 도커 허브를 사용합니다. 퍼블릭입니다.
-> 질문한 이유는 앤드 포인트(DB)가 노출될 수 있기 때문입니다. 그래서 퍼블릭으로 사용하는데 yml파일을 사용하면 위험할 수 있다.(yml안에 있으면 퍼블릭으로 다운 받아서 db 주소와 비밀번호를 알 수 있다.) 주의하는 것이 좋다.
- 현재는 깃허브 액션의 시크릿으로 관리하고 있습니다. (이 방법은 괜찮다.)
Q&A
Q. db관련 질문
A. 서비스에서 사용하는 것이 맞다.
현재는 스프링 스케줄러에서 사용하고 있다.