- [ 언어·프레임워크/Spring Boot ][Spring Boot][TROUBLESHOOTING] 6초 이상의 첫 로딩 시간 문제 해결2024-05-20 17:08:361. 6초 이상의 첫 로딩 시간문제백엔드는 Spring Boot, 프런트엔드는 React.js로 작성된 서비스이다. 이 서비스에 접근하면 6초 이상의-극악의-로딩 시간이 필요했다. 2. 원인크롬 개발자 도구에서 확인해 보니 전체 로딩 시간 중 5초 이상을 백엔드 API 호출이 차지하고 있었다. 백엔드 코드(서비스 클래스)를 확인해 보니 API 호출 시 GET과 UPDATE 요청이 각각 순차적으로 이루어지며, UPDATE 요청이 완료되면 GET 요청 결과를 응답하도록 작성되어 있었다. UPDATE 요청도 여러 번 시도되고 있었기 때문에 이 부분에서 병목 현상이 발생하고 있다고 보았다. 3. 비동기 처리하여 1초 미만으로 개선UPDATE 요청을 비동기 처리하여 GET 요청이- UPDATE 요청이 완료될 때..
- [ CS/Linux ][Linux] 생활코딩 리눅스 : 인터넷, 네트워크 그리고 서버(IP 확인 방법), 웹 서버, ssh2024-05-20 10:52:521. IP 확인✔️ 출처 : https://opentutorials.org/course/2598/144271.1. 사설 IP(Private IP Address) 확인 명령ip addr출력 결과 중 inet 부분을 확인하면 된다. 외부에서 접속할 수 없는 IP이다. 1.2. 공인 IP(Public IP Address) 확인 명령curl ipinfo.io/ip # 또는 curl http://ipinfo.io/ip외부에 접속할 때 사용하는 IP이다. 😉사설 IP, 공인 IP : 통신사가 제공하는 하나의 IP를 여러 단말기에서 사용하기 위해 Router를 사용하여 비용을 절감한다. 이때 통신사가 제공하는 공인 IP는 Router가 가지게며, 각각의 단말기는 사설 IP를 부여받게 된다. ip addr 명령과 c..
- [ CS/자료구조와 알고리즘 ][자료구조와 알고리즘] 유데미 강의 "JavaScript 알고리즘 & 자료구조 마스터클래스" 정리(섹션 15: 합병 정렬)2024-05-19 21:50:44섹션 15: 합병 정렬1948 폰 노이만이 최초로 작성하였다. 분할, 정렬, 합병 조합으로 정렬한다. 아래는 재귀함수를 이용한 코드이다.function merge(arr1, arr2) { const results = []; let i = 0; let j = 0; while (i arr1[i]) { results.push(arr1[i]); i++; } else { results.push(arr2[j]); j++; } } while (i Big O버블, 삽입, 선택 정렬 대비-평균적으로-훨씬 유리한 시간 복잡도를 가지지만 공간 복잡도는 불리하다. AlgorithmTime..
- [ 언어·프레임워크/React Native ][React Native] 크립토 앱 튜토리얼2024-05-13 09:20:11양동준 님의 "만들면서 배우는 리액트네이티브 - 크립토 앱"을 실습해 보면서 기억해둬야 할 내용을 작성해 보았다. 기록된 내용은 영상에서 얻은 정보도 있지만-영상에 없는-검색을 통해 얻은 정보도 있다.😉 참고한 영상 : https://youtu.be/sbTih9S8wNw?feature=shared1. 프로젝트 실행 명령-c 옵션을 이용하면 실행하면서 캐시를 삭제할 수 있다. Android Virtual Device(AVD)를 사용하면서 오작동을 많이 경험했다. 캐시를 삭제하면서 실행하는 방식과 함께 개발하지 않을 때는 프로젝트를 종료시켜 두는 것으로 오작동을 줄 일 수 있었다.npx expo start -c😉 expo 프로젝트 생성 : https://docs.expo.dev/tutorial/creat..
- [ CS/자료구조와 알고리즘 ][자료구조와 알고리즘] 유데미 강의 "JavaScript 알고리즘 & 자료구조 마스터클래스" 정리(섹션 11, 12, 13, 14: 버블, 선택, 삽입 정렬)2024-05-12 20:52:40섹션 11: 버블 정렬버블 정렬은-오름차순인 경우-순회하면서 가장 큰 수를 가장 뒤로 보내는 정렬 방식이다.function bubbleSort(arr) { for (let i = arr.length; i > 0; i--) { for (let j = 0; j arr[j + 1]) { [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]; } } } return arr;}console.log(bubbleSort([9, 3, 5, 2, 1])); 스왑 여부를 체크하여 스왑이 일어나지 않을 경우에는 반복을 중단하여 최적화하였다.일반적으로 O(n^2), 가능한 최고의 경우 O(n)이다.function bubbleSort(arr) { let noSw..
- [ 언어·프레임워크/Spring Boot ][Spring Boot] LocalDateTime과 DB의 시간 데이터 불일치, 쿼리 오작동 문제(DateTimeFormatter으로 해결)2024-05-09 11:13:171. 날짜 조건 검색 시 불일치 문제Spring Boot에서 MyBatis를 이용해 DB 데이터를 조회하였다. 조회 조건에서 시간을 기준으로 조회하는 경우 기준 시간 이후의 데이터가 와야 하는데 그 이전 시간 데이터도 함께 오는 현상이 발생했다. 2. DateTimeFormatter으로 해결서버의 날짜 데이터의 경우 "2024-05-09 08:17:25"와 같은 문자열 형식으로 저장되어 있다. LocalDateTime 타입의 시간으로 조회 시 제대로 된 조회가 되지 않았다. DateTimeFormatter를 이용해 "yyyy-MM-dd HH:mm:ss" 형식의 문자열로 변경하여 쿼리를 날리니 정상적으로 조회가 되었다.LocalDateTime now = LocalDateTime.now();LocalDate..
- [ 언어·프레임워크/Spring Boot ][Spring Boot] ubuntu에서 git clone 후 gradle build하기2024-05-09 09:58:521. git clonegit clone https://postforty:@github.com/postforty/.git📢 application.properties 파일 빠트리지 않도록 주의! 2. gradle build./gradlew build위 명령어 실행 후 "-bash: ./gradlew: Permission denied" 에러가 발생한다면 아래 명령어로 gradlew에 권한을 부여한다.chmod +x ./gradlew기존 build 폴더를 지우고 다시 빌드하고자 한다면 아래와 같이 진행하면 된다../gradlew clean # build 폴더 삭제./gradlew clean build # build 폴더 삭제 후 빌드
- [ 언어·프레임워크/HTML·CSS ][HTML] 여러 html로 페이지가 구성된 홈페이지에서의 라우팅 문제2024-04-25 11:44:381. 모든 html 파일에서 메뉴명을 수정해야 하다니...회사 홈페이지의 서브 메뉴를 수정할 일이 있었다. 해당 html 파일을 열어 수정했고 다 끝났다고 생각했고 행복했다. 만약 이야기의 결말이 이랬다면 이 글은 쓰지 않았을 것이다.회사 홈페이지는 각 메뉴별로 각각 메뉴를 가지고 있는 방식이다. 다시 말해 메뉴별로 html 파일이 존재하고 각 페이지는 동일한 네브바 코드가 작성되어 있다. 심지어 어떤 메뉴는 서브메뉴도 이와 같은 구조로 되어 있다. 결국 소메뉴의 명을 하나만 수정할 것이 아니라 모든 html 파일에서 수정해야 한다는 것이며-어쩌면 처음으로-SPA가 무척 고맙게 느껴졌다.모든 html 파일에서 소메뉴의 명을 수정한다는 것은 이번 한번만이라면 해줄 만하다. 그래, 충분히 그럴 수 있다. 하..