본문 바로가기

TIL20

[자바] Gradle 테스트 코드 제외하고 빌드하기 프로젝트를 진행하며 사이트를 운영하고 있었다. 새벽시간에 자동으로 빌드를 하게 해놨었는데 빌드되는데 시간이 너무 오래걸려서 ec2서버가 뻗어버리는 일이 있었다. ec2서버를 더 좋은 등급으로 업그레이드해도 돼겠지만... 빌드할 때 test코드를 실행하는 것이 배포 시간중 많은 양을 잡아먹고있었기 때문에 이를 해결하기로 했다. gradle을 사용하고 있었고, gradle에서 테스트코드 없이 빌드하는 방법을 찾아 적용했다. 1. build.gradle에 설정 추가하기// build.gradletasks.withType(Test) { enabled = false}2. -x 옵션을 사용해 test 태스크 제외하기gradle build -x test두 옵션 중 하나를 적용하면 빌드 시 test태스크가 제외되.. 2024. 5. 19.
[스프링] [JPA] 페이징 성능 개선: 커버링 인덱스 페이징 성능을 개선할 방법으로는 NoOffset 페이징, 커버링 인덱스를 사용하는 것이 있다. NoOffset페이징은 페이지 번호를 의미하는 offset을 쓰지않고, 그대신 이전 페이지의 끝부분을 가지고있다가 조회의 첫 부분을 찾을 때 사용하는 것이다. 이 방법은 특정 페이지별로 조회가 안된다는 단점이 있다. 현재 진행중인 프로젝트에서는 해당 방법은 사용할 수 없어서 커버링 인덱스를 사용해 개선했다. 커버링 인덱스란 쿼리를 충족시키는 데 필요한 데이터를 갖고 있는 인덱스를 말한다. 커버링 인덱스를 이용해 출력할 데이터들의 id값을 조회한 후, 해당 id값이 담긴 List를 이용해 데이터를 조회하는 방식으로 구현했다. 이렇게 하면 커버링 인덱스를 구할 때 where, order by, offset, lim.. 2024. 5. 19.
[트러블슈팅] 젠킨스 디스크 용량 부족 내용프로젝트를 빌드하려고했는데 젠킨스의 built-in-node가 용량 부족 문제로 실행이 되지 않는 상황이 발생했다.  해결ec2 볼륨을 수정해주는 것으로 해결했다. 기존에는 8GB 볼륨으로 되어있었는데 20GB로 늘려주었다. 과정은 다음과 같다. 1. ec2 콘솔에 접속 -> 인스턴스 선택. 2. 세부정보의 스토리지탭으로 이동. 3. 블록 디바이스에서 볼륨ID선택하여 진입. 4. 수정눌러 수정 페이지 진입 후 크기 설정. ec2에서 볼륨은 늘렸지만 ssh 터미널에서 다시 설정해주어야한다.# 하드디스크 용량 확인$ df -hT# 파티션 볼륨 확인$ lsblk# 파티션 크기 조정$ sudo growpart /dev/nvme0n1 1# ex4 파일 시스템 확장$ sudo resize2fs /dev/nvme.. 2024. 5. 19.
[트러블슈팅] ConcurrentModificationException 내용private static void dfs(int node, List next, List> list) { next.removeIf(item -> item == node); for (int nextNode : list.get(node)) { next.add(nextNode); } for (int nextNode : next) { dfs(nextNode, next, list); }} Exception in thread "main" java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:10.. 2024. 5. 18.
[알고리즘] 최대공약수(GCD), 최소공배수(LCM) - JAVA 최대공약수(GCD)GCD는 Greatest Common Divisor의 약자로 최대공약수이다. 두 수의 약수들의 공통된 값 중 최댓값을 말한다. GCD를 구하는 방법을 알아보자. 1. BigInteger 내장 함수private static int gcd(int a, int b) { BigInteger n = BigInteger.valueOf(a); BigInteger m = BigInteger.valueOf(b); return n.gcd(m).intValue();}2. 재귀private static int gcd(int a, int b) { if(b == 0) { return a; } return gcd(b, a % b);}3. 반복문private static.. 2024. 5. 18.
[자료구조] 스택 & 큐 스택Stack 클래스에서 구현된 메서드는 다음과 같다. - `E push(E item)`:   스택의 맨 위에 요소를 추가한다. - `E pop()`:   스택의 맨 위 요소를 제거하고 제거된 요소를 반환한다. - `E peek()`:   스택의 맨 위 요소를 제거하지 않고 반환한다. - `boolean empty()`:   현재 스택에 요소가 존재하지 않을 경우 `true`, 그 외의 경우 `false`를 반환한다. - `int search(Object o)`:   스택의 상단부터 탐색하여 지정된 객체가 있는 요소의 위치를 반환한다. 없을 경우 `-1`을 반환한다. 스택은 먼저 들어온 데이터가 마지막에 나가는 구조이다. 페이지 뒤로가기, 실행 취소, 수식 괄호검사 등에서 응용된다. Stack 클래스는 .. 2024. 5. 18.
[알고리즘] 이분 탐색 - JAVA 이분 탐색이분탐색은 탐색할 대상이 정렬된 상태에서 사용한다. 데이터의 특정 값을 찾기 위해 대상을 둘로 나눠 절반씩 줄여나가는 원리이다. 대상을 반씩 줄이기 때문에 시간복잡도는 O(logN)이다. 주어진 데이터에서 중복되지 않은 값이 주어질 때, 데이터 내에 특정 값이 존재하는지 여부를 확인하는 방법으로 많이 사용한다. 동작 방식은 다음과 같다. 1. 배열의 중간 값을 가져온다. 2. 중간 값과 검색 값을 비교한다.    - 중간 값이 검색 값과 같다면 종료한다. (mid = key)    - 중간 값보다 검색 값이 크다면 중간 값 기준 오른쪽 구간을 탐색한다.(right = mid-1)    - 중간 값보다 검색 값이 작다면 중간 값 기준 왼쪽 구간을 탐색한다.(left = mid+1) 3. 값을 찾거.. 2024. 5. 17.
[네트워크] 컴퓨터네트워크 및 인터넷 역사 네트워크의 구성 요소1. network edge    보통의 사용자들, 서버들은 가장자리(edge)에 위치한다.    웹브라우저들이 가장자리에 있다. 2. network core    사용자들을 연결시켜주는 특수한 역할을 하는 컴퓨터들.(라우터)    서로 연결되어있는 라우터들의 집합체이다. 3. access networks    장치들을 연결시켜주는 링크들.    즉, 네트워크에 접속하는 네트워크이다. 호스트가 네트워크 코어에 접속하는데 도움을 주는 중간 단계 네트워크이다.    유선(랜선), 무선(와이파이) 등.  프로토콜프로토콜이란 서로 다른 개체가 의사소통을 하기 위해 일정한 룰이 필요한데, 그 룰을 프로토콜이라고 한다. 의사소통을 위해 정해진 규칙.  패킷 스위칭패킷 스위칭(Packet swit.. 2024. 5. 17.
[알고리즘] 정렬 알고리즘 정리 - JAVA 개요어떤 데이터들이 주어졌을 때 이를 정해진 순서대로 나열하는 문제이다. 데이터를 정렬해야 하는 이유는 탐색을 위해서이다. 컴퓨터는 이론상 무한 개의 데이터를 다룰 수 있어야 한다. 탐색할 대상 데이터가 정렬되어있지 않다면 순차 탐색 이외에 다른 알고리즘을 사용할 수 없지만 데이터가 정렬되어 있다면 이진 탐색이라는 강력한 알고리즘을 사용할 수 있다. 대표적인 정렬의 종류로 버블정렬, 퀵정렬, 삽입정렬 등이 있다.  버블정렬버블정렬은 거의 모든 상황에서 최악의 성능을 보여준다. 단, 이미 정렬된 자료에서는 1번만 돌면 되기 때문에 최선의 성능을 보여준다. 시간복잡도는 O(n²). 버블정렬은 다음과 같은 순서로 작동한다.1. 앞에서부터 현재 원소와 바로 다음의 원소를 비교2. 현재 원소가 다음 원소보다 크면.. 2024. 5. 17.
[트러블슈팅] Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.2" 에러 내용A problem occurred configuring root project 'projectName'.> Could not resolve all files for configuration ':classpath'. > Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.2. Required by: project : > org.springframework.boot:org.springframework.boot.gradle.plugin:3.1.2 해결프로젝트를 클론받아 IntelliJ에서 빌드하였는데 위와 같은 에러가 발생했다. spring boot 3.x 버전은 JDK 17 이상을 사용해야 한다고.. 2024. 5. 17.