전체 글 31

[Java] Reflection

Java Reflection 이란, Reflection이란 객체를 통해 클래스의 정보를 분석해 내는 것을 말한다. ( 투명, 반사라는 사전적인 의미를 지니고 있다. ) 객체의 메모리 정보만 알고 있고, 객체의 형에 대해서는 모른다는 가정하에 Reflection을 통해 아래와 같은 정보를 가져 올 수 있으며. 이 정보를 통해 객체를 생성하거나 메소드를 호출하거나 변수의 값을 변경 할 수 있다. Class Constructor Method Field Class reflection = Data.class; // Data class Method 정보 Method[] m = reflection.getMethods(); // Data class Field 정보 Field[] f = reflection.getFiel..

Java 2020.11.19

[Java] Optional

JAVA Optional 이란? Java Optional 클래스는 Java 8에서 추가되었으며 자바의 고질적인 문제인 NPE (NullpointerException) 문제 해결 가이드를 제공, 메서드가 반환할 결과값이 ‘없음’을 명백하게 표현할 필요가 있고, Null을 반환하면 에러를 유발할 가능성이 높은 상황에서 메서드의 반환 타입으로 Optional을 사용하자는 것이 Optional을 만든 주된 목적. 1. Optional.of value가 null일 경우 NPE 예외를 반환, 반드시 값이 있어야 하는 객체인 경우에만 해당 메서드를 사용 /** * Returns an {@code Optional} with the specified present non-null value. * * @param the ..

Java 2020.11.15

[Springboot] Tomcat access log 설정

# Spring boot의 embedded tomcat 사용 시 access log 설정 및 로그 Pattern 사용법 application.properties 설정 server.tomcat.accesslog.enabled = true server.tomcat.accesslog.pattern = %{yyyy-MM-dd HH:mm:ss}t\t%s\t%r\t%{User-Agent}i\t%{Referer}i\t%a\t%b server.tomcat.accesslog.directory = /log - accesslog.directory 의 경우 로그가 쌓일 디렉토리 위치로 일반적으로는 /var/log/tomcat에 적재가 된다. 위의 예제는 /log 경로에 쌓이도록 설정 한 것이다. accesslog에 적재되는 ..

Spring 2020.11.11

[Java] CPU 점유율이 높은 스레드 상태 분석(Thread dump)

1. linux에서 Java application cpu, memory 점유율 확인 top -c 2. JPS 명령어를 이용한 java application PID 확인 jps -v 3. PS 명령어를 이용한 LWP(Light Weight Process) 및 Thread별 cpu 점유율 확인 ps -mo pid,lwp,stime,time,cpu,pcpu -C java 4. JSTACK을 이용한 Thread dump 추출 후 LWP Thread 확인 jstack -F #{application pid} > threadDump.txt 참고 URL : d2.naver.com/helloworld/10963 brunch.co.kr/@springboot/126 Thread Dump 분석하기 - 쓰레드 덤프 분석하기 |..

Java 2020.11.10

[이팩티브 자바3] 제 5장. 제네릭

1. 로 타입(raw type)은 사용하지 말라. 로타입(raw type) 이란? 로타입 은 제네릭(Generic) 타입에서 타입 매개변수를 전혀 사용하지 않은 때를 말한다. 제네릭을 지원하기 전에는 컬렉션을 다음과 같이 선언했다. // 컬렉션의 로 타입 - 따라하지 말 것! // Stamp 인스턴스만 취급한다. private final Collection stamps = ...; // 실수로 동전을 넣는다. stamp.add( new Coin(...) ); // 반복자의 로 타입 - 따라하지 말 것! for( Integer i = stamp.iterator(); i.hasNext(); ) { Stamp stamp = (Stamp) i.next();// ClassCastException을 던진다. Sta..

[이팩티브 자바3] 제 4장. 클래스와 인터페이스

1. 클래스와 멤버의 접근 권한을 최소화 하라. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리이다. 접근 제어 메커니즘은 클래스, 인터페이스, 멤버의 접근성을 명시한다. private : 멤버를 선언한 톱레벨 클래스에서만 접근할 수 있다. package-private : 멤버가 소속된 패키지 안의 모든 클래스에서 접근할 수 있다. (접근 제한자를 명시하지 않았을 때 적용되는 패키지 접근 수준, 단 인터페이스의 멤버는 기본적으로 public) protected : package-private의 접근 범위를 포함하며, 이 멤버를 선언한 클래스의 하위 클래스에서도 접근 할 수 있다. pub..

[Network] NAT 란? 무엇인가.

NAT (Network Address Translation) 네트워크에서 외부망과 내부망을 나눠주는 역할을 한다. NAT를 사용 시 보안에 좀 더 도움이 되는데 그 이유는 내부망의 IP주소를 숨길 수 있기 때문이다. NAT는 공인망으로 나갈때 내부망 그대로의 주소를 가져갈 수 없기 때문에 공인망의 주소로 바꿔나가는 것이다. NAT는 Nestwork Address Translation의 줄임말이며 해석하면 네트워크 주소 변환이다, 내부 네트워크에서 외부로 나가는 패킷들의 주소를 외부 네트워크 주소로 변환하고 또한 그 패킷에 대한 패킷의 목적지 주소를 다시 패킷이 발송된 내부 네트워크 주소로 변환하여 주는 기능이다. 공인 IP가 1.1.1.1 하나밖에 없다고 가정할 경우, 내부에서 외부로 나갈 경우에는 1...

Network 2020.11.02

[Spring] Build a Fat JAR With Maven

Maven으로 Jar 빌드시 dependency설정된 의존 라이브러리도 같이 build 될 수 있도록 설정 하는 방법에 대해 알아보자. #{jar파일명} org.apache.maven.plugins maven-assembly-plugin 3.1.1 true #{메인 클래스 지정} jar-with-dependencies make-assembly package single Maven Plugin 설정 후 빌드 시 #{my-project-name}-jar-with-dependencies.jar 형태로 떨어지게 된다. 그리고 java -jar #{my-project-name}-jar-with-dependencies.jar 실행하면 끝!

Spring 2020.10.29

[Java] Lombok

Lombok(롬복) 이란? - Java에서 Model Object를 만들때, 멤버필드(프로퍼티)에 대해 Getter/Setter, toString과 멤버필드에 주입하는 생성자를 만드는 코드 등 불필요하게 반복적으로 만드는 코드를 어노테이션을 통해 줄여주는 라이브러리 프로젝트이다. 생성자 자동 생성 @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해준다 @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 생성해준다 @RequiredArgsConstructor 어노테이션은 final 이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 생성해준다. ToString 메소드 자동 생성 @ToString 어노테이션만 클래스에 붙여주면 자동..

Java 2020.10.20