최근 가장 많이 하는 생각이 어떻게 해야 로그와 예외 처리를 잘 할 수 있을까에 대한 고민이다. 자바에는 여러 로깅 라이브러리가 있는데, 그 중에서 오늘은 log4j2를 사용해 로깅 설정을 해보자. log4j2는 다음 표에서 알 수 있듯이 Multi Thread 환경에서 비동기 로거의 경우 다른 로킹 프레임워크보다 많은 처리량과 짧은 대기 시간을 제공한다. 마침 멀티쓰레딩 프로그램에 사용할 예정이기에, 아주 적합하다고 볼 수 있다. 개발환경 Plain java java17 wsl2 - ubuntu18.04 의존성 추가 먼저 최신 log4j2에 대한 의존성을 build.gradle에 추가해준다. dependencies{ . . implementation 'org.apache.logging.log4j:log..
gson은 json 파일의 내용을 읽어서 java 객체로 만들어주는 라이브러리다. implementation 'com.google.code.gson:gson:2.8.9' 위와 같이 build.gradle에 의존성을 추가하면 사용 가능하다. 그러나 해당 라이브러리를 참조하는 과정에서 오류가 생길 때가 있었다. intellij등의 IDE를 통해 자바 프로젝트를 실행하면 라이브러리를 잘 참조했으나, jar 파일로 만들어 실행하면 다음과 같은 에러가 뜨는 것이었다. Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson at Potatonet.PortScan.application.APICaller.getIpListWithPo..
해당 자료형을 java.util.Date 로 변경해주면 해결된다. reference https://coderanch.com/t/515027/databases/SerializationException-deserialize
프로젝트를 여러개 진행하다보면, 프로젝트에 맞는 자바 버전을 선택하게 된다. 따라서 Java의 버전을 바꿔가며 사용해보자. 개발환경 : WSL2 + ubuntu18.04 현재 자바 버전 확인 우선 현재 사용중인 자바 버전을 확인해준다. 원하는 자바 버전 선택 이후 기존 설치된 자바 버전 중 원하는 자바 버전을 선택하기 위해, 다음 명령어를 입력해준다. sudo update-alternatives --config java 위와 같이 자바 버전들이 보이면, Selection에 나와있는 숫자를 키보드로 입력하면 해당 버전으로 자바 버전이 변경된다. 17버전이 잘 적용된 모습이다. 자바 컴파일러 버전 변경 자바는 자바만 버전을 바꿔주는 것이 아닌, 자바 컴파일러 또한 버전을 변경해주어야 한다. 다음 수순으로 자..
상속(Inheritance)이란? 객체지향 프로그래밍, OOP에는 다음과 같은 특징들이 있다. 1. 상속과 인터페이스 (계층성) 2. 다형성, 사용편의성 (모듈화) 3. 캡슐화, 정보은닉 4. 자료 추상화 (모델링) 5. 동적 바인딩 자바에서 상속은 세가지로 구현할 수 있다. extends 부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음 implements (interface 구현) 부모 객체는 선언만 하며 정의(내용)은 자식에서 반드시 오버라이딩 (재정의) 해서 사용해야함 abstract extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음 extends 상속의 가장 대표적인 형태이다. 부모의 메소드를 그대로 사용할 수 있으며..
Lombok이란? Lombok이란 어노테이션 기반으로 코드를 자동완성 해주는 Java 라이브러리이다. Lombok은 기계적인 코드 작성 ex)생성자, getter, setter등에 대한 코드 작성을 자동화하여 코드 다이어트를 도와준다. Lombok을 이용하면 Getter, Setter, Equlas, ToString 등과 다양한 방면의 코드를 자동완성 시킬 수 있다. Lombok 사용예시 getter, setter 만약 어느 프로젝트를 진행하면서, 변수를 많이 가지고 있는 DTO 혹은 VO 클래스를 만든다고 생각해보자. public class customer extends user { private String name; private String age; private String telephone; ..
Spring으로 개발을 하다보면 @Bean과 @Component를 언제 써야할지 헷갈릴때가 있다. 둘다 목적이 명확하지 않은 Bean을 생성할때 사용하는 어노테이션인데, 정확히 차이를 짚고 넘어가보자. @Bean VS @Component (@Bean) (@Component) 위 예시처럼, @Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. (예를 들면 ObjectMapper의 경우 ObjectMapper Class에 @Component를 선언할수는 없으니 ObjectMapper의 인스턴스를 생성하는 메소드를 만들고 해당 메소드에 @Bean을 선언하여 Bean으로 등록한다.) 개발자가 생성한 Class에 @Bean을 선언하는 것 또한 불가능하다. 개..
Java와 Spring으로 개발을 하다 보면 Bean이라는 개념이 자주 등장한다. 자주 사용하는 용어이지만 제대로 정리하고 넘어간 적이 없는 것 같아서, 한번 깔끔하게 정리하고 넘어가야 할 것 같았다. Java Bean 먼저 Java Bean에 대해 알아보자. 결론부터 말하자면 Java Bean은 특정 형태의 클래스를 가르키는 뜻으로 사용된다. DTO 혹은 VO의 형태가 Java Bean이라고 생각하면 쉽다. [백엔드 기술 면접 대비] - 1. DAO, DTO, VO란? 오늘은 데이터 컨트롤의 기초라고 볼 수있는, 데이터 객체들에 대해 한 번 짚고 넘어간다. DAO(Data Access Object)란? 말 그대로, 데이터베이스의 데이터에 접근하기 위한 객체이다. 비즈니스 로직에 kangmanjoo.ti..