반응형 자바21 Chapter 7. 프로파일링 기법으로 숨겨진 이슈 찾기 매우 중요한 세 가지 프로파일링 기법에 대해 살펴보자. 샘플링을 통해 앱 코드의 어떤 부분이 실행되는지 확인한다.실행을 프로파일링(인스트루멘테이션(instrumentation))하여 잘못된 부분을 찾아내 최적화한다.앱을 프로파일링하여 DB와 통신하는 SQL 쿼리를 식별한다. 1. 샘플링으로 실행되는 코드 관찰 샘플링이란 프로파일러로 앱이 실행되는 코드를 찾아내는 방법이다.실행 자체에 대한 상세 정보는 많이 제공하지 않지만, 어떤 일이 일어나고 있는지 큰 그림을 그려보고 추가 분석에 필요한 정보를 제공한다. 샘플링은 항상 앱 프로파일링의 첫 단계로 활용하는 것이 좋고, 사실 샘플링만으로도 충분한 경우가 많다. 실습 시나리오는 다음과 같다. cURL 또는 포스트맨으로 앱에 구현된 /demo 엔드포인트를 호출.. 독서/자바 잘 읽는 법 2024. 11. 23. Chapter 6. 프로파일링 기법으로 리소스 사용 문제 파악하기 프로파일러는 다양한 난관에 봉착했을 때 앱이 이상하게 작동되는 근본 원인을 밝혀내는 강력한 도구다.프로파일러는 실행 중인 JVM 프로세스를 가로채서 다음과 같이 유용한 세부 정보를 제공한다. CPU와 메모리 같은 리소스가 앱에서 어떻게 소비되는가?실행 중인 스레드와 그 현재 상태는 어떤가?실행 중인 코드 및 특정 조각에서 사용하는 리소스(예: 메서드별 실행 시간)는 무엇인가? 1. 프로파일러는 어떤 경우에 유용할까? 프로파일링 도구가 도움이 되는 상황을 세 가지 정도 꼽아보면 이렇다. 비정상적인 리소스 사용량 식별코드의 어느 부분이 실행되는지 찾기앱 실행 속도가 저하되는 문제 파악 1.1 비정상적인 리소스 사용량 식별 프로파일러는 대개 앱이 CPU와 메모리를 어떻게 소비하는지 파악하는 용도로 쓰인다.앱이.. 독서/자바 잘 읽는 법 2024. 11. 22. Chapter 2, 3, 4. 디버깅 관련 정리 2. 디버깅 기법으로 앱 로직 이해하기 디버거를 사용할 때 제일 중요한 것은 '내가 조사하려는 로직이 무엇인가?'를 아는 것이다. 브레이크 포인트 앱 실행을 중단 시킬 위치는 브레이크 포인트를 찍어 표시한다.브레이크 포인트를 찍으면 해당 코드라인에서 실행이 중단되고 해당 스코프의 모든 변수와 그 값을 살펴볼 수 있다.또 실행 트레이스를 이용하면 코드 라인을 탐색할 때 현재 위치를 기억할 수 있다. 실행 스택 트레이스 실행 스택 트레이스는 마치 실제 지도처럼 디버거가 중단 시킨 코드 라인의 실행 경로를 나타내며, 이후 어디로 나아가야 할지 결정하는 데 도움을 준다.스택 트레이스는 디버거가 실행을 멈춘 지점까지 메서드가 서로 어떻게 호출하는지 나타내며, 메서드명, 클래스명, 호출한 코드 라인을 자세히 표시한.. 독서/자바 잘 읽는 법 2024. 10. 24. Chapter 1. 앱에서 모호한 부분 밝히기 1. 앱에서 모호한 부분 밝히기 이장의 주요 내용은 다음과 같다. 코드 조사 기법자바 앱을 이해하기 위한 코드 조사 기법 개발자는 코드의 작동 방식을 분석하는 다양한 목적으로 디버깅을 수행한다.예시로는 프레임워크 분석, 문제 찾기등이 있다. 1.1 앱을 더 쉽게 이해하는 방법 현재 디버깅은 문제를 콕 집어 조사하는 것뿐만 아니라, 코드가 어떻게 작동하는지 정확하게 이해하는 행위라고 말할 수 있다. 개발자(특히 초심자)는 디버거 도구를 사용하는 일과 디버깅을 동일시하는 착각을 많이 한다.디버거는 코드를 더 쉽게 이해할 수 있게 도와주는 도구이지, 디버깅 기법이 이것만 있는 것은 아니다. 책에서는 아래와 같은 코드 조사 기법을 배울 것이다. 코드 읽기디버깅로그 분석프로파일링스레드 상태 분석메모리 상태 분석모.. 독서/자바 잘 읽는 법 2024. 10. 21. Tomcat Connector 오늘은 지난시간에 자세히 다루지 못했던 Tomcat Connector에 대해 공부해보려고 한다. Connector는 클라이언트와의 요청을 처리해 서버(서블릿 컨테이너)로 넘겨주는 역할을 맡는다. Tomcat에는 크게 AJP Connector와 HTTP Connector 2가지가 있다.이 두 Connector는 BIO Connector(현재는 사용 X), NIO Connector, NIO2 Connector, Apr Connector로 구현된다. 참고로 BIO Connector는 Tomcat 9.0부터 사용할 수 없다.Tomcat 9.0부터 NIO 및 NIO2 Connector에서 OpenSSL을 사용하여 TLS(TLS/SSL) 암호화를 지원할 수 있다. 아래 표를 참고하면 커넥터에서 JSSE와 OpenS.. 개발 2024. 6. 3. 자바에서 모니터가 동작하는 원리 (with synchronized) 모니터란 모니터란 뮤텍스나 세마포어보다 더 고수준의 동기화 기법이다. 전공 수업에서는 세마포어를 편리하게 사용하기 위해 인터페이스를 제공한 것이 모니터라고 배웠었다. 부족하지만 수업을 듣고 정리해 놓은 글이 있다. https://devdebin.tistory.com/16#%EC%84%B8%EB%A7%88%ED%8F%AC%EC%96%B4-1 임계 구역과 임계 구역 해결 방법 2021. 10. 2. 00:51 2022. 6. 22. 15:30 복습을 위한 수정 시작 프로세스는 독립적으로 작업을 할 수도 있고 공유된 자원을 가지고 공동 작업을 할 수도 있다고 이전 장에서 언급했다. 이번에는 본격적으로 devdebin.tistory.com 자바에서의 모니터 모든 자바 객체는 모니터를 가진다. 여러 스레드가 객체.. 개발/Java 2023. 12. 28. 토비의 스프링 Vol.1 5장 서비스 추상화 실습 코드는 아래에서 확인 가능합니다. https://github.com/happysubin/book-study/commits/main GitHub - happysubin/book-study Contribute to happysubin/book-study development by creating an account on GitHub. github.com 5.1 사용자 레벨 기능 추가 이전 시간까지는 UserDao에서 User 객체를 단순히 CRUD 하는 작업만 가능했는데, 이번 파트 부터는 특별한 비즈니스 로직을 추가했다. UserDao에서 User 객체를 모두 가져와서 일정 방문 횟수와 추천 수를 넘기면 User 객체의 레벨을 올리는 로직이다. 레벨을 나타내기 위해 Enum을 사용했다. 이번 파트에서.. 독서/토비의 스프링 2023. 2. 17. 자바 제네릭(Generics) 백기선님이 과거에 진행했던 Java 스터디 14주차 스터디 입니다. 제네릭 사용법 제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다. 제네릭 클래스의 선언 class Box { //제네릭 타입 T를 선언 T item; void setItem(T item){ this.item = item; } T getItem() { return item; } } Box에서 T를 타입 변수라고 하며, Type의 첫 글자에서 따온 것이다. T라고 적지 않아도 된다. 타입 변수가 여러 개인 경우에는 Map와 같이 콤마를 구분자로 나열하면 된다. 기호의 종류만 다를 뿐 임의.. 개발/Java 2022. 12. 10. NextStep 자바 플레이 그라운드 with TDD, 클린코드 part 3 자바지기 박재성님이 운영하시는 NextStep 교육 웹사이트에서 수강한 자바 플레이 그라운드 with TDD, 클린코드에 대한 공부 기록을 남기려고 합니다. 이번 포스팅은 자바의 상속, 인터페이스에 관련된 좌표 계산기 미션에 관한 포스팅입니다. 강의를 통해 느낀 점 (피드백을 보기 전) 프로그래밍 요구사항에는 이전 미션과 크게 차이가 없었다. 기능요구사항도 좌표 입력 형식, 좌표 입력 값 범위 등 크게 특별하다고 느낀 부분은 없었다. 기억할 부분은 좌표가 2개면 직선 거리 계산, 좌표가 3개면 삼각형 넓이 계산, 좌표가 4개면 직사각형으로 계산하는 것이다. 직사각형인 경우에는 직사각형인지 validation을 해줘야 한다. 먼저 미션에서 필자는 enum을 적극적으로 사용하자는 생각을 했다. 도형의 좌표 .. 프로젝트 2022. 8. 14. 우아한 스프링 부트 공부 기록 스프링 부트 스프링 부트는 스프링을 쉽게 제공하기 위해 제공되는 툴이다. 참고로 스프링이란 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크다. 스프링 부트가 제공하는 3가지 큰 영역 빌드 : 프로젝트 생성, 의존성 관리, 애플리케이션 패키징 및 실행 코딩 : 개발 툴 제공, 자동 설정, 외부 설정 배포 및 관리 : 도커 이미지 생성, Actuator, 스프링 부트 어드민 빌드 프로젝트 생성 https://start.spring.io/ 여기에서 스프링 프로젝트를 만든다. 들어가면 다음과 좌측면에 같은 화면이 나온다. 스냅샷(SNAPSHOT)은 개발 중인 버전. 가급적이면 사용하지 말자. M(Milestone) 버전 배포는 했지만 바뀔 수 있는 버전. 공부하지 않는 이상 사용하.. 개발/Spring Boot 2022. 7. 30. 토비의 스프링 Vol.1 1장 오브젝트와 의존관계 2023.02.13 복습 및 정리 실습 레포는 아래와 같습니다. https://github.com/happysubin/book-study/tree/main/%ED%86%A0%EB%B9%84%EC%9D%98%20%EC%8A%A4%ED%94%84%EB%A7%81 이번 포스팅은 토비의 스프링 3.1 1장에 관한 학습 기록입니다. 1장 도입부 자바는 객체지향 언어다. 우리가 학습하는 스프링은 자바를 기반으로 한 프레임워크다. 자바를 기반으로 만들어진 기술, 스프링이 제일 중요하게 여기는 핵심 가치는 바로 객체지향적인 프로그래밍이다. 그러므로 스프링은 오브젝트(객체)에 제일 관심을 많이 둔다. 오브젝트 간의 관계에 집중하며, 라이프 사이클에 집중한다. 더 나아가서는 오브젝트 설계, 어떤 단위로 만들어지는지까지 관.. 독서/토비의 스프링 2022. 7. 21. ThreadLocal ThreadLocal 쓰레드 로컬은 해당 쓰레드만 접근할 수 있는 특별한 저장소다. 쓰레드 로컬을 사용하면 각 쓰레드마다 별도의 내부 저장소를 제공한다. 따라서 같은 인스턴스의 쓰레드 로컬 필드에 접근해도 문제 없다. 여러 쓰레드가 같은 인스턴스의 멤버 변수에 접근하면 처음 쓰레드가 보관한 데이터가 사라질 수 있는데, 이런 경우 쓰레드 로컬을 사용하면 데이터를 안정적으로 접근하고 사용할 수 있다. thread-A 가 userA 라는 값을 저장하면 쓰레드 로컬은 thread-A 전용 보관소에 데이터를 안전하게 보관한다. thread-B 가 userB 라는 값을 저장하면 쓰레드 로컬은 thread-B 전용 보관소에 데이터를 안전하게 보관한다. 자바는 언어차원에서 쓰레드 로컬을 지원하기 위한 java.lang.. 개발/Java 2022. 6. 27. 이전 1 2 다음 반응형