분류 전체보기 358

Spring Boot 1.5 -> 2.5 마이그레이션 회고

Intro 최근 스프링 부트 1.5 버전으로 작성된 프로젝트를 Spring Boot: 2.5.10 버전으로 올리는 작업을 진행 하였습니다. 스프링부트 앞자리 버전 차이가 굉장히 큰데, 온라인 게임에 비유한다면 메이플스토리에서의 빅뱅 혹은 와우의 대격변 전후를 생각하면 이해가 빠르겠습니다. 단순히 pom.xml에서 버전 명시를 변경한다고 뿅 하고 바뀌는건 아니고, 스프링 부트 변경에 따라 여러가지 클래스가 사라지고 새로 생겨났으며 각종 메서드들의 변화도 상당합니다. 스프링 설정 하는 방법도 달라지고, 구석구석 영향이 가지 않는 곳이 거의 없기 때문에 프로젝트가 크면 클수록 그 여파가 상당합니다. 제가 이번에 마이그레이션을 진행한 프로젝트도 몇년간 진행되며 몇번의 고도화를 거친 프로젝트이다 보니 규모도 제법..

일간에러 2022-03-15 WARN No appenders could be found for logger

Intro log4j:WARN No appenders could be found for logger (io.github.makbn.thumbnailer.util.mime.MimeTypeDetector). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.Spring Project 실행 시 위와 같은 에러가 발생했다. 일단 log4j 1.2 라는 에러 문구에서 쉽게 느낌이 왔기 때문에 어렵지 않게 해결 할 수 있겠다. 원인 일단 위에서 안내 해 주는 링크로 이동하면 https://logging.apache.or..

HikariCP) Connection Pool 설정 및 확인하기

Intro 실제 사용하는 커넥션 수에 비해서 커넥션 풀을 넉넉하게 잡고 있었는데, 해당 DB를 여기저기서 다 사용하다 보니 커넥션 풀을 조금 타이트하게 가져가 달라는 요청을 받았습니다. Connection Pool을 조절하고, 실제로 DB에서 커넥션을 몇개나 물고 있는지 확인 해 보도록 하겠습니다. 설정 application.yml 스프링 부트에서 Hikari 설정은 spring.datasource.hikari 에 합니다. 변경 전 spring: datasource: type: com.zaxxer.hikari.HikariDataSource driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/postgres usern..

일간에러 2022-03-04 Lombok@Slf4j 적용 에러 해결

Error java: Can't get the delegate of the gradle IncrementalProcessingEnvironment. java: cannot find symbol symbol: variable log location: class openapi.OpenApiController롬복 플러그인을 활용해 @Slf4j 어노테이션을 사용하던 중 위와 같은 에러 발생. 해결 방법1 보통의 경우에는 Annotation Processor 설정이 안되있거나 Lombok 플러그인이 설치되어 있지 않을 때 발생. 둘중 하나라도 걸린다고 생각한다면 Lombok 플러그인이 설치되어 있는지 확인 하고, 없으면 설치 Preferences -> Build, Execution, Deployment -..

Java) 클립보드에 텍스트 복사 / 붙여넣기

Intro 저에게 필요한 기능이 있어 쉘에서 간단하게 만들어 보려고 했는데.. shell script에는 제가 익숙하지가 않아서 자바로 프로그램을 작성 하고 alias로 등록 해서 사용하기로 했습니다. 해당 기능을 구현하며 클립보드로 텍스트를 복사해내거나 클립보드에 있는 텍스트를 꺼내오는 기능을 사용 해야 했는데 굉장히 생소해서 해당 내용을 정리 해 보았습니다. 복사, 붙여넣기 코드만 확인 하실분은 복사의 경우 Copy to the clipboard 부분의 코드를, 붙여넣기가 필요한 분은 맨 아래의 argument 없이 실행 부분의 코드만 확인 하시면 됩니다. Requirements 저는 LeetCode 문제풀이를 할 때 테스트 코드 작성이나 디버깅등을 위해 IDE로 옮겨와 작업을 합니다. 매번 적당한 ..

Programming/Java 2022.02.26

Swagger 활용 API Document 자동 생성

