본문 바로가기
반응형

개발/JAVA27

[JAVA] java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.error(Ljava/lang/String;Ljava/lang/Object;)V] 공통 사용되는 기능을 라이브러리로 만들었다. 이 공통 기능을 모아둔 프로젝트의 pom.xml에는 log4j-api.jar를 선언하였고, 이를 이용하여 log를 남겼다. ex) log.error("에러 발생");, log.debug("처리 완료"); 하지만 다른 프로젝트에서 공통 라이브러리를 사용하니 로그를 남기는 부분에서 아래와 같은 에러가 발생하였다. Servlet.service() for servlet [appServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: org.apache.logging.log4j.Logger.error(Lja.. 2022. 3. 25.
[JAVA] HttpClient 로그 남기기, 로그 레벨 제어하기 org.apache.http.client.HttpClient 의 로그가 로깅되지 않아 살펴보니 JCL과 slf4j의 브릿지 역할을 하는 'jcl-over-slf4j' 라이브러리가 빠져있었다. 이 부분에 대한 자세한 설명은 이 블로그를 참고하기! https://dololak.tistory.com/635 pom.xml에 jcl-over-slf4j 라이브러리를 추가해주었고 org.slf4j jcl-over-slf4j ${slf4j.version} log4j2를 사용하고 있었기에 log4j2.xml에 아래와 같이 추가해주었다. 2022. 3. 25.
[JAVA] jackson -JsonInclude 속성 (null, empty등의 데이터 제외하기) VO객체를 JSON으로 변환할 때 포함되면 안되는 변수에 @JsonIgnore 어노테이션을 선언하여 JSON에 포함되지 않도록 할 수 있다. 하지만 상황에 따라 json 포함 여부가 달라지는 경우 아래와 같은 방법을 사용하면 된다. ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //null인 데이터를 제외하고 json 생성 mapper.writeValueAsString(testVO); VO에 default로 적용하려면 VO Class에 @JsonInclude 어노테이션을 선언하면 된다. @JsonInclude(JsonInclude.Include.NON_NULL) .. 2022. 3. 11.
[JAVA] The method getRealPath(String) from the type ServletRequest is deprecated WEB-INF 경로에 있는 특정 파일의 절대경로를 가져오려고 아래와 같이 작성했는데 'The method getRealPath(String) from the type ServletRequest is deprecated'라는 경고 문구가 표시되었다. request.getRealPath("/WEB-INF/xxx/xxx.txt"); 해결방법 request.getSession().getServletContext().getRealPath("/WEB-INF/xxx/xxx.txt"); jsp에선 아래와 같이 바꿔주면 된다! application.getRealPath("/WEB-INF/xxx/xxx.txt"); 2022. 3. 11.
[JAVA] com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0xbf 서버로 한글이 포함된 json 메시지를 보냈는데 아래와 같은 에러가 발생하였다. com.fasterxml.jackson.databind.JsonMappingException: Invalid UTF-8 start byte 0xbf 한글을 입력하는 html의 contentType 및 pageEncoding이 UTF-8로 선언되어있음에도 불구하고, 서버쪽에서 UTF-8로 받지 못하였다. 그리고 json string을 바이너리로 변환할 때 UTF-8로 인코딩되도록 하였지만 현상은 동일했다. 해결방법 1 Run>Run Configurations에서 Tomcat 선택 후 Common 탭에서 Encoding을 UTF-8로 바꿔준다. 해결방법 2 Run>Run Configurations에서 Tomcat 선택 후 Arg.. 2022. 3. 8.
[JAVA] 객체 복제(clone)와 Shallow Copy, Deep Copy 객체를 복제하기 위해서는 Cloneable을 구현하고, clone() 메소드를 오버라이드하면 되서 간단하다! @Getter @Setter public class Person implements Cloneable{ private String name; private int age; @Override public Object clone() throws CloneNotSupportedException { return super.clone(); } } 그리고 아래와 같이 person1.clone(); 을 사용하여 person1의 객체를 복제하였다. Person person1 = new Person(); person1.setName("홍길동"); person1.setAge(30); try { Person pers.. 2022. 2. 16.
[JAVA] 싱글톤 패턴(Singleton Pattern) : 멀티 스레드 환경에서의 문제점 싱글톤 패턴이란? 한마디로 정의하자면 '객체를 단 하나만 생성하도록 하는 디자인 패턴'! static이기 때문에 고정된 메모리 영억을 얻으며, 모든 클라이언트(클래스)에서 해당 인스턴스를 사용할 수 있어서 공통된 객체를 다수의 클라이언트에서 사용해야하는 상황에서 주로 사용 된다. 싱글톤 패턴의 예제를 보면 아래와 같은 형태가 대부분이다. 본인도 싱글톤 클래스를 작성할 때 이렇게 작성하였는데, 이런 경우 멀티스레드 환경에선 두개 이상의 스레드가 getInstance()를 하게 될 경우 두개의 인스턴스가 생성되는 문제가 생길 수 있다. (= 동시성 문제, thread unsafe) public class Singleton { private static Singleton singleton = null; pri.. 2022. 2. 10.
[JAVA] Priority Queue(우선순위 큐) 우선순위 조건 변경하기 Priority Queue FIFO(First In First Out)인 일반적인 Queue와 다르게 Priority Queue는 우선순위가 높은 데이터가 먼저 Out된다. 기본적으로 오름차순 정렬을 하게 되는데 정렬 기준을 바꾸고 싶다면 람다식을 이용하거나 Comparator, Comparable를 이용해야 한다. Integer는 Collections.reverseOrder()를 통해 간단하게 내림차순 정렬을 할 수 있다. PriorityQueue pq = new PriorityQueue(Collections.reverseOrder()); pq.add(5); pq.add(7); pq.add(10); pq.add(3); System.out.println(pq.poll()); // 10 출력 add가 아닌.. 2022. 2. 7.
728x90
반응형