소스 레벨 애노테이션을 정의하고 컴파일을 할때 아래와 같은 에러가 발생했다.. javac -processor processor compileJava 명령어를 치니까.. error: Could not instantiate an instance of processor 'com.yong.java10.AnnotationProcessor' 1 error 왜 안되는건지 정말 오랜시간 탐구했는데....내가 processor 클래스의 접근제어자를 default 로 해놨었다 ㅡㅡ;;IDE가 만들어주는대로 썼으면 public이 붙어있었을텐데 다른데서 작성하고 복붙하다가.... 이것때문에 주말 몇시간 날렸다.
스프링에서 AOP를 구현하는 방법중 하나가 dynamic proxy 를 이용하는 방법이다. 특별한 내용은 아니고, dynamic proxy 를 직접 구현해보는 포스팅을 하나 하고자한다. public interface Inter { String toMessage(); } 먼저 인터페이스를 하나 정의해준다. 예제를 위한 인터페이스라 대충 만들었다. 이제 proxy 를 구현해주자. Proxy 클래스에있는 팩토리메서드를 호출하면 된다. public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)(호출해야할 메서드) 파라미터들을 확인해보자. 클래스로더와 구현해야할 인터페이스, 그리고 호출핸들러를 필..
API 문서화 도구로 swagger 를 세팅하는데 objectMapperConfigurer bean을 생성하다가 예외가 발생하는 경우가 있다. 그러면서 java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper 이런 에러메세지가 나올수있는데 당황하지말고 jackson 의존성이 있는지 확인해보자. 레거시 프로젝트에 swagger 를 설정하고있는데, jackson이 없을거라는 생각은 전혀 못하고있어서 삽질을 좀 했다.
JDK6로 돌아가고있는 서버를 JDK8로 업그레이드를 해야했다. 자세히말하면 JDK 뿐만아니라 Spring3을 Spring5로, Tomcat6를 Tomcat8로 함께 업그레이드를 진행했다. Spring 버전이 변경되면서 인터페이스자체가 변경된 몇가지 부분외엔 크게 수정이 필요하지않았다. 수정해야할 부분을 모두 수정하고 서비스에 투입하자 갑자기 예외로그가 쭉쭉 올라오기 시작했다. 기존 JDK6에서는 발생하지않았던 문제이며, 발생한 예외는 ConcurrentModificationException 이었다. 예외로그가 쭉쭉 쌓이다보니 일단 서비스에서 제외하고 원인을 찾기시작했다. 보통 ConcurrentModificationException은 Iterator가 반복하고있을때 내부에서 remove등으로 Colle..
아직 Java9을 사용해본적은 없지만 Java9이 나오고 초창기에 롬복을 사용할 수 없다는 이슈를 들은적이 있다. Java9을 할일이 없어서 크게 신경은 쓰지않고 있었는데 얼마전 롬복의 버전업을 할일이 있었다. 기존사용버전은 1.16.14였고, 1.16.20까지 나와있길래 최신버전으로 업데이트를 했다. 그리고나서 테스트를 실행하니 여기저기서 테스트가 깨지는 문제가 발생했다. 주로(전부다) jackson을 이용해 json을 deserialize 하는 코드에서 테스트를 실패했는데 롬복이 만들어주는 생성자가 기존코드와는 다르게 변경됐다. @AllArgsConstructor public class Person { private int age = 30; private String name; } 이 코드를 롬복 버..
class 파일을 역어셈블리할때 사용하는 명령어 javap -c .class
자바를 이용해 파일 입출력 작업시 주로 io 패키지를 이용하게된다. io를 다듬은 nio(new io) 패키지가 처음 등장한게 JDK1.5 이니 상당히 오래된 셈이지만, 상당수(내가 본 바로는 전부 다) 자바 입문서들과 블로그들이 파일입출력을 io 패키지로 소개하고있어 nio에 대해 잘 모르는 개발자들이 많다. 요즘 논블럭킹(Non-Blocking)이 이슈가 되면서 io를 논블럭킹으로 처리해주는 nio도 많이 주목을 받고있는데 이 때문인지 nio 의 n 이 non blocking인줄 알고있는 분들도 많다. 하지만 위에 괄호에 써놨듯 n 은 단지 new이며, 1.7에는 nio2 패키지가 추가되어있는 상태다. 패키지작명에 좀 실패한 케이스가 아닌가 싶다. 이번 포스팅에서는 nio를 깊게 들여다보는것보다는 아..
자바를 이용해 외부 자원에 접근하는 경우 한가지 주의해야할 점은 외부자원을 사용한 뒤 제대로 자원을 닫아줘야한다는 점이다. public static void main(String[] args) { FileInputStream fis = null; try{ fis = new FileInputStream(""); }catch(IOException e){ }finally { fis.close(); } } 이정도로 끝나면 좋겠지만 문제는 저 close() 메서드도 Checked Exception 인 IOException 을 던지므로 이런 코드가 나타난다. public static void main(String[] args) { FileInputStream fis = null; try{ fis = new File..
얼마전 사내에서 작업했던 내용이다. 간단한 코드긴하지만... 코드는 각색해서 해당 내용을 포스팅하고자 한다. 1. Utils 클래스1-1. Utils 클래스 생성 요구사항 * 현재 전화번호, 주민번호, 카드번호 데이터는 - 없이 순수 숫자로만 저장되어있다. * 해당 데이터를 노출할때 -를 추가하고싶다. 음...뭐 딱히 어렵지 않은 내용이다. 어떤 내용으로 작업할지 고민을 했고, 특정 상태에 얽매이는게 아니라 인자로 넘어오는 값의 양식만 변경하면 되니 정적 메서드로 만들어도 충분하다고 판단했다. 그렇게 FormatUtils 클래스가 추가됐다. class FormatUtils { private static final String TEL_NO_PATTERN = "(02|0[\\d]{2})([\\d]{3,4})..
프레임워크가 대중화되면서 공부목적이 아닌이상 프레임워크없이 쌩 서블릿으로 웹개발을 하는 경우는 거의 없어졌다. 대표적인 프레임워크로는 스프링 프레임워크가 있을텐데 이번에 설명하고자 하는건 프레임워크에 관련된건 아니고.. 어쨋든 이 프레임워크들도 서블릿 기반에서 구동되기때문에 서블릿 매핑이 1개 이상은 필요하다. appServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring/appServlet/servlet-context.xml 1 appServlet *.do web.xml에 기술되는 대표적인 서블릿 매핑 일단 요청을 받는 1개 이상의 서블릿들을 생성하고 해당 서블릿이 다시 각각의 컨트롤러들에..
- Total
- Today
- Yesterday
- OOP
- backend개발환경
- Git
- toby
- clean code
- Kotlin
- java8
- 정규표현식
- generics
- DesignPattern
- db
- JavaScript Core
- Design Pattern
- code
- TEST
- programming
- MySQL
- java
- javascript
- Spring
- frontcode
- servlet
- mariadb
- JPA
- spring cloud
- frontend개발환경
- http
- go-core
- EffectiveJava
- Jackson
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |