전체 글

싸피 비전공9기 비전공자바 서식하는 초보개발자 백준 - https://www.acmicpc.net/user/esu08259 깃허브 - https://github.com/qkrrlgus114
예전에 버퍼 풀의 사이즈를 8MB -> 128MB로 상향 조정해서 조회 성능을 끌어올렸던 적이 있었다.(이후에 128MB -> 4GB로 또 상향 조정을 했다.) https://qkrqkrrlrl.tistory.com/118 0.026초)" data-og-description="api_request_history에 50만 개의 데이터를 넣어두고 SELECT * FROM api_request_history ORDER BY request_date DESC; 해당 쿼리를 날려보자. request_date에 인덱스가 걸려있는 상태다. 1.32초면 나쁘진 않군요! SELECT count(*) " data-og-host="qkrqkrrlrl.tistory.com" data-og-source-url="https://q..
· 일상
개발자에게 유명한 CS repo를 만드신 VSFe님의 세미나를 오늘 다녀왔다.(아래 repo의 주인)https://github.com/VSFe/Tech-Interview GitHub - VSFe/Tech-InterviewContribute to VSFe/Tech-Interview development by creating an account on GitHub.github.com  평소에도 안산님 단톡방에서 다양한 도움을 많이 받았었고 redis 특강, cs 특강, 알고리즘 특강에 이어 이번에는 오프라인 세미나까지 주최하셔서 막 강남에 다녀왔다. 일단 점심을 먹기 위해 강남 파이브가이즈를 갔는데 웬 앞에 땅콩만 있고 사람은 빽빽하고 키오스크도 없어서 20초 고민하다가 후퇴했다.(서브웨이의 공포가 느껴져서 ..
RESTful API 프로젝트는 아래와 같은 아키텍처를 가지고 있다. 가난한 나는 ec2 프리티어를 사용하고 있어서 하나의 서버에 백엔드, 젠킨스, DB가 전부 올라가 있는 상태다. 여기서 고민이 '만약에 DB 컨테이너에 갑자기 문제가 생긴다면?' 혹은 '데이터가 날아간다면?' 사실 DB 백업은 가장 먼저 고민했어야 하는 점인데... 그래서 지금이라도 백업을 통해 불상사를 대비하려고 한다.  백업은 cron을 통해서 주기적인 스케줄링을 진행한다. 나는 하루에 4번 데이터 백업을 진행한다.(6시간 간격)또한, 5일이 지난 데이터는 삭제하도록 한다.(무분별한 백업 데이터가 쌓이지 않도록) 우선 아마존리눅스2는 기본적으로 cron이 설치되어 있지 않다. 그래서 아래 명령어로 설치를 진행.sudo yum ins..
유저가 GPT API를 호출하면 RestTemplate을 통해 동기로 처리를 진행했다.그 이유는 gpt의 응답으로 DTO를 생성해서 유저한테 넘겨줘야 하기 때문에 RestTemplate를 선택했었다. 우선 RestTemplate을 바꾸려는 이유는 지원이 중단됐기 때문이다.(많은 블로그에서 RestTemplate이 Deprecated가 되어 다음 버전에서 빠진다고 하는데 절대 아니다.) 예전 스프링 주석에는 Deprecated 내용이 적혀있었다지만, 이후에는 없어지고 유지보수 모드로 동작한다고 바뀌었다. 자세한 내용은 아래의 토비 님 유튜브를 보면 된다.https://www.youtube.com/watch?v=S4W3cJOuLrU   스프링 6.1부터 동기 HTTP 처리를 위해 RestClient라는 것을..
· JAVA
만약에 String 값을 int로 변환해야 한다면 뭘 선택할 건가? 대부분 알고리즘을 풀다 보면 parseInt를 쓰는 사람, valueOf를 쓰는 사람 둘로 나뉜다. 그래서 차이점을 찾아보면 공통적으로 하는 말들이 parseInt는 int로 반환하고, valueOf는 Integer로 반환해서 null을 받을 수 있다. 이게 끝이다. 내부적으로 동작하는 캐싱에 대한 이야기는 들어있는 글이 별로 없었다. 나도 예전에 Long값을 변환하면서 valueOf를 사용하다가 문제를 마주쳤던 경험이 있었기에 내부 로직을 파보려고 한다. Integer.parseInt 아래 코드는 가장 많이 작성하는 문자열 -> 정수 변환 코드다.int i = Integer.parseInt("123"); 내부적으로 먼저 한 단계 들어가..
· JAVA
아래의 내용은 직접 디버깅을 통해 알아가는 과정을 포함하고 있습니다. 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 코드를 작성하면서 확장성을 챙겼다고 생각했다. 근데..
indeep
indeep한 개발자