Intro 프론트엔드와 백엔드의 업무가 점점 더 구분되어가고, MSA가 보편화되고 있는 지금의 추세에서 RESTAPI의 쓰임이 점점 더 많아지고 있습니다. 외부에 공개하는 API 뿐만 아니라 소프트웨어 내부적으로만 사용하는 API라고 해도 어플리케이션이 점점 커질수록 개발자의 기억력에만 의존하기에는 그 규모가 점점 버거워지기 마련입니다. 특히나 API를 공개하거나 개발자간의 협력에서 필요한 상황이 오면 체계화된 읽기 좋은 API Document의 작성은 선택이 아닌 필수입니다. 마침 회사에서 진행중인 프로젝트에도 조금의 여유가 생겨 API Document 정리를 해야할 때가 왔습니다. 여러가지 오픈소스 선택지가 있습니다만 이번에는 Swagger를 선택해서 테스트를 진행 해 보았으며 꽤나 만족스러웠습니다...

Development/DevOps 2022.02.23

Linux) H2 Database 설치 및 실행

Intro 우분투에서 H2 Database 를 사용할 일이 생겼습니다. MacBook 에서는 사용하고 있었는데 우분투에 설치하며 리눅스에서는 조금 다른점이 있을지 궁금하기도 했습니다. 결론적으로는 MacOS에 H2 Database를 설치할때와 우분투에 설치할때 그 과정에는 전혀 차이가 없었습니다. 단 한가지 차이가 있는데 맥에서나 우분투에서나 h2.sh 파일이 실행 권한 없이 압축이 풀리는건 같았지만 맥북에서는 그래도 그냥 실행이 되는데 리눅스에서는 실행 권한을 변경 해 줘야 실행이 가능 했습니다. Installation Download 설치를 위해 H2 Database 홈페이지에 방문합니다. http://www.h2database.com/html/main.html 가운데에 있는 Download 에서 A..

IT Computer/Linux 2022.02.23

Leetcode) TreeNode.java

Intro LeetCode 의 코딩 문제들을 풀다보면 자주 나오는 Node 계열 클래스들이 있습니다. 대표적으로 TreeNode와 ListNode 등이 있는데요. 처음 이런 문제를 접할 때에는 너무 당황해서 어떻게 풀어야 할지도 모르고 테스트 코드를 작성하기도 참 막막 한데요, 지금은 어느정도 익숙 해 졌다 보니 묵묵히 inner class로 복사해 집어 넣은 후에 코드를 작성 하기 시작합니다. TreeNode 예제 문제 https://leetcode.com/problems/range-sum-of-bst/ ListNode 예제 문제 https://leetcode.com/problems/merge-nodes-in-between-zeros/ 하지만 매번 같은 코드를 복사해서 이너클래스로 넣어서 만드는 것도 ..

Mac) 화면 분할을 위한 Rectangle

Intro MacOS에서 화면분할용 프로그램중에 가장 유명한 프로그램은 단연 Magnet 입니다. 종종 $0.99 세일도 한다고 해서 저도 구입을 하려고 Black Friday도 기다려보고, Boxing데이도 기다렸는데 세일을 할 생각을 안하더라고요.. 혹시 내가 이걸 샀는데 Apple이 MacOS에서 정식 기능으로 제공하면 어떡하지? 하는 맘에 정가에 못사고 있는 Magnet 아쉬운 대로 지금까지는 오픈소스중에 가장 괜찮다는 Spectacle을 꾸준히 사용 해 왔습니다. 나름 필요한 기능도 다 있고 속도도 빠릿빠릿 해서 단축키만 잘 설정 해 주면 괜찮게 사용 할 수 있습니다. Windows나 Linux에서 사용하던 창 분할 들에 비하면 부족한 느낌이 없지않긴 하지만 그래도 꾸준히 사용 해 왔는데요 Sp..

IT Computer/Mac 2022.02.16

JAVA) Equals를 override 할 경우 hashCode도 오버라이드 해야 하는 이유

Intro 몇일 전 Equals를 Override 해서 사용 하던 중, hashCode를 오버라이드 하지 않아 문제가 있었습니다. 많은 java 관련 책들에서는 equals의 오버라이드 시에는 hashCode도 꼭 함께 오버라이드 해야한다고 말하고 있는데, 정작 그 이유를 알지 못해 여태 간과 하고 있었습니다. 그러다 마침내 해당 문제에 봉착 했습니다. equals로 비교 했을 때 같은 값 이라면 Set에 담을 때에는, 별개로 담기지 않아야 하는데 각기 다른 객체로 인식하며 각각 담기는 것 이었습니다. 이로인해 약간의 혼란을 겪은 후로 왜 Equals를 오버라이드 할 때에는 hashCode도 함께 오버라이드 해 줘야 하는 이유에 대해 확실하게 깨달을 수 있었습니다. 이번 경험을 통해 익힌 내용을 쉽고 간..

Programming/Java 2022.02.13

