본문 바로가기

All102

[Java] FilenameUtils 사용하기 Utils는 아는만큼 더 빠르고 간편하게 코드를 작성할 수 있는 것 같다. 하나하나 일일이 찾아보지는 못하니까 우연히 알게되면 나중에 사용할 수 있도록 정리를 해보려고 한다. 오늘의 주인공은 FilenameUtils이다. 개념우선 FilenameUtils가 들어있는 Apache Commons IO는, 자바 언어를 위한 오픈소스 라이브러리로 다양한 기능을 제공한다. 이 라이브러리를 사용하면  파일 및 디렉토리 관리 작업을 더욱 쉽게 처리할 수 있으며, 그 때문에 다양한 자바 프로젝트에서 많이 사용되고 있다. FilenameUtils 클래스는 파일 경로, 파일명, 확장자 등을 다루기 위한 여러 유틸리티 메서드를 제공한다. 특히 Windows에서는 \를, Unix 계열 시스템에서는 /를 경로 구분자로 사용하는.. 2024. 10. 13.
[WebSocket] Error - The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method 소켓통신을 구현하여 broadcasting으로 클라이언트에게 데이터를 보내는 중 json 형식이 깨지는 것을 발견하였고, 그것을 수정하는 과정에서 에러가 발생하였다. 막상 타입문제는 아니었지만 함께 적어본다.상황웹소켓에서 스케줄링을 하면서 브로드캐스팅으로 계속 데이터를 보내고 있는 상황이다. 그렇지만 여러 스케줄러가 하나의  'broadcast' 메소드를 호출하면서 충돌이 난 것을 확인하게 되었다.에러 내용The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for called method문제 원인스레드 동기화해당 에러는 원격서비스가 현재 텍스트 작성중인 상태로  '호출하려는 메서드에는 유효하지 않은 상태'인 경우에 .. 2023. 5. 20.
[Java] Utility Class 의문자바에서 말하는 Utility Class가 무엇일까? 뭔가 디렉토리상에도 자주 보이고, 가끔 내가 사용하기도 하지만 구체적으로 어떤 역할을 하는지, 어떤 형식을 가지는지 잘 몰랐기 때문에 정리해보려고 한다.답(1) 유틸리티 클래스란?인스턴스 메서드와 인스턴스 변수를 제공하지 않고, 매개 변수에 대해 작업을 수행하는 정적 메서드와 변수만을 제공하는 클래스Static 클래스, Stateless로 사용, 멀티스레드 환경에서 thread-safe대부분 final로 선언되어 상속될 수 없고, 생성자는 private으로 선언되어 초기화 가능성을 막는다(2) 유틸리티 클래스 사용 시 문제점강한 결합유틸클래스를 사용하는 클래스는 유틸클래스에 강한 의존성을 갖게 된다. 추상화 진행이 없으므로 유틸클래스 변화는 해당 .. 2023. 4. 23.
[Tomcat] 톰캣 다중 구동환경 시 로그인 끊김 현상 / jsessionid 충돌 상황하나의 서버에 2개의 서비스 각각 설치 후 둘 다 한번에 접속하면 접속이 되지 않는 에러가 발생하였다고 문의가 들어왔다.테스트 환경tomcat : 각각 다른 톰캣 사용port : 각각 다른 포트context path : 두개 모두 동일 (같은 서비스이기 때문)DB : 각각 다른 DB 환경해결 과정우선 접속은 되는 것까지 확인하였는데 하나의 서비스에서 로그인 되었을 시, 다른 쪽 서비스에서 로그인이 풀리게 되어버렸다. 개발자 도구의 쿠키 세션값을 확인해보니 동일한 값을 가지고 있는 것을 발견하였다! 구글링을 해보니 모두 jsessionid의 충돌문제이고 대부분 로그인이 풀리는 동일한 문제를 겪고 있었다. 그래서 나도 처음에는 구글에서 제일 많이 나와있는 tomcat 설정 변경을 시도해보았다.(1) to.. 2023. 4. 6.
[Java] Error - Invalid property 'maxWait' of bean class 상황예전 브랜치에서 작업했던 내용들을 깃 cherry-pick을 사용해서 가장 최신 브랜치를 기준으로 커밋하는 작업을 하고 있었다.에러 내용org.springframework.beans.NotWritablePropertyException: Invalid property 'maxWait' of bean class [org.apache.tomcat.dbcp.dbcp2.BasicDataSource]: Bean property 'maxWait' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?문제 원인이 에러는 BasicDataSource 클.. 2023. 3. 29.
[Java] Error - Illegal hexadecimal character q at index 0 상황javascript로 작성된 aesUtil 파일을 rust 파일로 변환 후 encrypt 된 값을 받아와 자바에서 decrypt 하는 과정 중에 에러가 발생하였다. 에러 내용org.apache.commons.codec.DecoderException : Illegal hexadecimal character q at index 0문제 원인에러내용 자체를 파악해보자면, 인덱스 0자리에서 16진수 문자열에 맞지 않는 'q'가 들어갔다는 에러이다. 당연하다. 왜냐하면 16진법 문자열은 0부터 9까지의 숫자와 A부터 F까지의 알파벳 대문자로 구성되기 때문에 'q'는 포함되지 않는다. 따라서 코드를 검토하고 유효하지 않은 16진수 문자를 찾아 수정해야지 에러를 수정할 수 있다.결론은 javascript로 작성된 .. 2023. 3. 23.
[Tomcat] Warning - To Prevent a Memory Leak, the JDBC Driver Has Been Forcibly Unregistered 상황톰캣에서 에러는 아니지만 메모리릭 관련 워닝이 발견되어 찾아보았다.에러 내용 The web application registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.메시지 의미Tomcat은 웹 애플리케이션을 배포할 때 postgresql Driver JDBC 클래스가 등록되었지만, 동일한 애플리케이션을 제거할 때 등록 해제되지 않았다는 것을 알려주고 있다.문제 원인문제의 원인은 JDBC 드라이버의 부적절한 구현이라고 .. 2023. 3. 22.
[Git] cherry-pick 상황이번에 다른 피처 브랜치에서 개발한 기능을 현재 최신 브랜치에 병합하는 작업을 해야한다. 어떻게 해야할지 생각을 해보다가 책임님께서 merge와 rebase, cherry-pick을 힌트로 주셔서 실행으로 옮기기 전에 개념을 정리해보려고 한다. 뭔가 익숙하지만 확실히 알고있는게 없었다. Cherry-pick 이란?다른 브랜치에 있는 커밋을 선택해서 내 브랜치에 적용할 때 사용하는 명령어커밋 자체를 옮기는게 아니고 같은 내용을 가지고 있는 커밋을 하나 더 생성하는 것이므로 전체 히스토리를 보았을때는 커밋이 늘어나는 것이다. 그러므로 꼭 필요할 때만 사용할 것!// 체리픽 명령어git cherry-pick // 여러 커밋을 한꺼번에 하고싶을 때git cherry-pick // 연속적인 커밋일 경우 .. 2023. 3. 17.
[Java] HashSet HashSetSet자바의 인터페이스의 한 종류 (ADT = abstract data type = 인터페이스)그 인터페이스를 구현한 class = data structure (자료구조)중복을 허용하지 않는다순서를 보장하지 않는다method = add, contains, delete 등Set 종류(1) hashSet - 순서를 보장하지 않는다(2) sortedSet - 순서를 보장한다Hash Set 구현 방법HashSet의 구현은 HashMap을 활용해서 구현이 되어 있다Hash Mapkey : valuekey는 중복이 되지 않는다그러므로 HashSet은 HashMap의 Key부분을 활용한다.참고 : https://www.youtube.com/watch?v=1Hxm6f33VbY 2023. 3. 10.