전체 글

싸피 비전공9기 비전공자바 서식하는 초보개발자 백준 - https://www.acmicpc.net/user/esu08259 깃허브 - https://github.com/qkrrlgus114
https://qkrqkrrlrl.tistory.com/category/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8/RESTAPI%20%EC%B6%94%EC%B2%9C%20%EC%84%9C%EB%B9%84%EC%8A%A4 '프로젝트/RESTAPI 추천 서비스' 카테고리의 글 목록싸피 비전공9기 비전공자바 서식하는 초보개발자 백준 - https://www.acmicpc.net/user/esu08259 깃허브 - https://github.com/qkrrlgus114qkrqkrrlrl.tistory.com 이전 게시글에서 배포 과정을 기록했지만 해당 파이프라인에는 이미지 백업에 대한 내용이 없는 상태다. 아래가 현재 진행되는 프로세스의 순서다. 새로운 이미지 생성기존 이미지 삭제기존 컨..
3~4달 전에 도커와 젠킨스를 이용해서 CI/CD를 구성했지만 현시점에 기억을 다시 살리고자 정리를 진행해 보았습니다. DOCKER우선 도커를 쓰는 이유는 동일한 환경에서도 IMAGE를 통해 안전하게 배포하고 컨테이너를 통해 관리할 수 있어서 사용했다. VM과 비교가 많이 된다고 들었는데  VM의 경우 하나의 머신에 OS까지 전부 들어있게 된다. 예를 들면 윈도우 환경에서 맥 OS를 가진 VM, 리눅스를 가진 VM을 구동시킬 수 있지만 무겁다는 문제가 발생하게 되는데!도커를 사용하면 컨테이너에 OS를 설치하지 않게 된다. 컨테이너는 호스트 OS의 커널을 공유한다고 한다.  도커를 사용하면 3가지의 개념을 알아야 한다. DOCKER FILE도커 이미지를 생성하기 위한 명령어 or 레시피를 의미한다. 도커 ..
현재 서비스에서 사용하는 모든 쿼리를 분석하고 다음의 내용을 개선해보려고 한다. 1. 불필요한 정보 조회 -> DTO 조회로 변경2. N+1 문제 확인하기3. 인덱스 타는지 파악하기(쿼리 실행 계획) 아래는 쿼리 개선을 진행하며 남긴 기록들이다.  메인화면 유저 정보 가져오기fetchJoin을 걸어두지 않아서 Role를 가져올 때 따로 조회를 진행한다. 따로 MemberRoles와 fetchJoin을 통해 N+1 문제를 해결. (왼쪽 기존, 오른쪽 개선)  유저의 토큰 조회토큰의 개수만 필요한데 유저의 전체 데이터를 가져오는 것은 낭비라고 판단. 토큰만 파악할 수 있도록 변경했다. id에 일치하는 데이터가 없을 수도 있기 때문에 Optional로 감싸주었다.// 토큰 개수 반환 ..
REST API 서비스의 certbot 인증서가 벌써 3개월을 채워가고 있다. 만료가 되면 보안에 문제가 발생하기에 미리 갱신을 진행하려고 한다.  certbot을 사용하고 있기에 아래 명령어로 갱신 시뮬레이션 시도(--dry -run을 붙이면 시뮬레이션을 시도한다. 즉 실제로 갱신하지는 않음)sudo certbot renew --dry-run 80번 포트를 이미 사용하고 있다고 갱신 시뮬레이션이 실패했다. 아마 nginx가 현재 80번 포트를 잡고 있어서 그런 것 같다. nginx 먼저 잠시 중지sudo systemctl stop nginx 다시 도전시뮬레이션 결과 성공적으로 갱신된 것을 확인할 수 있다. 아래 명령어를 통해 실제로 갱신을 진행한다.sudo certbot renew  성공적으로 ssl을..
이번에 인프런 프리온보딩을 진행하면서 발생하는 Log를 슬랙으로 전송시켜 로그 파악을 편리하게 진행해야 한다는 생각이 들어서 슬랙 api를 사용해 보았다.  슬랙 설정1. 채널을 생성하고 우클릭 -> 채널 세부정보 보기 -> 통합 -> 앱 추가  2. incoming webhooks 설치 해당 WebHooks를 다운로드. WebHook은 웹 애플리케이션에서 특정 이벤트를 발생시켰을 때, 다른 시스템에게 자동으로 알림을 보내는 방식이다. 3. 웹훅 url 추가를 완료하면 위 화면처럼 웹훅 URL을 발급받을 수 있다.  아래 슬랙 홈페이지를 가면 의존성 주입을 위한 코드가 존재.https://slack.dev/java-slack-sdk/guides/web-api-client-setup Installation..
Service에서 현재 유저 Entity를 가져오는 경우가 굉장히 빈번하게 일어난다.그럴 때마다 유저를 가져오는 메서드를 작성해서 쓰는데 서비스마다 하나씩 작성해서 중복되는 경향을 엄청 받았었다.// 현재 로그인 유저 찾기 private Member getCurrentMember() { Long currentUserId = jwtService.getCurrentUserId(); return memberRepository.findById(currentUserId).orElseThrow( () -> new MemberException(MemberExceptionInfo.NOT_FOUND_MEMBER, currentUserId + "번 유저를 찾지 못했..
11. DTO 의존성 분리현재 toEntity 메서드가 DTO에 의존적이다. public ApiRequestHistory toEntity(ChatGPTResponseDTO responseDTO, Member member, boolean access) { String responseContent = null; if (responseDTO != null && responseDTO.getChoices() != null && !responseDTO.getChoices().isEmpty()) { responseContent = response..
현재 공유게시판을 들어가면 모든 공유 게시글을 가져오는데 이때 offset 기반의 페이지네이션을 채택했다. cursor 기반도 고민했었지만 페이지를 제공해야 한다는 점에서 offset을 채택할 수밖에 없었다. 그런데 가장 문제가 되는 것이 성능 저하의 문제가 발생하는 것. offset 기반으로 동작하면 offset과 limit이 주어지는데 offset까지 데이터를 풀스캔하고 그 데이터를 버리고 limit 만큼 찾아오기 때문에 불필요한 데이터 조회가 발생하게 되는 것이다. 아래는 현재 쿼리의 상태이다.List apiRecommendPostsResponseDTOS = queryFactory. select(Projections.constructor(ApiR..
indeep
indeep한 개발자