들어가기 앞서 알아두자! 파이프 라인 명령어1 | 명령어2 의 형태를 가지고 있는데, 여기서 '|' 기호가 기준이다. 명령어1의 처리 결과를 명령어2로 전달하는 것이다. apt list | grep tomcat -> apt list를 가져온 후, grep tomcat 이라는 명령어를 실행하라는 뜻 apt 명령어 1. 우분투 저장소에 무엇이 있는지 확인 apt-cache search 12 우분투 저장소 업데이트 apt update 만약 Permission denied 에러가 뜬다면? 그 이유는 root 권한으로만 가능한 역할을 현재 우분투 권한으로 실행하려고 하기 때문이다. 그럴 때 whoami 명령어를 통해 권한을 확인해보자. 이후 sudo 명령어를 통해 root 권한을 얻을 수 있다. sudo apt..
AWS를 이용하여 무중단 배포 학습을 해보려고 한다. 먼저 가장 기본적인 리눅스 명령어에 대해서 정리해보려고 한다. 리눅스 명령어는 기본적으로 Shell을 사용하여 OS(Ubuntu)에게 명령하면 OS가 번역하여 컴퓨터와 소통한다. 리눅스 명령어 기본적으로 모든 명령어는 명령어 뒤에 --help 옵션을 부여하면 자세한 사용방법이 나오게 된다. 예를들어 ls에 관련된 명령어는 ls -help라고 입력하면 된다. (깔끔한 터미널 테마등이 아니라면.. 그냥 구글링이나 Chat GPT한테 물어보는게 나을수도..! 0. pwd : 현재 위치 경로 1. ls (List Segments) : 현재 위치에 존재하는 파일 목록 조회 ls -l : 파일의 상세 정보 ls -a : 숨김 파일 표시 ls -t : 파일들을 생..
swap() 배열의 두 인덱스의 원소를 교환하는 메소드이다. 정렬의 특성상 자주 사용되며 다음에 나올 예시들에서도 사용해도 된다.public static void swap(int[] arr, int idx1, int idx2) { int temp = arr[idx1]; arr[idx1] = arr[idx2]; arr[idx2] = temp; } 1. 버블 정렬 (Bubble Sort) 순서대로 근접한 두 수를 비교해서 오른쪽 수가 왼쪽 수보다 더 작으면 교환 이 작업을 한 번 수행할 때마다 맨 끝자리에 가장 큰수가 가게 된다. 시간 복잡도 : O(N^2) private static void bubbleSort(int[] arr) { int temp; for (int i = 0; i < arr.length..
빅오 표기법의 그래프는 x축은 입력의 갯수, y축은 시간을 나타낸다. 출처 : http://bigocheatsheet.com/ 빅오 표기법은 알고리즘의 최악의 경우 복잡도를 측정하는 기법이다. 보통 O(n)과 같이 표기하며 여기서 n은 입력의 개수를 의미한다. 따라서 n이 무한으로 접근할 때 무슨일이 일어날까? 정도로 생각하면 좋을 듯 하다. 가장 빠른 순 O(1) ->O(log n) -> O(n) -> O(n log n) -> O(n^2) -> O(2^n) Loof 내에서 Loof를 돌면? (이중 for문) public class Main { public static void printItems(int n) { for (int i =0; i O(n^2) O(100n^2)는 빅오 표기법으로 어떻게 쓰여질..
소상공인들의 당일 폐기 예정 식품의 할인 정보 공유 및 구매/판매 서비스 소상 공인들의 당일 폐기 예정 식품의 할인 정보 공유 및 구매/판매 서비스를 팀 프로젝트로 진행 중이다. 팀 프로젝트를 수행하던 중, 나는 전반적인 업체 관리 및 검색 파트를 맡게 되었다. 아래 내용은 검색을 위한 기능을 구현하던 중 성능 개선을 위해 내가 시도했던 방법들을 적어본다! 목차 0. 들어가기 앞서 1. Like문(No QueryDSL) VS Full Text 쿼리 2. Like문(feat. QueryDSL) VS Full Text 쿼리 3. 우리 서비스에서 MySQL Index 적용시 문제점 4. ElasticSearch 도입 우선 들어가기 앞서서, 우리 서비스의 검색 관련 시스템에 간략하게 소개해주려고 한다. 간단하게..
저번 전문가를 매칭시켜주는 숨고 서비스를 클론 코딩하는 팀 프로젝트를 진행하던 중 인기 검색어, 최근 검색어를 구현하는 파트를 맡게 되었다! 오늘은 그와 관련해서 포스팅을 해보려고 한다. 최근 검색어, 인기 검색어... 왜 Redis를? 우선 RDB가 아닌 NoSQL의 Redis를 선택하게된 이유에 대해서 간략하게 생각해보자. 우리가 일반적인 사이트의 검색창에 마우스를 클릭했을 때 최근 검색한 내용, 혹은 그 서비스에서 제공하는 인기 검색어의 리스트등이 나오는 것을 볼 수 있다. 여기서 '검색어를 입력하지 않았을 때도 데이터를 제공해주고, 실제로 잘못 클릭했을 경우에도 저 데이터를 제공해주네..?' 라는 생각을 해서 의도했던, 하지 않았던 해당 서비스에서 많은 사용이 이루어질 것이라고 판단했다. 그말은 ..
데브코스에서 팀플을 진행중에 로그인한 사용자들을 확인후 id를 가져오는 AOP를 만들었다. 그 중 일부 내용을 발췌한 것 인데, 대략적으로 아래 코드와 함께 요약하면 로그인을 한 상태에서 로그인한 사용자의 ID가 필요한 메서드에 @CurrentMemberId를 붙이면 해당 메서드의 파라미터들의 값들을 불러와 memberId가 있으면 로그인한 사용자의 memberId로 매핑해 주는 것이다. 다시 AOP 코드로 가서, 여기서 봐야할 것은 parameterName 인데 이 AOP를 적용한 팀원분의 로컬에서는 해당 메서드들의 파라미터들의 갯수만큼 for문을 돌며 각 파라미터의 값들이 잘 불러와졌다. (ex memberId 등) 하지만 내 로컬에서는 되지 않아, 콘솔로 찍어보니 맨 아래의 parameterName..
서론 N+1 문제란 Spring Data JPA를 사용하다보면 N+1 문제에 대해서 많이들 겪곤 한다. N+1 문제란 관계형 데이터베이스에서 일반적으로 발생하는 성능 이슈다. 예를 들어, 게시물(Post)과 사용자(User) 그리고 댓글(Comment)이라는 엔티티가 있다고 가정해 보자. 게시물 목록을 가져올 때, 각 게시물에 대한 사용자 정보와 댓글 정보를 함께 가져와야 하는 경우 N+1 문제가 발생할 수 있다. Fetch Join 이러한 문제를 해결하기 위해 Fetch Join을 사용하여 연관된 엔티티를 한 번의 쿼리로 함께 로드할 수 있다. 즉 Fetch Join은 관계형 데이터베이스에서 조인을 통해 필요한 데이터를 한 번에 가져오는 방식이다. Fetch Join 사용 X - 연관된 테이블에 등록..