book

    [자바 최적화] 성능과 최적화

    [자바 최적화] 성능과 최적화

    자바 최적화 책 정리 자바 최적화(Optimizing Java) | 벤저민 J. 에번스 - 교보문고 자바 최적화(Optimizing Java) | 자바 애플리케이션 성능을 한 단계 높여줄 튜닝 이야기성능 튜닝은 실험과학이다. 추측과 구전 튜닝에 의존할 일이 아니다. 이 책은 복잡한 기술 스택을 다루는 중/고 product.kyobobook.co.kr 자바 성능: 잘못된 방법 ✅ 잘못된 조언 한동안 구글에서 'Java Performance Tuning'이라 검색하면 97 ~ 98년에 작성된 글 3개가 상위권을 차지했다. 그러나, 이들은 지금은 더 이상 안 맞는, 심지어 애플리케이션에 악영향을 끼칠 만한 내용으로 가득 차 있다. ex) 자바 초창기에 메서드 디스패치(어떤 메소드를 호출할 것인가를 결정하는 과..

    [DDD Start] 아키텍처 개요

    [DDD Start] 아키텍처 개요

    도메인 주도 개발 시작하기 책 정리 도메인 주도 개발 시작하기 실제 업무에 도메인 주도 설계(DDD)를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성한 DDD 입문서 www.hanbit.co.kr 네 개의 영역 ✅ 표현 사용자의 요청을 받아 응용 영역에 전달하고 응용 영역의 처리 결과를 다시 사용자에게 보여주는 역할 -> 스프링 MVC가 표현 영역을 위한 기술에 해당한다. ✅ 응용 시스템이 사용자에게 제공해야 할 기능을 구현 -> 도메인 로직을 직접 수행하기보다는 도메인 영역에 로직 수행을 위임한다. ✅ 도메인 도메인의 핵심 로직(도메인 모델)을 구현한다. ✅ 인프라스트럭처 구현 기술에 대한 것을 다룬다. 계층 구조 아키텍처 ✅ 계층 구조 네 개의 영역을 구성..

    [DDD Start] 도메인 모델 시작하기

    [DDD Start] 도메인 모델 시작하기

    도메인 주도 개발 시작하기 책 정리 도메인 주도 개발 시작하기 실제 업무에 도메인 주도 설계(DDD)를 적용할 수 있도록 기본적인 DDD의 핵심 개념을 익히고 구현을 통해 학습할 수 있도록 구성한 DDD 입문서 www.hanbit.co.kr 도메인이란? ✅ 도메인 소프트웨어로 해결하고자 하는 문제 영역 도메인은 하위 도메인으로 나눌 수 있다. ex) 온라인 서점 도메인 -> 주문, 결제, 배송, ... 도메인 전문가와 개발자 간 지식 공유 ✅ 요구사항 개발에 앞서 요구사항을 올바르게 이해하는 것이 중요하다. ✅ 요구사항을 올바르게 이해하려면? 개발자와 도메인 전문가가 직접 대화해야 한다. 도메인 전문가, 관계자, 개발자가 같은 지식을 공유하고 직접 소통할수록 도메인 전문가가 원하는 제품을 만들 가능성이 ..

    [Clean Code] 9. 단위 테스트

    [Clean Code] 9. 단위 테스트

    TDD 법칙 세 가지 첫째 법칙: 실패하는 단위 테스트를 작성할 때까지 실제 코드를 작성하지 않는다. 둘째 법칙: 컴파일은 실패하지 않으면서 실행이 실패하는 정도로만 단위 테스트를 작성한다. 셋째 법칙: 현재 실패하는 테스트를 통과할 정도로만 실제 코드를 작성한다. 이렇게 하면 실제 코드를 전부 테스트하는 테스트 케이스가 나온다. 하지만 실제 코드와 맞먹을 정도로 방대한 테스트 코드는 심각한 관리 문제를 유발하기도 한다. 깨끗한 테스트 코드 유지하기 만약 테스트 코드가 더럽다면, 실제 코드를 변경해 기존 테스트 케이스가 실패했을 때, 지저분한 코드로 인해 변경하기 어려워진다. 테스트 코드는 실제 코드 못지 않게 중요하다. 테스트 케이스가 있으면 변경이 두렵지 않다. 테스트 케이스가 없다면 모든 변경이 잠..

    [Clean Code] 8. 경계

    [Clean Code] 8. 경계

    외부 코드 사용하기 인터페이스 제공자는 더 많은 환경에서 돌아가야 더 많은 고객이 구매하니까 적용성을 최대한 넓히려 애쓴다. 반면, 인터페이스 사용자는 자신의 요구에 집중하는 인터페이스를 바란다. 이런 긴장으로 인해 시스템 경계에서 문제가 생길 소지가 많다. 한 예로, java.util.Map을 살펴보자. Map이 제공하는 기능성과 유연성은 확실히 유용하지만 그만큼 위험도 크다. 예를 들어, 프로그램에서 Map을 만들어 여기저기 넘긴다고 가정하자. 넘기는 쪽에서는 아무도 Map 내용을 삭제하지 않으리라 믿겠지만, Map에는 clear() 메서드가 있고, 누구나 Map 내용을 지울 권한이 있다는 말이다. 또 다른 예로, 설계 시 Map에 특정 객체 유형만 저장하기로 결정했다고 하자. 그렇지만 Map은 객체..

    [Clean Code] 7. 오류 처리

    [Clean Code] 7. 오류 처리

    오류 코드보다 예외를 사용하라 예외를 사용하지 않고 오류 플래그를 설정하는 등의 방식은 코드를 복잡하게 만든다. 오류가 발생하면 예외를 던지는 편이 낫다. 그래야 코드가 깔끔해진다. 논리가 오류 처리 코드와 뒤섞이지 앟는다. Try-Catch-Finally 문부터 작성하라 예외가 발생할 코드를 짤 때는 try-catch-finally 문으로 시작하는 편이 낫다. 그러면 try 블록에서 무슨 일이 생기든지 호출자가 기대하는 상태를 정의하기 쉬워진다. 미확인 예외를 사용하라 자바 첫 버전이 확인된 예외를 선보였던 당시는 확인된 예외가 멋진 아이디어로 여겨졌다. 메서드를 선언할 때는 메서드가 반환할 예외를 모두 열거했다. 그러나 C#, C++, 파이썬, 루비는 확인된 예외를 지원하지 않음에도 불구하고 안정적인..

    [Clean Code] 6. 객체와 자료 구조

    [Clean Code] 6. 객체와 자료 구조

    자료 추상화 두 예제의 차이를 살펴보자. 두 예제 모두 2차원 점을 표현하다. 그런데 한 클래스는 구현을 외부로 노출하고, 다른 클래스는 구현을 완전히 숨긴다. class Point { public double x; public double y; } ---------------------------------------------- interface Point { double getX(); double getY(); void setCartesian(double x, double y); double getR(); double getTheta(); void setPolar(double r, double theta); } 아래 예제는 점이 직교좌표계를 사용하는지 극좌표계를 사용하는지 알 길이 없다. 그럼에도 ..

    [Clean Code] 5. 형식 맞추기

    [Clean Code] 5. 형식 맞추기

    형식을 맞추는 목적 코드 형식은 중요하다! 코드 형식은 의사소통의 일환이다. 오늘 구현한 기능이 다음 버전에서 바뀐다 하더라도 오늘 구현한 코드의 가독성은 앞으로 바뀔 코드의 품질에 지대한 영향을 미친다. 적절한 행 길이를 유지하라 대부분 200줄 정도인 파일로도 커다란 시스템을 구축할 수 있다. 반드시 지킬 엄격한 규칙은 아니지만 바람직한 규칙으로 삼으면 좋겠다. 큰 파일보다 작은 파일이 이해하기 쉽다. 신문 기사를 떠올려 보자. 최상단에 기사를 몇 마디로 요약하는 표제가 나온다. 첫 문단은 전체 기사 내용을 요약한다. 쭉 읽으며 내려가면 세세한 사실이 조금씩 드러난다. 소스 파일도 신문 기사와 비슷하게 작성한다. 이름은 간단하면서도 설명이 가능하게 짓는다. 소스 파일 첫 부분은 고차원 개념을, 아래로..