전체 글 96

간헐적으로 JUnit5 테스트가 깨지는 문제

문제 사항 테스트코드가 40개를 넘어가면서 갑자기 그 이후로 간헐적으로 깨짐이 발생했다. 처음 생겼던 에러는 다음과 같았다. org.hibernate.exception.JDBCConnectionException: Unable to release JDBC Connection [The database has been closed [90098-224]] [n/a] 문제해결 시도 해당 에러를 검색해보니 원인은 다양했다. 1. H2 데이터베이스 설정 확인 H2 데이터베이스가 테스트 하나 실행하고 닫지 않도록 DB_CLOSE_DELAY=-1; 을 추가했다. 테스트가 독립적으로 실행하니깐 H2에 필요로 하는 커넥션이 많아진것으로 예상이 되어 HikariCP maximum pool size을 100개로 늘렸다. dat..

무결성 제약조건이 위배되는 경우에 대한 예외처리는 어디서 할까

문제 상황 같은 키를 가진 프로젝트를 생성하면 UNIQUE 제약조건에 의해 예외(DataIntegrityViolationException)가 발생한다. 4가지 방법 1. 서비스계층에서 flush + try catch 엔티티를 저장하고 unique key에 의해 중복이 감지되면, try catch를 통해 예외 변화를 하면 된다. flush를 해야하는 이유는 @Transactional 이 붙은 메서드에서 사용되는 CrudRepository의 save()와 saveAll()은 메서드를 호출할 때 바로 쿼리를 실행하지 않고 1차캐시에 우선적으로 저장했다가 메서드가 정상적으로 종료되면 커밋이 되어 실제 DB에 반영된다. try-catch 블럭 내부에서는 쿼리가 실행되지 않으니 잡아낼 DataIntegrityVio..

NGINX 로그가 드러낸 미확인 공격 시도 - SSL 적용

문제 배경 로컬에서 정상적으로 API를 만들고 POSTMAN으로 테스트까지 해보고 배포를 했다. 하지만 정상적으로 요청이 오질 않아(404 error) NGINX 로그를 살피던 도중 의도치 않게 다른 문제를 발견하게 되었다. (위 문제는 Reverse Proxy 설정을 잘못한거라 해결했다) 에러로그가 굉장히 많이 쌓여 있었고 그중 수상하게 용량이 매우 크고 에러로그(error.log.6.gz)가 있길래 한번 살펴봤다. 가장 첫번째 줄에 client: 124.156.187.113의 위치를 한번 검색해봤다. 무슨 홍콩 지역이 나온다. 그리고 request: "HEAD /Core/Skin/Login.aspx 이라는 요청을 보낸다. Login.aspx 이란, https://dotnet.microsoft.com/..

스토리지 용량 늘리기 (EBS)

처음 인스턴스를 시작할 때 스토리지 구성을 건들지 않았다. 스토리지 유형은 EFS, Amazon EC2 Instance Store, EBS, S3가 있다. 아마존 EBS는 인스턴스 중지나 종료에 상관없이 데이터가 유지되어 있는 영구 스토리지 이며, EC2 인스턴스를 생성할 때 프리티어로 사용할 경우 root 디바이스 유형이 기본적으로 EBS로 되어있다. 최대 30GB까지 EBS 범용 SSD를 사용할 수 있는데 난 8GiB로 설정을 해버려서 다음과 같이 프로젝트를 시작한지 몇 주만에 30%의 가용량 밖에 남아있지 않았다. 늘리는 방법은 굉장히 쉽다. 먼저 해당 인스턴스에 들어가서 스토리지의 볼륨 ID로 들어가서 볼륨 수정을 눌른 후 원하는 만큼의 크기로 늘리면 시간이 지난 뒤 할당 된다. 하지만 이로서 끝..

[Leetcode 332] 여정 재구성 - DFS, 우선순위 큐

