본문 바로가기

Java

(22)
[Java] 버전별 업데이트 사항(보안) 자바 업데이트 이력(8 ~ 17)을 다루면서 보안 관련 부분은 따로 모아두었다. 추후 시간이 생긴다면 보안 관련하여 어떠한 업데이트가 진행되고 있는지 알아보도록 한다. Security Java 9 JDK-8191486: Open source the root certificates in Oracle's Java SE Root CA program JDK-8148421: Added TLS session hash and extended master secret extension support JDK-8140436: Negotiated Finite Field Diffie-Hellman Ephemeral Parameters for TLS JDK-8174756: RSA public key validation ..
[Java] 버전별 업데이트 사항 이번 장에서는 자바 버전에 따른 변경사항과 트렌드에 대해서 알아본다. 대부분 기계인간 John Grib과 Oracle 공식문서를 참고하여 작성하였으며 Java 7 이후 버전에 대한 정리만 진행한다. 주요 변경사항이라고 표시한 부분은 어디까지나 스프링 기반 백엔드 개발자인 필자의 개인적인 의견일 뿐(예를 들어Swing관련 큰 변화가 있어도 필자에게는 크게 느껴지지 않는다.)이며 보는 관점에 따라서 달라질 수 있다. * 개요 필자가 재직 중인 회사에 새로운 프로젝트를 진행하게 되면서 자바의 버전을 선택해야하는 시간을 가지게 되었다. 지금까지 사용해왔고 편한 8, 11을 사용할 수는 있겠지만 요즘 자바와 코틀린이 빠르게 성장하며 자바의 버전도 빠르게 업데이트 되고 있기 때문에 버전별로 업데이트 된 사항들을 정..
[Concurrency] vs Parallelism 이번 장부터 자바의 Concurrency Utilities에 대해서 알아보기 전에 Concurrency(동시성)에 대해서 짧게 알아보도록 한다. 예시에서 사용되는 모든 코드는 깃허브 (링크)의 테스트 코드로 첨부하였으므로 필요한 경우 참고하도록 한다. Concurrency(동시성) vs Parallelism(병렬성) 우리는 한 번에 여러가지 일을 처리하는데 동시에 처리가 된다면 Concurrent한 프로그램이라고 얘기한다. 이것은 하드웨어 관점에서 바라본 것이 아니라 프로그램을 논리적으로 바라봤기 때문이다. 실제로 프로그램이 작동하는 방식을 보면 우리가 원하는 것처럼 병렬로 동시에 작업이 진행되는 것은 아니지만 병렬로 진행되는 것 처럼 느껴지는 것일 수 있다. 그림을 살펴보면 위의 상황은 하나의 자판기에..
[Concurrency] Process & Thread 이번 장부터 자바의 Concurrency Utilities에 대해서 알아본다. 예시에서 사용되는 모든 코드는 깃허브 (링크)의 테스트 코드로 첨부하였으므로 필요한 경우 참고하도록 한다. Process & Thread Program 컴퓨터에서 실행될 때 특정 작업(specific task)을 수행하는 일련의 명령어들의 모음(집합)이다. 위키백과 Process를 실행시키기 위해 준비되어 있는 설치파일이다. Process 프로세스는 컴퓨터에서 실행되는 프로그램을 말한다. 위키백과 PC를 켜고 카카오톡을 설치하면 프로그램이 설치된 것이며 실행하면 카카오톡에게 메모리가 할당되며 프로세스가 실행되는 것이다. OS로부터 메모리 뿐만 아니라 필요한 자원을 할당받는다. 할당 받는 자원은 아래와 같다. CPU 사용 시간 ..
[JVM] Stack & Frame Stack Each Java Virtual Machine thread has a private Java Virtual Machine stack, created at the same time as the thread. A Java Virtual Machine stack stores frames (§2.6). A Java Virtual Machine stack is analogous to the stack of a conventional language such as C: it holds local variables and partial results, and plays a part in method invocation and return. ---------- 중략 ---------- If the compu..
[SOLID] 객체지향 설계 5원칙 - DIP DIP (Dependency Inversion Principle) 위키에 다음과 같이 정의되어있다. 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. 이 원칙은 다음과 같은 내용을 담고 있다. 첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다. 상당히 어렵게 설명이 되어 있는데 한 마디로 구현체가 아닌 Interface를 의존해야한다는 의미다. 이번에는 구현체를 숨기고 외부에서 의존성을 주입받는 방식에 대해서 알아보도록 한다. Spring을 사용한다면 쉽게 자..
[SOLID] 객체지향 설계 5원칙 - ISP ISP (Interface Segregation Principle) 인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 한마디로 구현 객체는 무의미한 메소드의 구현을 방지하고 반드시 필요한 메소드만을 구현해야한다는 원칙이다. 만약 구현해야하는 Interface가 너무 크다면 해당 Interface를 세분화해야한다. 예를들어 2000년식 아반떼가 있고 2020년식 아반떼가 있다. 2020년식 아반떼에는 앞으로 간다, 뒤로 간다, 멈춘다라는 기본적인 기능 이외에 크루즈컨트롤, 무선충전, 네비게이션등 일반적인 차량 기능외에 많은 새로운 기능이 들어가있다. 이러한 점을 가지고 Car라는 Interface를 구현하면 아래와 같을 것이다. public interfac..
[JVM] GC 벤치마크 결과 데이터 이번 장에서는 GC별로 벤치마크 결과 데이터를 정리한다. 용어에 대한 자세한 설명은 다루지 않는다. 분석에 필요한 대부분의 용어는 [JVM] GC 벤치마크 분석 포인트 (링크)에 적어두었다. Serial GC Instance: m5.xlarge (vCPU: 4, Memory: 16 gb) Allocated Heap: 4.94 gb (JVM에서 자동으로 설정한 값) Request Throughput: 0.51 Transactions/Seconds Total Request Count: 1,828 Error Count (Ratio): 75 (4.10%) Average CPU Usage: 1.0% (User), 0.1% (System) Core-1: 0.9% (User), 0.1% (System) Core-2:..