전체 글 168

Java 멀티스레딩, 병행성 및 성능 최적화

이 글은 글또 x 유데미 콜라보를 통해 강의를 지원받아 작성한 글 입니다. 글을 꾸준히 작성하기 위해 글또 커뮤니티에 참여하고있는데, 감사하게도 유데미에서 글또 커뮤니티에 강의를 제공해주셨습니다. 저는 Java 멀티스레딩, 병행성 및 성능 최적화 - 전문가 되기라는 강의를 선택했는데요. 이 강의는 운영체제, 프로세스와 스레드부터 시작해서 멀티 스레딩의 주요 개념들을 지나 가상 스레드까지 모두 담고 있습니다. 멀티스레딩에 대한 큰 그림을 그릴 수 있는 인상적인 강의여서, 이 글에서는 강의의 핵심 내용들을 추려서 알려드리려고 합니다. (이 글은 강의에서 설명한 내용이 많이 생략되었고, 나름의 표현으로 변경했기 때문에 강의도 꼭 듣는것을 추천드립니다.) 1. 멀티스레딩 개요 멀티스레딩이 필요한 근본적인 이유는..

Java 2024.03.31

Kotlin Coroutine 과 Java Virtual thread

최근 Java 21 에서 Virtual thread 가 정식 출시되어 많은 관심을 받고 있는데요. 문득 Virtual thread 가 Kotlin Coroutine 을 대체하는 양상이 나오지 않을까 하는 생각이 들었습니다. 그래서 이 둘을 비교하며, 각각 어떤 문제를 해결하기 위해 나온 기술들이고 어떤 특징들이 있는지 살펴보고자 합니다. 1. 서론 Kotlin coroutine(코루틴)과 Java Virtual threads(가상 스레드)는 '컴퓨팅 자원을 더 효율적으로 사용하기 위한 경량 스레드 기술' 입니다. 컴퓨터의 발전 과정에서 우리는 자원을 효율적으로 사용하기 위해, 가용 자원의 유휴시간을 줄이기 위해 노력해왔는데요. CPU Scheduling 이 그 대표적인 사례이죠. 코루틴과 ..

Java 2024.03.17

TDD는 RED → GREEN → YELLOW가 전부는 아니다

지금 까지는 TDD가 '테스트, 구현, 리팩토링 순서로 진행하는 개발 방법'이라는 정도로만 이해하고 있었는데요. 최근 테스트 주도 개발을 읽으며 이게 전부가 아니라는 사실을 배웠습니다. 그래서 이번 글에서는 제가 배운점들을 공유드리려고 합니다. TDD의 정의 TDD란 무엇일까요? 많은 글과 책 등에서 TDD에 대해 정의했는데요. 위키 먼저, 위키에서는 다음과 같이 정의하고 있습니다. Test-driven development (TDD) is a software development process relying on software requirements being converted to test cases before software is fully developed, and tracking all so..

테스트 2024.01.13

테스트는 안정감을 줄 수 있는가?

저는 실무에서 테스트 코드를 작성하고있고, 안정적인 유지보수를 위해서는 당연히 해야한다고 생각합니다. 하지만 스스로를 되돌아보니 테스트란 뭔지, 왜 해야하는지를 그저 어렴풋이만 알고있다는걸 깨달았습니다. 그래서 테스트의 본질에 대해 고민해보고, 테스트의 장점과 그게 정말인지에 대해 생각해봤습니다. 학습해 나가는 중에 정리한 내용이라 혹여나 잘못된 내용이 있다면, 피드백 주시면 감사하겠습니다. 테스트는 뭘까? 여러 글과 책에서 말하는 테스트의 정의를 제 나름대로 요약해보면 다음과 같습니다. 시스템등이 예상한대로 동작하는지 확인하는 행위 이러한 맥락에서 볼때 세상의 모든 개발자들은 테스트를 하고있습니다. 시스템 전체를 로드해서 사용하며 확인 시스템의 일부분을 로드해서 사용하며 확인 테스트 코드를 통해 확인 ..

테스트 2023.12.10

AWS Copilot으로 컨테이너 서비스 환경 구성하기

최근 회사에서 신규 프로젝트의 컨테이너 기반 서비스 환경을 AWS Copilot을 이용해 1~2일 만에 구축했습니다. 그래서 이번 글에서는 AWS Copilot이 무엇인지, 어떤 특징이 있고, 어떻게 사용할 수 있는지 공유드리려고 합니다. 1. AWS Copilot 이란? 많은 분들이 'Copilot' 이라고 하면, Github의 Copilot을 먼저 떠올리시는데요. 하지만 AWS Copilot은 컨테이너 기반 서비스 환경을 간편하게 빌드, 배포, 운영할 수 있게 해주는 도구입니다. 위 그림은 Copilot에서 제공하는 리소스들을 도식화한 그림입니다. 여기서 app은 하위의 env, pipeline, service들을 묶는 범주입니다. 그리고 실제 인프라로 프로비저닝되는 대상이 env, p..

[Effective Java] 아이템 84. 프로그램의 동작을 스레드 스케줄러에 기대지 말라

