# JDK 22
- 들어가기 전에
- Features
- Previews
- Incubators
- 요약
---
### 들어가기 전에
- 2025년에 JavaOne 재개된다고 합니다. 2025년은 java 30주년이 되는 해입니다.
- 30년을 버틴 프로그래밍 언어가 몇 개나 될까요?
- General Availablility : 2024/03/19
- preview와 incubator는 관심있으신 분들만 보시면 될 듯 합니다.
- 언제 정식으로 포함될 지 모르니
---
## Features
- 메모리, JNI 관련
- JEP 423: Region Pinning for G1
- JEP 454: Foreign Function & Memory API
- 언어 스펙
- JEP 456: Unnamed Variables & Patterns
- 메이븐 죽이기?
- JEP 458: Launch Multi-File Source-Code Programs
---
### JEP 423: Region Pinning for G1
- component : hospot / gc (hotspot)
- 요약 : G1에서 영역 고정을 구현하여 대기 시간을 줄이므로 Java Native Interface(JNI) 중요 영역 동안 가비지 수집을 비활성화할 필요가 없습니다.
- JNI : 하드웨어 또는 운영체제에 종속적인 응용프로그램들, C, C++, 어셈블리 등 다른 언어로 작성된 라이브러리들을 호출하거나 그 반대의 경우를 가능하게 하는 프레임워크
- GC가 비활성화 되었을 때, 메모리 부족, VM종료 등의 상황이 발생할 수 있다.
---
### JEP 454: Foreign Function & Memory API
- component : core-libs / java.lang.foreign (panama)
- third preview 까지 진행 되었었네요. jdk19 preview로 시작.
- 요약 : JVM 외부 코드를 효출적으로 호출하고 JVM에서 관리하지 않는 메모리에 안전하게 접근할 수 있게 한다..
- 텐서플로, 루씬, 네띠 와 같이 성능이 중요한 경우 off-heap 메모리에서 관리 되어야한다. 기존에는 두 가지 방법을 제공했다. ByteBuffer API, sun.misc.Unsafe API
- JDBC, HTTP client, NIO channels, Unix-domain sockets 등
- 약어로 FFM API 라고 하네요
---
### JEP 456: Unnamed Variables & Patterns
- component : specification / language (amber)
- 요약 : 매개변수가 절대 사용되지 않을 때 '`_`' 를 사용
- 이름이 지정되지 않는 필드나 메서드 매개변수를 허용하려 만든 것은 아니다.
- (주의) `_`를 변수로 사용하는 기존의 코드가 없다고 가정했다.
---
#### 사용되지 않는 변수 (1/2)
```java
static int count(Iterable orders) {
int total = 0;
for (Order order : orders) // order is unused
total++;
return total;
}
```
- 정적 분석 도구는 사용되지 않는 변수에 대해 경고를 표시할 수도 있다.
```java
static int count(Iterable orders) {
int total = 0;
for (Order _ : orders) // Unnamed variable
total++;
return total;
}
```
---
#### 사용되지 않는 변수 (2/2)
```java
String s = ...;
try {
int i = Integer.parseInt(s);
... i ...
} catch (NumberFormatException ex) { // ex is unused
System.out.println("Bad number: " + s);
}
```
```java
String s = ...
try {
int i = Integer.parseInt(s);
... i ...
} catch (NumberFormatException _) { // Unnamed variable
System.out.println("Bad number: " + s);
}
```
---
#### 사용되지 않는 패턴변수
```java
ealed abstract class Ball permits RedBall, BlueBall, GreenBall { }
final class RedBall extends Ball { }
final class BlueBall extends Ball { }
final class GreenBall extends Ball { }
```
```java
Ball ball = ...
switch (ball) {
case RedBall red -> process(ball); // red 사용안됨
case BlueBall blue -> process(ball); // blue 사용안됨
case GreenBall green -> stopProcessing();// green 사용안됨
}
```
```java
switch (ball) {
case RedBall _ -> process(ball); // Unnamed pattern variable
case BlueBall _ -> process(ball); // Unnamed pattern variable
case GreenBall _ -> stopProcessing(); // Unnamed pattern variable
}
```
---
### JEP 458: Launch Multi-File Source-Code Programs
- component : tools / launcher (compiler)
- 요약
- 외부 라이브러리 종속성을 쉽게 사용하는 것이 목표는 아니다.
---
#### JDK 11에서 지원했던 방법
```java
// Prog.java 아래 두개의 클래스를 포함하고 있다.
class Prog {
public static void main(String[] args) { Helper.run(); }
}
class Helper {
static void run() { System.out.println("Hello!"); }
}
```
```sh
$ java Prog.java
```
- 멀티파일이라면 얘기가 달라진다.
---
#### 멀티 파일로 구성
- 테스트해봅시다.
```java
// App.java
import help.Helper;
class App {
public static void main(String[] args) { Helper.run(); }
}
// Helper.java
package help;
class Helper {
static void run() { System.out.println("Hello!"); }
}
```
---
## Previews
- 447: Statements before super(...) (Preview)
- 457: Class-File API (Preview)
- 461: Stream Gatherers (Preview)
- 459: String Templates (Second Preview)
- 462: Structured Concurrency (Second Preview)
- 463: Implicitly Declared Classes and Instance Main Methods (Second Preview)
- 464: Scoped Values (Second Preview)
---
## Incubators
- 460: Vector API (Seventh Incubator)
---
## 요약
- JNI 를 사용할 때 외부 메모리 관리와 관련된 업데이트
- Exception이 조금은 줄어들까?
- `_` 로 변수명을 사용했던 것들은 리팩토링합시다.
- 아직은 아니지만 java 진영의 빌드 도구, IDE 들이 많이 바뀔듯.
Session 대신 JWT를 사용하는 이유 실 서버는 하나의 인스턴트로만 동작하지 않는다. 서버의 고가용성(high availabliity, HA)을 확보하기 위해 두 개 이상의 병렬서버로 운영하게 된다. 서버가 병렬로 운영되는 상황에서 세션을 사용하면 각 서버간의 세션을 동기화하는 문제가 발생한다. 이를 해결하기 위해 공유 데이터베이스를 이용한 세션공유 기법들을 사용하기도 한다. 서버가 많아지면 세션동기는 더 어렵다. JWT를 사용하면 세션사용으로 인한 서버 자체에 부담도 줄이면서 공유 세션에 대한 관리가 한층 수월하다. 스프링 시큐리티 - SecurityConfig.java session을 사용하지 않도록 설정 jwtAuthFilter 추가 httpBasic 제거 - JwtAuthenticationFilter.java config.filter 패키지에 파일 추가 jwt dependency 추가 (3개). gradle refresh하는 거 까먹지 말기 config.service 패키지에 [JwtService.java](http://JwtService.java) 추가 jwtService와 UserDetailService final field 추가. @RequiredArgsConstructor 까먹지 말기 - config.service.JwtService 소스 참조해서 파일 작성 - controller, service 수정 User 를 리턴하면 pwd가 그대로 노출되므로 AuthResponse와 AuthRequest로 교체 Github https://github.com/ohhoonim/factory.git 유튜브 영상 스프링부트 - 보안 JWT JWT - refresh 토큰과 logout
``` [!NOTE] Winddows와 Macos macos를 기준으로 설명하고 있으나, 거의 대부분 macos의 `Cmd`키를 `Ctrl`키로 변경하면 windows에서도 그대로 사용할 수 있음 ``` # VSCode 단축키 - `Cmd + p` : 파일 오픈을 위한 palette - `Cmd + shift + p` : 명령어 실행을 위한 palette. `Cmd + p` 한 다음 '>'를 입력해도 됨 - `Cmd + shift + o` : 현재파일에서 심볼 찾기 (field, method, function 등). `Cmd + p`한 다음 '@'를 입력해도 됨 - `Cmd + Opt + ` : 열려있는 편집기 전환 - `Cmd + shift + e` : 편집기와 탐색기를 전환 함. (탐색기에서 vim 커서 이동 키도 동작한다는 것이 핵심) - `Cmd + Opt + ` : 열모드로 블럭 지정. (VIM단축키와 조합하면 최상임. 이건 글로 설명이 안됨) --- ``` [!NOTE] VSCode용 Vim 확장 - 여기서는 vscodevim 에서 제작한 Vim 확장을 설치하여 사용한다. Vim 단축키는 다를 바 없다. - `esc`키를 눌러 Normal모드 진입시 '한글' 입력상태인 경우 많이 불편하다. '한영'을 자동으로 변환해주는 여러 방법들을 써봤지만, 몇 일 지나면 풀려서 잘 동작 안한다. 그냥 Normal 모드 진입시 '한영'변환을 신경써서 잘 해주자. (시간낭비하지 마세요) - macos의 경우 `Cmd`키와 `Caps`키를 바꾸자. - Windows의 경우 `Ctrl`키와 `Caps`키를 바꾸자. (써보면안다. 얼마나 편한지) ``` ``` [!warning] - 표기된 모든 단축키는 `대소문자`를 구분합니다. (shift 입력하기 귀찮아서임) - `잘라내기`라고 표기한 것은 `붙여넣기`가 가능하다는 뜻입니다. - VIM 모드 전환은 직...
설치하기에 앞서 테스팅 이야기 ISO/IEC/IEEE 29119 에서는 소프트웨어 테스팅의 표준standard에 대해 정의하고 있습니다. 돈받고 파는 문서를 '표준'이라고 번역하기는 좀 껄끄러운데요. 'standard'는 비지니스를 안정적으로 수행할 수 있는 잘 정리된 '가이드' 정도가 올바른 번역이 아닐까 생각됩니다. 소프트웨어에 표준이 있다면 얼마나 좋겠습니까마는 no silver bullet 이라는 말도 있듯이 이건 그냥 iso에서 제시하는 가이드일 뿐이라는 것이 개인적인 의견입니다. 뭐 대단한거 한다고 시작하는데 말이 많군요. (^^;) 29119 part2에서는 테스트프로세스를 다루고 있구요. 이 중 test management process 항목이 있습니다. 어딜가나 비지니스가 끼어드니 management는 빠지는 곳이 없네요. 먹고살려면 어쩔수 없죠. 경영진을 설득하기 위한 부단한 연구라고 인정하는 수밖에. 출처 : http://softwaretestingstandard.org/part2.php 테스팅 서버를 구성하는 이유는 test management process 관점에서 'test monitoring & control'이 필요하기 때문입니다. (위 그림에서 가운데 노란색 박스) testlink 는 오픈소스로서 전 세계에서 가장 많이 사용되고 있는 툴이며 monitoring과 control을 위해 적절한 기능을 제공하고 있다고 판단됩니다. 맨티스는 testing completion 조건을 만족시키기 위한 테스팅 조직과 개발 조직간의 협업툴로서 이용될 수 있습니다. 개발조직에서는 맨티스와 같은 버그 리포트 툴을 사용하고 있으며 bugzilla, jira와 같은 다른 버그리포트 툴로 대체될 수 있습니다. 본 포스팅에서는 monitoring & control 을 수행하기 위한 테스팅 환경 구축이라고 보시...
댓글
댓글 쓰기