처음부터 다시 배우는 Java 동시성 제어
·
Java
이 글에서는 synchronized 키워드의 JVM 모니터 락이 실제로 어떻게 동작하는지 살펴보고, ReentrantLock이 제공하는 동시성 처리 기능을 알아본 뒤, 동시성 프로그래밍을 할 때 발생할 수 있는 생산자-소비자 문제를 해결해본다. 그리고 사용자별 키 값을 활용한 락 분리 전략으로 성능을 개선하는 방법을 다룰 예정이다. synchronized만으로 충분할까'synchronized를 쓰면 동시성 문제가 해결된다'라고만 이해하고 있을 수도 있다. 실제로 동시성 문제를 해결하기 위해 단순히 코드 블록에 synchronized만 붙이면 문제는 해결되지만 성능이 급격히 떨어지는 경우를 자주 볼 수 있다. 예를 들어, 모든 사용자의 포인트 처리가 하나의 공유된 락으로 처리하면, 사용자 A의 포인트 적립..
Remote JVM Debug (feat. IntelliJ, k8s)
·
Java
애플 로그인 만드는 작업을 했는데, 애플 로그인은 다른 로그인과는 다른 특징이 있었습니다.http나 로컬호스트에서 사용 불가결국 Dev나 Stag 서버에 배포해 테스트해보는 수밖에 없었는데 디버거 없이 개발하는 과정이 굉장히 불편하게 느껴졌습니다. 하나하나 로그 찍고 배포하고, 또 확인할 거 생겼을 때 다시 로그 찍고 배포해서 확인할 수도 없고...어떻게 하면 원격에서도 디버거를 사용할 수 있을까요?본격적으로 시작하기 전에 디버거에 대해 알아봅시다.  Debugger백엔드 애플리케이션을 만들어 보신 분이라면 대부분 IDE에 내장된 디버거를 사용해보신 경험이 있으실 겁니다.Eclipse, IntelliJ IDEA와 같은 IDE는 디버거를 가지고 있는데요. 개발자들은 이 디버거를 사용해 코드의 플로우나 변수..
[Maven] 메이븐과 리포지토리
·
Java
0. 메이븐 이란?메이븐이란 Apache에서 개발하고 관리하는 오픈 소스 빌드 도구이다. 의존성 관리 툴로도 많이 사용된다.정리하자면 프로젝트 빌드, 관리에 사용하는 도구이다. 1. 메이븐의 작동 방식pom.xml에서 선언한 dependency들을 저장소로 불러와 사용하는데 그 과정은 아래와 같다. Maven 프로젝트에서 pom.xml 파일을 읽는다.Local Repository에 파일이 있는지 체크한다.만약 필요한 파일이 없다면 Central Repository에 요청한다.Central Repository로부터 정보를 가져온다.그 정보를 Local Repository에 저장한다.모든 준비가 갖춰지면 프로젝트를 실행시킨다. 2. Local Repository로컬 리포지토리는 메이븐 프로젝트를 ..