0. 들어가며 이 아이템은 스레드 스케줄러에게 의존적인 코드를 작성하지 말라는 내용입니다. 아래에서 조금 더 자세히 알아보겠습니다. 1. 스레드 스케줄링 스레드 스케줄링은 간단히 말해서, 스레드를 어떤 기준에 따라 순서대로 실행시키는행위 입니다. 기본적으로는 운영체제가 이런 작업을 모두 처리하는데요. Java의 경우 JVM이 이를 대신 처리합니다. 1.1 JVM의 스레드 스케줄링 JVM의 스레드는 User-level-thread(ULT) 이고 실제 실행시에는 Kernal-level-thread(KLT)와 매핑됩니다. User-level-thread : 사용자(프로그램)이 구현한 Thread Kernel-level-thread : 운영체제(Kernel)에 구현된 Thread 하지만 KLT는 한정적이기 때문..

Java 2023.04.04

[Effective Java] 아이템 76 : 가능한 한 실패 원자적으로 만들라

0. 들어가며 이 아이템이 말하는 바는 짧고 명확해서, 아이템 이름만 봐도 명확하게 보입니다. 저는 “가능한 한 실패 원자적으로 만들라” 라고 핵심 키워드를 꼽았습니다. 가능한 : 반드시 해야한다는건 아니지만, 실패 원자적 : 실패 상황에도 정상적인 흐름으로 흘러가게 하라. 그런데 실패 원자적이라는 말이 확 와닿지는 않는데요. 이를 책에서는 다음과 같이 말합니다. 호출된 메서드가 실패하더라도 해당 객체는 메서드 호출 전 상태를 유지해야 한다. 어떻게 원자적으로 만들 수 있는지, 해야하는 상황과 아닌 상황은 어떻게 구분하는지 아래에서 알아보겠습니다. 1. 실패 원자적으로 만드는 방법 1.1 불변 사실, 불변객체인 경우에는 실패원자적으로 만들기가 쉽습니다. 왜냐하면, 불변 객체인 경우에는 상태를 변경할때 새..

Java 2023.03.27

[Effective Java] 아이템 71 : 필요 없는 검사 예외 사용은 피하라

0. 들어가며 저를 포함한 많은 자바 개발자들은 Checked Exception이 try-catch 구문이나 throw 를 강제하기 때문에 좋아하지 않는데요. 그래서 요즘은 거의 Checked Exception은 사용하지 않고, 불가피하게 사용하게 되는경우는 RuntimeException으로 변환해서 다루는 경우도 많은 것 같습니다. 게다가 Checked Exception을 던지는 메서드는 Stream에서 직접 사용할 수 없어서 더욱 기피하게되는데요. 하지만 이런 Checked Exception도 제대로 활용한다면 API와 프로그램의 질을 올릴 수 있다고 합니다. 1. 제대로 활용할 수 있는 경우 Checked Exception을 제대로 활용할 수 있는 경우는 다음과 같습니다. 외부에서 API를 정상적으..

Java 2023.03.26

[Effective Java] 아이템 55 : 옵셔널 반환은 신중히 하라

0. 들어가며 Java 8 이전에는 값을 반환할 수 있을 수도 없을 수도 있는 경우에 정말 애매했습니다. 개발자가 선택할 수 있는건 null 반환, 예외 발생 두 가지 중 하나였는데요. null을 반환하는 경우에는 호출하는 쪽에서 null 방어코드를 추가해줘야합니다. 만약 빠트리게되면 어디선가 NullPointerException이 발생하죠. 그리고 예외를 발생시키더라도 StackTrace 전체를 추적하기 때문에 비용도 만만치 않다고 합니다. 하지만 이 문제는 Java 8에서 Optional이라는 클래스가 등장하며 해소되었죠. 1. Optional Java 8 부터 Optional이 등장하며 값을 반환할 수 있을 수도 없을 수도 있는 경우를 대응할 수 있게 되었습니다. 값이 있는 경우에는 해당 객체를 담..

Java 2023.03.25

부족한 시간을 어떻게 극복할 수 있을까?

0. 시간이 부족해.. 저는 아직 취업준비 후 얼마 되지 않아서 그런지 뭐든 깊게 꼼꼼하게 하려는 버릇이 들었습니다. 그런데 취업 후 회사를 다니면서 이전과 똑같이 공부하려니 그게 잘 되지 않았는데요. 취업 준비중일때는 잠자는 시간 7시간을 제외한 17시간 모두 다 제가 활용할 수 있는 시간이었습니다. 그래서 제가 원하는 만큼 시간을 쏟아부으며 뭔가 할 수 있었죠. 하지만 회사를 다니며 소모되는 시간이 많이 늘었죠 출근 준비(0.5~1) 출퇴근시간(1) 근무(9) 퇴근 후 집 정리(1) 이걸 다 합하면 하면 11~12시간 정도는 못쓰게 되었습니다. 그래서 17시간 중 5시간만 사용할 수 있는데요. 하지만 취업하고 나서 해야할 일들은 늘면 늘었지, 줄지는 않았습니다. 1. 우선순위 먼저 생각난건 우선순위를..

회고 2023.03.25