본문 바로가기

개발일지

(101)
인텔리제이 Gradle dependency 인식 오류 문제 사항회사에서 기존 프로젝트를 이벤트 기반과 Kotlin 언어로 이전을 하기 위해 새로운 환경을 구성하기로 했다. 멀티 프로젝트 형식이었고, 루트 프로젝트를 구성할 때까지는 문제가 발생하지 않았다. 이후 하위 프로젝트를 몇 개 만들고 Dependency를 추가했는데 인식을 하지 못하는 현상이 발생했다. org.gradle.internal.resolve.ArtifactNotFoundException 그래서 gradle에서 다운받은 캐시에 정상적으로 다운로드가 되었는지 확인했다. 윈도우 환경에서 ".gradle/caches" 폴더 내부에서 해당 라이브러리를 찾았다. 라이브러리는 존재했기에 Cache에서 읽어오는 부분에서 문제가 발생했다고 판단을 했다. 해결 시도하기인텔리제이에서 제공하는 캐시 삭제 후 재..
Map vs DTO 사용 현업 코드를 작성하며 Map 사용 💬 입장 대기열을 위한 코드를 작성을 하게 되었다. 코드 작성을 하며, 요구 사항이 계속해서 변경이 되는 상황이었다. 그러다보니 User 데이터에 저장이 되어야 하는 값들이 계속해서 변경이 되었다. 유연하게 데이터가 변경이 되더라도 대응 가능한 Map을 사용하기로 했다. ✔ Map을 사용하며 느낀 장단점 💬 Map을 사용을 하다보니 계속 변경이 되는 저장 값들을 쉽게 대응할 수 있었다. 처음에는 빠르게 작업을 진행하는 데에 많은 도움이 되었다. 그런데 코드가 늘어나고 대기열 User 데이터가 사용되는 곳이 많아지자 오히려 작업 속도가 현저히 줄어들게 되었다. User 데이터를 가져다가 사용하기 위해 들어있는 Key 값을 기억하고 있어야 했으며, 상황에 따라 뭐가 들어있었..
[240121] 어뷰징 관련 내부&외부 허가 IP 적용 어뷰징 로직을 적용하고 간과한 것 💬 어뷰징 로직을 적용을 하고 생각지 못한 문제가 발생했다. 외부와 내부에서 허용을 해줘야 하는 IP도 벤을 걸리는 현상이 발견되었고 그로 인해 서비스 운영이 일시적으로 문제가 되었다. ✔ 내부 IP 벤 문제 발생 💬 회사 내부에서는 공통적으로 적용되는 로직은 별도의 프로젝트로 만들어 의존성을 부여를 했다. 어뷰징도 그런 로직 중 하나였고 외부 통신하는 프로젝트에만 의존성 업데이트를 했었기에 문제가 되지 않았다. 하지만 내부 통신하는 쪽 코드에 어뷰징이 담긴 모듈의 의존성을 업데이트해야 하는 상황이 발생했고 그로 인해 내부 IP에도 어뷰징 관련 로직이 적용이 되어 벤이 되는 현상이 나타난 것이다. ✔ 내부 IP 벤 대응 방안 💬 서버의 IP는 서버가 꺼졌다가 켜지거나, ..
[231210] 필요 없는 Warning Log를 제외시키기 필요 없는 Warning Log를 제외시켜야 하는 이유 💬 API를 개발하면서 무심코 무시했던 Warning들이 많았다. 실제로 코드를 실행시키는 데에는 문제가 없었기 때문이었다. 그런데 회사에서 API를 개발하면서 필요 없는 Warning까지 전부 Log에 찍히게 된다면 실제로 중요한 Warning을 놓치게 된다는 것을 알게 되었다. ✔ Project에서 Warning을 대처하기 💬 최대한 Warning이 발생하지 않도록 코드를 작성하는 것이 옳다. 하지만 Warning을 신경 쓰면서 코드를 작성할 경우 가독성이 많이 떨어지는 경우 가끔 마주하게 되는데, 이 때는 오히려 Warning을 무시하는 것이 더 좋은 방법인 것 같다. ✔ Java에서 Warning 무시하기 💬 Warning을 간단하게 무시하는..
[231126] Arrays.asList에서 사용할 때 주의할 점 Arrays.asList는 읽기만 가능하다 💬 Arrays.asList는 여러 값을 한 번에 입력해 List를 만들어주는 메서드입니다. 저는 이것을 자주 애용했습니다. 회사에서 이번에 API를 개발하면서 사용을 했는데 Arrays.asList를 통해 만들어진 List에 add 호출을 할 때 예외가 터졌습니다. 읽기만 가능한 이유? ✅ Arrays.asList로 List를 만들 경우 ArrayList가 하나 만들어집니다. 이 ArrayList안의 멤버 변수에 크기가 고정된 배열이 할당 되기 때문입니다. ➡ asList의 매개변수는 가변인자이며 각 값들이 합쳐진 배열로 만들어져 들어갑니다. public static List asList(T... a) { return new ArrayList(a); }​ ➡ ..
[231102] MySQL 데이터 분석을 위한 SQL 작성... 더 나아지기 데이터 건수가 많아 💬 건수가 2억 건 이상이 되니 데이터를 원하는 형태로 추출하는 것이 너무 느렸습니다. 30분 이상.. 1시간 이상 돌려도 원하는 동작이 완료되지 않았습니다. 그래서 저번에 6년 차 개발자님이 조언해 주신 대로 적용을 해보기로 했다. ✔ Explain 💬 먼저 각 쿼리에 대한 실행 전략을 확인하기 위해 Explain을 사용을 해보았다. 내가 작성한 쿼리는 2억 건을 그대로 가져다가 쓰는 형식으로 실행이 된다는 것을 확인할 수 있었다. 문제를 확인했으니 이것을 개선하기 위한 방법을 고려해 보았다. ✔ Where로 데이터의 건수 줄이기 💬 전체 기간으로 잡았던 것을 1년 기간으로 줄여보았다. 줄여보니 확실히 Explain에서 보여주는 Row 건수는 줄어드는 것을 확인할 수 있었다. 하지만..
[231030] MySQL 데이터 분석을 위한 SQL 작성 어려움... 데이터 분석 의도 💬 회사에서 조회 속도 향상을 위해 일정 주기로 데이터를 통합하기로 했습니다. 데이터 분석을 통해 기준을 세우고 코드를 작성해 특정 시간이 되면 배치 작업이 돌아가도록 하기로 했습니다. ✔ 데이터 분석을 하며 느낀 문제점 💬 데이터 건수가 많다보니 JOIN, WHERE 등이 들어가면 실행이 몇 십분 씩 걸린다는 것이었습니다. 거기에 더해 제가 SQL를 미숙한 것까지 합쳐져서 더 나은 방안을 제시할 수가 없었다는 것이었습니다. ✔ 문제점을 해결하기 위한 노력 💬 내가 짠 SQL문에서 더 나은 방향성은 없는지 인터넷을 찾아보면서 고쳐보는 수밖에 없다고 판단했습니다. ➡ 1번 문제점은 IN을 통해 데이터가 유효성을 검사하고 있었습니다. 찾아보니 IN은 모든 컬럼값을 직접 비교를 하기 때문에 ..
[231029] S3 데이터 이전하기 S3 데이터 이전 💬 인생퍼즐 사이드 프로젝트에서 AWS 계정을 변경하면서 S3 저장소를 옮겨야 했습니다. 새로 S3를 만들고 기존 데이터를 전부 이동시키기로 했습니다. ✔ 기존 S3에서 데이터 받기 ✅ AWS CLI를 통한 다운로드 ➡ aws s3 cp s3://itmca-public . --recursive ➡ 하위 파일들까지 전체 복사하기 위해 --recursive 옵션을 사용 ✔ 다운 받은 데이터를 새로운 S3에 업로드 ✅ AWS CLI를 통한 업로드 ➡ aws s3 sync ./ s3://lifepuzzle-public ✔ 결과 ✅ 정상적으로 전체 데이터가 새로운 S3에 업로드 된 것을 확인