아래의 내용은 직접 디버깅을 통해 알아가는 과정을 포함하고 있습니다. Array와의 가장 큰 차이점이라고 한다면 List는 배열의 크기를 따로 설정해주지 않아도 된다. 기존의 배열은 아래처럼 한정된 크기를 설정해 주고 크기 안에서만 값을 할당할 수 있었다.int[] arr = new int[5];arr[0] = 1; arr[1] = 2; 반면에 List는 크기를 정하지 않아도 데이터를 집어넣을 수 있다.List list = new ArrayList();list.add(1); list.add(2); 그러면 List는 어떻게 구성이 되어 있길래 크기를 설정하지 않아도 가능한 것일까?ArrayList 가장 먼저 주목할 부분은 아래 주석의 내용이..
https://qkrqkrrlrl.tistory.com/161 확장성이 좋은 oauth 코드로 리팩토링하기https://qkrqkrrlrl.tistory.com/160 spring-oauth-client 라이브러리의 동작 흐름 정리해당 지식은 혼자 디버깅과 gpt, 블로그를 교차 검증 하면서 얻은 정보입니다. 틀린 내용이 있을 수 있습니다. 소셜 로그qkrqkrrlrl.tistory.com이전 게시글에서 oauth 코드를 리팩토링 하면서 다양한 소셜 환경을 빠르게 추가할 수 있도록 리팩토링을 진행했다. 그러니 한번 naver를 추가해 보면서 얼마나 쉽게 추가할 수 있는지 체감해 보고 수정해보려고 한다. naver우선 네이버 개발자 센터로 가서 애플리케이션을 등록한다.https://developers.n..
https://qkrqkrrlrl.tistory.com/160 spring-oauth-client 라이브러리의 동작 흐름 정리해당 지식은 혼자 디버깅과 gpt, 블로그를 교차 검증 하면서 얻은 정보입니다. 틀린 내용이 있을 수 있습니다. 소셜 로그인을 사용하면서 oauth2를 사용하게 되었는데 코드를 한번 다시 살펴보고qkrqkrrlrl.tistory.com 여기서 oauth 라이브러리를 추가했을 때 시큐리티 필터의 흐름을 살펴봤었다.이제는 현재 작성된 스프링 코드를 다시 리팩토링 하면서 확장성이 좋은 코드로 리팩토링을 진행해보려고 한다. 개선하게 됐던 계기는 코드 리뷰를 받으면서 시작됐다. 분명 당시에는 PrincipalOAuth2UserService 코드를 작성하면서 확장성을 챙겼다고 생각했다. 근데..
해당 지식은 혼자 디버깅과 gpt, 블로그를 교차 검증 하면서 얻은 정보입니다. 틀린 내용이 있을 수 있습니다. 소셜 로그인을 사용하면서 oauth2를 사용하게 되었는데 코드를 한번 다시 살펴보고 새로운 소셜 로그인을 추가하기 쉽도록 코드 리팩토링을 진행해보려고 한다. 그전에 다시 한번 oauth2의 흐름을 정리하고 넘어가자. 위 사진처럼 oauth2에는 대표적으로 4가지의 역할이 존재한다.Resource Owner : 사용자Resource Server : 소셜 서버(네이버, 구글, 카카오)Authorization Server : 토큰 발급 서버(네이버, 구글, 카카오)Client : 우리 애플리케이션 여기서 가장 혼동하기 쉬운 부분이 Client다. 여기서 말하는 Client는 사용자를 의미하는 것이 ..
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을..