You will be fine

<일반> 흔한 백엔드 개발자 세미나

by BFine
반응형

https://festa.io/events/4028

 

흔한 백엔드 개발자 모임 | Festa!

Festa에서 당신이 찾는 이벤트를 만나보세요.

festa.io

오랜만에 개발 세미나를 듣고 왔다. (글은 바로 써야지 했는데 많이 늦어버렸다.. )  Java 쪽은 이런 세미나를 본 적이 없기도 했고 얼핏 듣기만 해봤던 Project Loom에 대한 것도 세션에 포함되어있어서 바로 티켓을 구입하고 세션을 듣고 왔다.

 

가.  null 을 나이스 하게 다루는방법

 a. 실수?

  -  개발자라면 한번쯤 들어봤을법한 Java 개발자가 null 만든 것은 실수..! 

  -  null 자체가 실수라고 보기엔 필수적인 요소이다. 하지만 선택적으로 nullable 하게 있도록 했으면 생산성 or 버그가 줄었을 것이다!

      => 요즘 코틀린을 주로 하고 있는데 생각없이 연산자 ?, !! 쓰고 있다가 듣고나서 다시 생각하게 된 부분이 었다

  - 이건 몰랐던 건데 JDK 17 부터 helpful nullpointerException 지원해줘서 어디서 null이 터졌는지 알수있다고 한다..!! 

  -  메타에서는 null analysis 도구를 이용해 null 줄이기 프로젝트를 했다고 한다

 

 b.  어떻게 하면 null을 잘 다룰 수 있을까

   1. 초기화잘하자

   2. 파라미터에 null을 최대한 넘기지마라

   3. 메서드에 대해 null 에 대한 사전조건 체크

   4. null 사용줄이기 primitive tpye

   5. null 대신 다른것을 return (초기값, 빈값 등)

   6. NPE가 발생하면 단순 수정이 아니라 값이 없음이 정상/비정상인지 원인 분석이 중요

 

 c.  Optional

   -  모든 null reference를 대체하기 위한 것이 아니라 더 협력적인 api를 설계하기 위함

   -  절대 Optional 변수나 반환값에 null을 사용하지 말자 

   -  Optional에 값이 존재하다는 것을 증명할수없으면 optional.get()을 쓰지말자

        => isPresent 나 get보다 orElse map 등등을 써라

   -  값을 얻기 위한 메서드 chaining을 optional로 만들지마라

   -  필드 메서드 매개변수 및 컬랙션에서는 optional을 사용하지말자 (직렬화 이슈) 

 

d.  jspecify project

  -  너무 많은 checker framework  예를 들어 @Nonnull 엄청 많은데 뭐써야할까?

       =>  공통으로 해서 적은 annotation으로  빠르게 adotion 해서 jdk 적용 하는게 목표라고 한다.

 

나.  Project Loom & Kotlin coroutines

 a. 개요

  -  reacticve는 non blocking 작업을 시퀀셜하게 표현할수 있는 기능을 제공 하지만 디버깅 어렵고 읽기도 어렵고.. 

 

 b. Project Loom

  - 자바에서 경량 동시성을 목표로 하고 있는 프로젝트!

  -  구성

       - virtual thread / structured concurrncey / scoped valuse

  -  jdk21  virtual thread 정식 출시, 나머지 두개는 preview 단계임

 

 c. virtual thread

  -  왜 만들었냐면 먼저 기존 요청당 Thread는 OS Thread에 수에 비례 (JVM Thread는 OS Thread와 비례)

  -  특징 :  하나의 jvm thead에 여러개 테스크 연결

 

 d. structured concurrncey

    - 동시성 문제를 해결하기 위한 기능

 

 e. scoped values

   - 버츄얼 스레드간 데이터 공유

 

 f.  코루틴

    - vs Virtual Thread 

      - 가장 큰차이는 명시적으로 suspenstion이 가능한가?  Virtual Thread의 경우 Blocking I/O 만나면 바꿈 묵시적

 

다.  java 동시성 프로젝트 구원투수 virtual thread

a.  왜 유저레벨 스레드를 직접적으로 핸들링 못하냐

  -  processer는 유저레벨 스레드를 인지 못함 (kernel thread가 비쌈)

  -  자바 native thread == platform thread (user thead 와 kernel thread 를 1대1로 여러개 매핑 사용가능)

 

b.  virthual thread

   -  중간에 스케줄러 안에 carrier thread 매핑 vrithual thead N- schudler(ExcuteorService)

   -  주의할 점은  pooling 하지 마라 리소스제한하려면 semaphore 써라, Thread-Local 지양하고 socped value를 써라

 

c.  mvc vs  webflux + netty vs webflux + 코루틴 vs mvc + virthual thread

  - 각각 테스트 처리량 초당 12000 / 17000 / 16000

  - 결과적으로 메모리 효율성 증가! ( jvm 레벨에서 context switching 했기 때문) 

     => 그러나 carrier thread pinning 이슈를 완전이 해결못함 continuation 방식으로 동작 

 

ZGC에 대한 이야기도 재미있었는데 어디다 적어두었는지 내용이 사라져 버렸다 ㅜㅜ 오랜만에 되게 재미있게 들은 세션이었다. (👍👍👍) 

한가지 아쉬웠던점은 세션 두개가 겹치는 부분이 많아서 조금 아쉬웠다. 그래도 둘다 좋은 내용이어서 발표자분들의 개발에 대한 관심과 열정이 느껴지는 세션이었고 업무에서 지금 JDK 8, 11 이렇게 쓰고 있는데 빨리 버전업 해서 구경해봤으면 좋겠다!

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기