https://leetcode.com/problems/reconstruct-itinerary/description/ Reconstruct Itinerary - LeetCode Can you solve this real interview question? Reconstruct Itinerary - You are given a list of airline tickets where tickets[i] = [fromi, toi] represent the departure and the arrival airports of one flight. Reconstruct the itinerary in order and return it. Al leetcode.com Problems 티켓[i] = [출발지, 도착지]가 한..

Algorithm/Leetcode 2024.03.06

CI/CD 파이프라인 구축 (Github Actions self-hosted runners)

신규 Repo 생성 > Actions 탭 > set up a workflow yourself 클릭합니다. CI 테스트 워크 플로우 작성 backend_ci.yml name: 애자일허브 백엔드 CI 테스트 자동화 on: pull_request: branches: - main - develop permissions: write-all jobs: build: runs-on: ubuntu-latest steps: - name: 레포지토리를 가져옵니다 uses: actions/checkout@v3 - name: JDK 17를 설치합니다 uses: actions/setup-java@v3 with: java-version: '17' distribution: 'temurin' - name: 그래들 캐시 uses: ac..

[Leetcode 347] Top K Frequent Elements - 해시테이블, 우선순위큐

https://leetcode.com/problems/top-k-frequent-elements/ LeetCode - The World's Leading Online Programming Learning Platform Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com Problems 빈도순으로 k개의 엘리먼트를 추출하라. O(nlogn)보다 더 빠른 시간복잡도로 구현해라. 입력: nums = [1, 1, 1, 2, 2, 3, 4], k = 2 출력: [1, 2] 설명: 1이 총 ..

Algorithm/Leetcode 2024.02.13

해시 테이블의 A부터 Z까지

해시를 사용하는 목적 - 해시 테이블: 해시테이블은 데이터의 해시 값을 테이블 내의 인덱스로 사용하는 자료구조이다. 필요한 데이터를 찾는 데 시간복잡도가 평균 O(1)인 굉장히 빠르게 데이터를 조회할 수 있다. - 암호화: 해시는 입력받은 데이터를 해시함수를 통해 원본의 모습을 전혀 알 수 없게 바꾼다. 이러한 해시의 특성 덕분에 해시는 암호화 영역에서 사용되고 있다. SHA 알고리즘이 대표적인 예이다. - 데이터 축약: 해시는 길이가 서로 다른 입력 데이터에 대해 일정한 길이의 출력을 만들 수 있다. 이 특성을 이용하면 대량 데이터를 해싱하여 짧은 길이로 축약할 수 있다. 해시 함수 해시테이블이란, 큰 숫자나 문자열을 해시 테이블의 인덱스로 사용할 수 있는 작은 정수로 매핑하는 함수이다. 해시함수를 고..

젠킨스 플러그인 설치 오류 - java.net.sockettimeoutException

상황 프리티어 EC2에 Swap 메모리를 설정하고 도커를 설치한다음 Jdk 11버전 Jenkins 최신버전 이미지를 run 했다. 그리고나서 추천플러그인을 설치하는데..(참고로 이후에도 jenkins/jenkins:latest 로 최신버전 이미지를 pull했는데도 같은 상황이다) 다음과 같이 몇 개의 플러그인들은 설치가 됐지만 다른 것이 설치가 안되었다. 도커 로그 명령어 (docker logs -f [컨테이너명])을 봤는데 네트워크 오류인가 SocketTimeoutException: connect timed out이라는 에러가 생겼다. 정말 여러 상황이 있는데 차근 차근 본인이 속한 오류가 뭔지 생각해보자 네트워크 연결 확인 젠킨스 이미지를 실행시킬 때 볼륨 생략하고 보통 이렇게 띄울 수 있다.`sud..

인프라 2024.02.06

[LeetCode 23] Merge K Sorted Lists - 우선순위 큐

https://leetcode.com/problems/merge-k-sorted-lists/description/ LeetCode - The World's Leading Online Programming Learning Platform Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 우선순위 큐에 정수를 넣는 방식 public ListNode mergeKLists(ListNode[] lists) { PriorityQueue pq = new PriorityQueue(); for (..

Algorithm/Leetcode 2024.02.05