반응형 독서25 Chapter 6. 프로파일링 기법으로 리소스 사용 문제 파악하기 프로파일러는 다양한 난관에 봉착했을 때 앱이 이상하게 작동되는 근본 원인을 밝혀내는 강력한 도구다.프로파일러는 실행 중인 JVM 프로세스를 가로채서 다음과 같이 유용한 세부 정보를 제공한다. CPU와 메모리 같은 리소스가 앱에서 어떻게 소비되는가?실행 중인 스레드와 그 현재 상태는 어떤가?실행 중인 코드 및 특정 조각에서 사용하는 리소스(예: 메서드별 실행 시간)는 무엇인가? 1. 프로파일러는 어떤 경우에 유용할까? 프로파일링 도구가 도움이 되는 상황을 세 가지 정도 꼽아보면 이렇다. 비정상적인 리소스 사용량 식별코드의 어느 부분이 실행되는지 찾기앱 실행 속도가 저하되는 문제 파악 1.1 비정상적인 리소스 사용량 식별 프로파일러는 대개 앱이 CPU와 메모리를 어떻게 소비하는지 파악하는 용도로 쓰인다.앱이.. 독서/자바 잘 읽는 법 2024. 11. 22. Chapter 5. 로그를 활용하여 앱 동작 감시하기 표준 메시지 로그 메시지 포맷부터 먼저 알아보자. 2021-07-25 16:11:01.434 INFO o.s.b.w.embedded.tomcat.TomcatWebServer: Tomcat started on port(s): 8080 (http) with context path 로그 메시지는 타임스탬프, 심각도, 앱의 어느 파트에서 메시지를 남겼는지 등의 정보가 포함된다. 2021-07-25 16:11:01.434: 앱이 메시지를 기록한 시점으로, 시간순으로 정렬된다.INFO: 메시지의 중요도이다.o.s.b.w.embedded.tomcat.TomcatWebServer: 로그 메시지를 남긴 모듈과 클래스를 보통 표시한다.Tomcat started on port(s): 8080 (http) with conte.. 독서/자바 잘 읽는 법 2024. 10. 28. Chapter 2, 3, 4. 디버깅 관련 정리 2. 디버깅 기법으로 앱 로직 이해하기 디버거를 사용할 때 제일 중요한 것은 '내가 조사하려는 로직이 무엇인가?'를 아는 것이다. 브레이크 포인트 앱 실행을 중단 시킬 위치는 브레이크 포인트를 찍어 표시한다.브레이크 포인트를 찍으면 해당 코드라인에서 실행이 중단되고 해당 스코프의 모든 변수와 그 값을 살펴볼 수 있다.또 실행 트레이스를 이용하면 코드 라인을 탐색할 때 현재 위치를 기억할 수 있다. 실행 스택 트레이스 실행 스택 트레이스는 마치 실제 지도처럼 디버거가 중단 시킨 코드 라인의 실행 경로를 나타내며, 이후 어디로 나아가야 할지 결정하는 데 도움을 준다.스택 트레이스는 디버거가 실행을 멈춘 지점까지 메서드가 서로 어떻게 호출하는지 나타내며, 메서드명, 클래스명, 호출한 코드 라인을 자세히 표시한.. 독서/자바 잘 읽는 법 2024. 10. 24. Chapter 1. 앱에서 모호한 부분 밝히기 1. 앱에서 모호한 부분 밝히기 이장의 주요 내용은 다음과 같다. 코드 조사 기법자바 앱을 이해하기 위한 코드 조사 기법 개발자는 코드의 작동 방식을 분석하는 다양한 목적으로 디버깅을 수행한다.예시로는 프레임워크 분석, 문제 찾기등이 있다. 1.1 앱을 더 쉽게 이해하는 방법 현재 디버깅은 문제를 콕 집어 조사하는 것뿐만 아니라, 코드가 어떻게 작동하는지 정확하게 이해하는 행위라고 말할 수 있다. 개발자(특히 초심자)는 디버거 도구를 사용하는 일과 디버깅을 동일시하는 착각을 많이 한다.디버거는 코드를 더 쉽게 이해할 수 있게 도와주는 도구이지, 디버깅 기법이 이것만 있는 것은 아니다. 책에서는 아래와 같은 코드 조사 기법을 배울 것이다. 코드 읽기디버깅로그 분석프로파일링스레드 상태 분석메모리 상태 분석모.. 독서/자바 잘 읽는 법 2024. 10. 21. 모던 리눅스 교과서 정리 (5장 ~ 8장) 5장. 파일 시스템리눅스 리소스의 대부분은 실제 파일이다.리눅스에서 파일로 취급되는 것도 존재하는데 바로 디바이스와 의사 디바이스가 그런 종류다.예를 들어 커널은 PID나 프로세스를 실행하는 데 사용되는 바이너리처럼 프로세스에 대한 특정 런타임 정보를 노출한다. 이 모든 것이 공통적으로 지니는 점은 파일 열기, 파일에 대한 정보 수집, 파일 작성 등과 같이 표준화되고 통일된 인터페이스다.리눅스에서는 바로 파일시스템이 이런 통일된 인터페이스를 제공한다.이 인터페이스와 리눅스가 파일을 바이트 스트림으로 최급한다는 사실이 더해져서, 구조에 대한 별다른 염려 없이 다양한 파일 유형을 지원하는 도구를 만들 수 있게 된다. 일반적으로 파일 시스템은 커널에서 제공된다.파일 시스템은 권한이 내장되어 있다. 소유권은 .. 독서 2024. 4. 27. 모던 리눅스 교과서 정리 (1장 ~ 4장) 모던 리눅스 교과서를 드디어 완독했다. 오로지 본인이 기억하고 싶고, 중요하다고 생각했던 부분을 정리할 예정이다. 리눅스가 운영체제이므로 운영체제에 대한 기초적인 내용(ex 시스템 콜 기본, 운영체제 기본)이 나오는데 이와 같은 분을 생략할 예정이다. 1장. 리눅스 소개 리눅스는 유닉스의 전통을 따라 기본적으로 리소스의 전역 보기(글로벌 뷰)를 지원한다. 리소스란 소프퉤어 실행을 지원하는데 사용할 수 있는 모든 것을 말한다. 예를 들어 하드웨어와 그 추상화(CPU, RAM, 파일), 파일 시스템, HDD, SSD, 프로세스, 디바이스나 라웉이 테이블 같은 네트워킹 관련 항목, 사용자를 나타내는 자격증명이 포함된다. 리눅스는 프로세스 ID를 사용해 프로세스를 식별한다. 동일한 PID를 가진 프로세스가 리눅.. 독서 2024. 4. 22. 토비의 스프링 Vol.1 8장 스프링이란 무엇인가 8.1 스프링이란 무엇인가? 스프링에 대해 가장 잘 알려진 정의는 '자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크'다. 이 문장을 풀어서 살펴보자. 애플리케이션 프레임워크 경량급 자바 엔터프라이즈 개발을 편하게 오픈소스 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다. 애플리케이션 프레임워크는 애플리케이션 개발의 전 과정을 빠르고 편리하며 효율적으로 진행하는데 일차적인 목표를 두는 프레임워크다. 경량급 스프링이 가볍다는 건 기술수준이 가볍다거나, 스프링이 유치하고 용도가 제한적이라는 의미가 아니다. 불필요하게 무겁지 않고 가볍고 단순한 환경에서도 엔터프라이즈 개발의 고급 기술을 대부분.. 독서/토비의 스프링 2023. 2. 21. 토비의 스프링 Vol.1 6장 트랜잭션 포스팅을 시작하겠습니다. 아래는 우리가 작성한 TransactionAdvice의 invoke 메서드 코드다. public Object invoke(MethodInvocation invocation) throws Throwable { TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition()); try{ Object ret = invocation.proceed(); transactionManager.commit(status); return ret; } catch(RuntimeException e){ transactionManager.rollback(status); throw e; } } 우리가 .. 독서/토비의 스프링 2023. 2. 19. 토비의 스프링 Vol.1 6장 AOP 포스팅 시작하겠습니다. 6.1 트랜잭션 코드의 분리 지난 챕터에서 우리는 서비스 추상화를 이용해 UserService에서 특정 트랜잭션 기술에 종속적이지 않은 깔끔한 코드를 만들었다. 그러나 여전히 비즈니스 로직을 수행해야만 하는 UserService에 트랜잭션 기술 코드가 들어있다. 이를 해결하기 위해 데코레이터 패턴을 적용했다. UserService 인터페이스를 만들고 이를 구현한 비즈니스 로직을 수행하는 UserServiceImpl 클래스와 트랜잭션을 수행할 UserServiceTx 구현클래스를 작성했다. UserServiceTx가 UserServiceImpl을 인스턴스 변수로 받아 트랜잭션 경계 설정 코드를 진행하고 비즈니스 로직 관련 부분은 UserServiceImpl 메서드를 호출하면서 위임한.. 독서/토비의 스프링 2023. 2. 18. 토비의 스프링 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. 토비의 스프링 Vol.1 2장 테스트 2장은 테스트에 관련된 내용입니다. 실습은 아래에서 확인할 수 있습니다. https://github.com/happysubin/book-study/commit/d31fcf6587d719e39cb28e62abc7ff7634b7c179 Feat: 토비의 스프링 2장 학습 마무리 · happysubin/book-study@d31fcf6 Show file tree Showing 4 changed files with 127 additions and 33 deletions. github.com 스프링이 제공하는 가장 중요한 가치는 객체지향과 테스트다. 이번 2장에서는 스프링이 제공하는 가장 중요한 가치 중 하나인 테스트에 대해 살펴본다. 애플리케이션은 요구사항이 들어오면서 변하고 복잡해진다. 테스트 코드를 잘 작성.. 독서/토비의 스프링 2023. 2. 14. 객체지향의 사실과 오해 5 ~ 7장 바로 시작하겠습니다. 5장. 책임과 메세지 요청(메시지)를 처리하기 위해 객체가 수행하는 행동을 책임이라고 한다. 즉 메서드란 메시지를 수신했을 때 책임을 수행하는 방법이다. 자율적인 객체란 스스로의 의지와 판단에 따라 각자 맡은 책임을 수행하는 객체이다. 객체지향 세계는 자율적인 객체들의 공동체다. 객체가 자율적이기 위해서는 객체에게 할당되는 책임의 수준 역시 자율적이어야 한다. 필자는 이 말이 의존성이 너무 많거나 강한 의존이 존재하면 안 좋다는 말로 이해했다. 자율적인 책임의 특징은 객체가 어떻게(how) 해야 하는가가 아니라 무엇(what)을 해야 하는가를 설명한다는 것이다. 다형성이란 서로 다른 유형의 객체가 동일한 메시지에 대해 서로 다르게 반응하는 것을 의미한다. 객체지향 패러다임이 강력한 .. 독서/객체지향의 사실과 오해 2022. 8. 17. 이전 1 2 3 다음 반응형