동시성 이슈 해결
배경 업무 중 동시성처리하는 이슈가 많아 다양한 방법으로 동시성 처리가 필요했습니다. ex. 한 유저에게만 포인트 지급하는 이벤트에서 한 유저가 여러 기기로 동시 접근하는 상황 포인트 지급은 API호출로 처리하기 때문에 롤백으로 대응할 수 없다. 그래서 동시에 접근이 불가능하도록 설정이 필요하다. 동시성 이슈 해결 방안 1. DB unique k...
배경 업무 중 동시성처리하는 이슈가 많아 다양한 방법으로 동시성 처리가 필요했습니다. ex. 한 유저에게만 포인트 지급하는 이벤트에서 한 유저가 여러 기기로 동시 접근하는 상황 포인트 지급은 API호출로 처리하기 때문에 롤백으로 대응할 수 없다. 그래서 동시에 접근이 불가능하도록 설정이 필요하다. 동시성 이슈 해결 방안 1. DB unique k...
부가 설명 entity에 ID가 있으면 persist가 아닌 merge 방식으로 작동한다. repository는 DAO보다는 collection에 가까운 개념이다. (why? collections에서 내부의 값을 꺼낸 다음에 변경하면 다시 add나 put을 하시나요?? -> No) repository에서도 다시 add나 put하지 않기 때문...
부가 설명 테스트하기 쉬운 부분과 어려운 부분을 분리해야 테스트코드를 작성하기 좋습니다. 분리한 후 도메인 객체에 대해서만 먼저 테스트코드를 작성합니다. (로직은 서비스레이어가 아닌 도메인에 개발해야 합니다.) 분리된 것으로 생성한 것(ex. random, shuffle, 날짜)은 파라미터로 전달받습니다. TDD 리팩토링을 위한 과도기 단계에서는 ...
15. 자바 9와 미래 자바 9는 ‘모듈과 그 나머지’ 모듈은 소프트웨어를 개발/배포하는 완전히 새로운 방식이라서 하나씩 단계적으로 도입하기가 쉽지 않음 15.1 자바 9에서 소소하게 개선된 기능 15.1.1 코드 캐시 세그먼트화 자바 9부터 코드 캐시 성능을 개선코자 다음 항목별 영역으로 분리 인터프리터 등의 논메서드 코드(컴파일러 ...
14. 고성능 로깅 및 메시징 14.1 로깅 제품급 로깅 시스템을 선정 시 바람직하지 않은 안티 패턴 10년짜리 로거: 누군가 이미 로거를 잘 설정해놨다. 뭐 하러 다시 만드나? 그냥 편하게 갖다 쓰면 되지 프로젝트 전체 로거: 누군가 프로젝트 각 파트마다 다로 로거를 재구성하지 않아도 되게끔 로거를 감싸놓았다. 전사 로거: 누군가 ...
13. 프로파일링 프로파일링은 여러 가지 접근 방식이 있지만, 그중 다음 두 가지가 일반적 실행 할당 13.1 프로파일링 개요 JVM 프로파일링/모니터링 툴은 보통 저수준의 인스트루먼테이션(instrumentation, 다른 프로그램 또는 객체를 입력받아 대상 프로그램의 여러 지점에 끼워 넣고 원하는 로직을 실행하거나 특정 수치를 계...
12. 동시 성능 기법 12.1 병렬성이란? 요즘의 멀티코어 세상에서는 암달의 법칙이 연산 태스크의 실행 속도를 향상 시키는 핵심 요소 어떤 연산 태스크가 병렬 실행이 가능한 파트와 반드시 순차 실행해야 하는 파트로 구성된다면 순차 실행 파트를 총 S, 총 태스크 소요 시간은 T 필요한 프로세서는 얼마든지 자유롭게 쓸 수 있다는 가정하게 프로...
11. 자바 언어의 성능 향상 기법 개발자가 성능 튜닝할 때 고려해야 할 부분?? 네트워크 연결, I/O, DB 등의 애플리케이션 외부 요인 다음으로 병목을 일으킬 공산이 가장 큰 부분이 바로 코드 설계 성능에 민간함 개발자는 반드시 마음에 새겨두어야 할 코드의 기본 원칙 데이터를 애플리케이션에 어떻게 저장할지 어떤 알고리즘이 가장 효울적일지...
10. JIT 컴파일의 세계로 10.1 JITWatch란? 개발/데브옵스 담당자가 JITWatch를 이용하면, 애플리케이션 실행 중에 핫스팟이 실제로 바이트코드에 무슨 일을 했는지 이해하는 데 도움이 됨 JITWatch는 객관적인 비교에 필요한 측정값을 제공 JITWatch가 하는 일은, 실행 중인 자바 애플리케이션이 생성한 핫스팟 컴파일 상세...
9. JVM의 코드 실행 9.1 바이트코드 해석 JVM은 다음 세 공간에 주로 데이터를 담아 놓음 평가 스택: 메서드별로 하나씩 생성 로컬 변수: 결과를 임시 저장 객체 힙: 메서드끼리, 스레드끼리 공유됨 9.1.1 JVM 바이트코드 개용 JVM에서 각 스택 머신 작업 코드(옵코드)는 1바이트로 나타냄 옵코드는 0부터 255까...