분류 전체보기(116)
-
Pure Java 프로젝트 의존성 포함법 : Shadow Plugin
1. 문제의 시작: 해축갤 인기 게시물 트래픽 추적 중 에러 해외축구갤러리의 인기 게시물 트래픽을 추적하기 위해 Java 프로그램을 개발하고 Gradle 빌드 시스템을 사용하여 빌드한 후 실행했습니다. 그러나 "java.lang.NoClassDefFoundError: org/jsoup/Jsoup"라는 Gradle 빌드 관련 에러가 발생했습니다. 이는 Spring Boot 프로젝트에서는 경험하지 못한 문제였습니다. Spring Boot 는 jar 파일 빌드시 기본적으로 모든 dependency를 포함하기 때문입니다. 2. Gradle의 기본 동작 이해하기 이 문제를 해결하기 위해 Gradle 커뮤니티의 토론을 참고했습니다. First of all, the default jar that Gradle prod..
2024.01.29 -
우아한남형제들에서 배우는 쉬운 Eureka 서비스 등록 방법
우아한 남형제들 서비스에서 팀원끼리 하나 협의를 한 것이 있습니다. 팀원이 사용해야 될 여지가 있다면 문서로 서로 공유하기로 한 것이죠. 그리고 저는 Eureka를 맡아서 개발하기로 했습니다. 이미 Confluence 에다가는 팀원에게 등록하는 법에 대해 공유는 되어 있지만 무료버전 Confluence 는 문서가 Public 하게 공유가 안되어 티스토리에도 옮기게 되었습니다 :) Eureka 란? Eureka is the Netflix Service Discovery Server and Client. The server can be configured and deployed to be highly available, with each server replicating state about the regi..
2024.01.23 -
H2 Database Unique 제약 조건 찾고 지우는 법
배경 문제는 'MEMBER' 테이블에 가데이터를 삽입하는 도중, 'ROLE_ID' 필드에 대한 "Unique index or primary key violation" 오류가 발생하면서 시작. 이 오류는 '사용자' 테이블의 'ROLE_ID'에 잘못 적용된 unique 제약조건 때문에 발생했습니다. 문제 해결을 위한 접근 https://stackoverflow.com/questions/10008476/dropping-unique-constraint-for-column-in-h2 Dropping unique constraint for column in H2 I try to drop unique constraint for column in h2, previously created as info varchar(2..
2024.01.23 -
MySQL 데이터베이스 복구 실패: 실험에서 배운 교훈과 데이터베이스 관리 전략
? DB 가 죽어버렸다. 껐다 켜면 되겠지라는 생각으로 다음 명령어를 쳤는데 brew services restart mysql 여전히 안된다. 원인 분석 그래서 로그를 확인하기 위해 ‘/usr/local/mysql/data/mysqld.local.err’ 을 까보기로 마음을 먹었다. 근데 파일이 자그마치 12MB 나 되는 파일을 일일이 읽는다는 건 비효율적이 판단했다. ERROR 관련 키워드(ex. ‘ERROR’, “Assertion Failure’, ‘crash’) 만 따로 추출해 분석해 보기로 했다. # 로그 파일에서 특정 키워드를 포함하는 부분을 찾아냅니다. keywords = ["ERROR", "Assertion failure", "crash"] matching_lines = [] for line..
2024.01.23 -
애자일 방법론 도입과 우아한남형제들 프로젝트의 변화
애자일 도입 배경 사실 우아한 남형제들 프로젝트는 시작한 지 벌써 근 2달은 되어갑니다. MSA 고민할바엔 일단 시작해보자라는 말과 함께 시작한 게 작년 12월이니깐요. 팀은 현재 백엔드 4명이고, 필자를 제외하곤 전원 취업후 바쁘게 살아가고 있고, 필자는 현재 취업을 위해 해축갤 이라는 프로젝트를 진행하고 있습니다. 다들 회사나 개인 프로젝트에 치중하느라 우아한 남형제들 프로젝트는 뭔가 진행이 되긴 하지만 사실상 잠정 중단 상태나 다름 없었습니다. 진전은 거의 없었고, 뭘 하긴 하더라도 서로 뭘 하는지 전혀 트래킹이 되지 않았기 때문에. 2023 연말에 주변 정리를 하다 이렇게 하다가는 서로의 시간만 버리겠다고 생각해 서로의 솔직한 프로젝트 회고 및 회의가 필요하다고 느껴 신년 기념 1월 1일에 모이자..
2024.01.21 -
Gradle에서 조건부 Jacoco 적용하기: CI/CD 파이프라인 최적화
최근에 우테크 블로그를 읽고, 코드의 품질을 관리하기 위해 Jacoco라는 도구를 도입했습니다. Jacoco는 코드 커버리지를 측정하는 도구로, 제가 작성한 테스트가 얼마나 코드를 잘 커버하는지 알려줍니다. 이를 통해 놓친 테스트 케이스를 찾아내고, 더 견고한 코드를 작성할 수 있었죠. 하지만, 실제 업무 중 급박한 상황을 겪으며 '긴급할 때는 코드 커버리지를 잠시 무시하고 버그부터 고쳐야 한다'는 생각이 들었습니다. 그래서 Jacoco 검사를 상황에 따라 선택적으로 실행하도록 설정하는 방법을 모색했습니다. Jacoco 설정 과정과 브랜치 변경 1. 첫 시도 - 우테크 블로그의 기본 설정: test { finalizedBy 'jacocoTestReport' } 설명: 이 설정은 Gradle의 test 태..
2024.01.10