일간에러 2022-02-10 Name for argument of type [java.lang.String] not specified

Intro 영한님의 JDK 동적 프록시를 활용한 동적 프록시 기술을 실습 해보던 중 예기치 못한 에러가 발생했다. 응답 코드는 500이며 에러 전문은 아래와 같다. java.lang.IllegalArgumentException: Name for argument of type [java.lang.String] not specified, and parameter name information not found in class file either. at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.updateNamedValueInfo(AbstractNamedValueMethodArgumentResolver..

Java) String의 Immutable이 의미하는 것

Intro 자바 개발자들은 Java에서의 String이 immutable 하다는 사실을 대부분 잘 알고 있습니다. 하지만 그 불변의 속성이라는게 이해하기에는 마냥 쉬운게 아닌데요, 혹자는 String temp = "abc"; temp = "123" 의 예를 들며, String 타입 변수인 temp의 값이 변했는데요! 라고 주장 하기도 합니다. 또한, String은 primitive Type(기본 타입)이 아닌 Reference Type(참조 타입) 인데요, 이게 참 헷갈리게 만들때가 많습니다. 참조타입이라서 String을 call by reference로 이용해보려고 하면 그건 또 안되거든요. 그래서 이번에는 String의 불변이 의미하는 것에 대해 자세히 알아보겠습니다. String Object의 생성..

Programming/Java 2022.02.06

HTML) href 속성의 html 링크 절대 경로로 강제하기

Intro 얼마전 프로젝트를 진행 하던 중에 하나 난관에 부딪친 일이 있었습니다. 유저가 URL을 입력 하면, DB에 저장 해 두었다가, 필요 할 때 해당 URL 주소로 연결되는 링크를 만들어 주는 기능을 만들고 있었는데.. 테스트를 진행 하다가 주소로 제대로 연결이 되지 않는 문제가 있었습니다. https:// 라고 프로토콜을 정확하게 입력 하면 연결에 문제가 없었지만, 프로토콜을 생략하고 www.naver.com 과 같은 값을 넣었을 때는 절대경로가 아닌 상대경로로 연결을 시도 하는 문제가 있었습니다. 간단하게 해결 하는 문제지만 생각보다 검색했을 때 해결방법이 나오지 않아 고생을 조금 했지만 결국 고칠 수 있었습니다. 문제 재연 먼저 해당 문제를 똑같이 재연 해 보겠습니다. 이를 위해 아주 간단한 ..

Development/HTML ⁄ CSS 2022.01.30 (1)

Ubuntu) 우분투에서 카카오톡 실행 (100% 정상작동 방법)

Intro Windows나 Mac에서 되는데 Linux에서는 할 수 없는거야 셀수 없이 많지만 왠만한거는 다 괜찮습니다. 어딘가에 대체할 만한 소프트웨어가 다 있기 마련이며 크리티컬 한 소프트웨어 일수록 사용 가능 할 확률이 높습니다. 심지어 Third Party 소프트웨어들이 정말 많기 때문에 저는 Notion, Apple music, iCloud Drive, Github Desktop 등 공식 지원 하지 않는 소프트웨어들을 사용 하고 있으며 심지어 intelliJ IDEA, Visual Studio Code, Postman, Dropbox, Typora, Slack 등은 제조사에서 Linux를 공식적으로 지원을 해 줍니다. 하지만 그중 하나 한국인이라면 모두가 사용하지만 리눅스에서 사용 할 수 없는 ..

IT Computer/Linux 2022.01.29

JAVA) String 순회 - 배열만들기 vs charAt

Intro 오래전부터 String 을 파싱할 때 마다 고민이 있었습니다. charAt으로 인덱스를 순회하며 해당 위치에 있는 문자를 확인 할 것인가. 아니면 해당 스트링을 캐릭터 배열로 만들어 둔 다음에 배열의 인덱스로 순회 할 것인가. 사실 개인적으로는 배열 인덱스를 찾아 가는게 빠를 거라고 생각해서 charAt을 잘 안썼었는데요. 문득 의문이 들어서 테스트를 해 봐야 겠다는 생각이 들었습니다. 코드 확인 chatAt(index) 먼저 String의 charAt 함수를 확인 해 보았습니다. 코드를 보는순간 너무 부끄러웠습니다. 분명 자바 기초를 처음 학습 할 때, String은 사실 캐릭터 배열이라는걸 배웠었습니다. 배웠다는건 기억 하는데 정작 String의 작동 원리를 여태 잊고 사용 해 왔다는게 내..

Programming/Java 2022.01.29