프로그래밍을 하다 보면 고려 사항 중 하나가 동시성이다. 동시성이 왜 발생하는지에 관한 고민의 흐름을 정리하고자 글로 작성하고자 한다. 1. 자바 코드는 어떻게 실행될까?자바 코드는 어떻게 실행될까? 자바는 기본적으로 컴파일 언어이다. 컴파일 언어란 코드가 실행되기 이전에 컴파일러(compiler) 를 거쳐 소스 코드를 기계어로 번역하는 과정을 거치는 언어를 말한다. 자바는 자바 컴파일러를 통해서 소스 파일을 자바 바이트 코드로 변환한다. 변환된 바이트 코드는 런타임 환경에서 JVM(Java Virtual Machine) 을 통해 OS 가 읽을 수 있는 기계어(binary code) 로 변환하고, 변환된 기계어는 OS 가 읽어 명령을 수행하게 된다. 2. 동시성이 발생 지점인 공유 자원은 어느 영역일까..
전체 글
1. 배경 : 유연하게 분산락 키 값 설정하기 Redisson library 를 기반으로 분산락을 custom annotation(@DistributedLock) 을 조인 포인트로 설정해 분산락 에스펙트를 구현하고 있었다. 분산락을 적용할 때 키 값이 필요한데, 유연한 키 값 적용을 위해 Spel(Spring Expression Language) 을 적용했다.@DistributedLock 의 옵션에 적혀있는 Spel 을 파싱한 내용을 토대로 메서드 아규먼트(method arguemnt) 를 전달해서 분산락 키를 설정하려고 했다. 2. 문제 : 조인포인트 파라미터 값이 null 이 반환된다? 그런데 joinPoint 에서 메서드 아규먼트를 주입하는 과정에서 계속해서 에러가 발생했다. joinpoint..
길고도 짧았던 10주 간의 항플 백엔드 7기를 마무리 했다. 시원 섭섭함이 공존했던 과정 회고를 짧게나마 정리하려고 한다. GitHub - pbg0205/concertContribute to pbg0205/concert development by creating an account on GitHub.github.com 🍿 prequel#1 항해를 신청한 이유 바이오 공학을 전공한 후 사회인 신분으로 개발을 처음 접하게 되었다. 영상 회의 서비스 백엔드 개발을 담당했고 다시 백엔드 개발자로 일하기 위해 항해 플러스 7기를 신청했다. 현재 내가 부족한 부분을 키워드로 고민해보았을 때 설득력과 방향성이었다. 내가 알고 있는 것을 잘 전달할 수 있을지, 어떻게 해야 지속적으로 성장이 가능할 수 있는지에 관..
1. 2PC (Two-Phase Commit)코디네이터와 여러 데이터베이스 간의 합의를 통해 트랜잭션 커밋/롤백을 결정하는 방법이다.phase1 : 모든 데이터베이스가 커밋이 가능한 상태 또는 불가능한 상태를 코디네이터에게 전달phase2 : 코디네이터가 커밋 또는 롤백을 수행한다.장점분산 환경에서의 데이터 정합성 및 원자성을 보장할 수 있다.단점미지원 DBMS - 미지원 DBMS 인 경우, 사용이 불가하다.이종 데이터베이스 호환성 - 이종(heterogeneous) 데이터베이스 환경에서 사용에 어려움이 있음코디네이터에 의존적 - 장애 상황에 따른 각 데이터베이스의 커밋/롤백 여부를 스스로 결정할 수 없음트랜잭션 블로킹(blocking) - 다른 데이터베이스 트랜잭션이 완료될 때까지 대기해야 하는 경우가..
1. Local Cache ? Global Cache?(1) 로컬 캐시장점해당 인스턴스의 메모리를 참조해 빠른 데이터 접근 가능해당 인스턴스의 메모리를 참조하므로 네트워크 트래픽 감소단점캐시 데이터 증가 시 메모리 사용량 증가로 인한 성능 저하 가능캐싱 데이터가 변경되면 여러 서버 간 정합성 문제 발생 가능(2) 글로벌 캐시장점다중 인스턴스에서 동일한 데이터 공유 가능Sharding 과 Replication 을 활용한 고가용성 보장 단점추가 인프라 구성으로 인한 비용 발생네트워크 지연으로 인해 로컬 캐시보다 응답 속도가 느릴 수 있음 2. 로컬 캐시 종류(1) EhCacheEhCache는 Java 기반의 오픈 소스 캐시 라이브러리로, 주로 Spring 애플리케이션에서 사용된다.특징Heap 메모리, Off..
·cs
1. 캐시란??캐시는 데이터를 임시로 저장하여 빠르게 제공하는 하드웨어 또는 소프트웨어 구성 요소이다. 주로 성능 최적화와 시스템 부하 감소를 위해 사용되며, 데이터베이스 조회나 네트워크 요청과 같은 반복적인 작업의 속도를 개선하는 역할을 한다. 예를 들어, 웹 애플리케이션에서 자주 조회되는 데이터를 캐시에 저장하면, 동일한 요청이 발생할 때 데이터베이스를 거치지 않고 빠르게 응답할 수 있다.웹 캐시: 웹 페이지나 API 응답을 저장하여 속도를 향상시키고 서버 부하를 줄인다.데이터베이스 캐시: 자주 사용되는 쿼리 결과를 저장하여 성능을 최적화한다.파일 시스템 캐시: 파일 읽기 및 쓰기 작업을 가속화한다.CPU 캐시: 프로세서 내에서 자주 사용하는 명령어나 데이터를 저장하여 실행 속도를 높인다. 2. 캐시..