이펙티브 자바 3/E - 3.모든 객체의 공통 메서드
2023. 5. 20. 21:07
개발 서적/이펙티브 자바
Object는 객체를 만들 수 있는 구체 클래스지만 기본적으로는 상속해서 사용하도록 설계되었다 Object에서 final이 아닌 메서드(equals, hashCode, toString, clone, finalize)는 모두 재정의(overriding)를 염두에 두고 설계된 것이라 재정의 시 지켜야 하는 일반 규약이 명확히 정의되어 있다 이번 장에서는 언제 어떻게 재정의해야 하는지 다룬다 1. equals는 일반 규약을 지켜 재정의하라 1.1 equals를 재정의할 필요가 없는 경우 equals 재정의 시 문제가 발생하는 일을 회피하는 가장 쉬운 길은 아예 재정의 하지 않는 것이다 다음 상황 중 하나에 해당한다면 재정의하지 않는 것이 최선이다 각 인스턴스가 본질적으로 고유하다 값을 표현하는 게 아니라 동작..
이펙티브 자바 3/E - 2.객체 생성과 파괴
2023. 4. 30. 20:57
개발 서적/이펙티브 자바
객체를 만들어야 할 때와 만들지 말아야 할 때를 구분하는 방법 올바른 객체 생성 방법과 불필요한 생성을 피하는 방법 제때 파괴됨을 보장하고 파괴 전에 수행해야 할 정리 작업을 관리하는 방법 1. 생성자 대신 정적 팩토리 메서드를 고려하라 정적 팩토리 메서드는 디자인 패턴에서의 팩토리 메서드를 의미하는 게 아님! 1.1 팩토리 메서드의 장점 5가지 1) 이름을 가질 수 있다 생성자에 넘기는 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다 반면 정적 팩토리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다 예를 들어 생성자 BigInteger(int, int, Random) vs 정적 팩토리 메서드 BigInteger.probabalPrime 어느 쪽이 값이 소수인 B..
이펙티브 자바 3/E - 1.들어가기
2023. 4. 19. 22:19
개발 서적/이펙티브 자바
안티패턴을 피하라! 아주 핵심적인 기본 원칙 명료성과 단순성 컴포넌트는 사용자를 놀라게 하는 동작을 해서는 절대 안된다 (정해진 동작이나 예측할 수 있는 동작만 수행해야 한다) 컴포넌트는 가능한 한 작되, 그렇다고 너무 작아서는 안된다 코드는 복사되는 게 아니라 재사용되어야 한다 컴포넌트 사이의 의존성은 최소로 유지해야 한다 오류는 만들어지자마자 가능한 한 빨리 잡아야 한다 이 규칙들이 100% 옳을 수는 없겠지만, 거의 모든 경우에 적용되는 최고의 모범 사례일 것이다 이 규칙들을 생각 없이 맹종하진 말아야 하나, 어겨야 할 때는 합당한 이유가 있어야 한다 마무리 느낀점 아직 상세 내용을 보지 않아서 두리뭉실한 내용들이 있지만 여기서 이야기 하고자하는 규칙들 역시 클린코드 내용과 일맥상통하는 부분이 많아..
RabbitMQ
2023. 4. 2. 17:06
개발 지식/DevOps
RabbitMQ를 통한 기대 효과 - 이전 글에서 설명했던 DB 병목 현상 해결 - 글 목록 데이터를 캐시로 저장하여 DB에 부담을 줄여줌 그럼 Message Queue 중 하나인 RabbitMQ를 사용해보자 0. I/O bound 어플리케이션 실행 이전 글에서 학습했던 내용을 실제 코드에 적용해보자 2023.04.02 - [DevOps] - DB I/O bound 애플리케이션 + Message Queue DB I/O bound 애플리케이션 + Message Queue 0. DB I/O bound 애플리케이션 성능 향상 방법 하드디스크를 많이 사용하는 파일 I/O bound 애플리케이션이라면 서버를 늘려서 성능 향상이 가능하다 하지만 보통은 DB를 사용하는 경우가 많고, DB I/O bo tong-dev..
DB I/O bound 애플리케이션 + Message Queue
2023. 4. 2. 13:13
개발 지식/DevOps
0. DB I/O bound 애플리케이션 성능 향상 방법 하드디스크를 많이 사용하는 파일 I/O bound 애플리케이션이라면 서버를 늘려서 성능 향상이 가능하다 하지만 보통은 DB를 사용하는 경우가 많고, DB I/O bound 애플리케이션의 경우 DB 성능에 의존적이기 때문에 애플리케이션의 서버를 늘려도 DB 병목현상을 해결 할 수 없어서 성능향상이 되지 않을 것 이다 요청이 많이 발생하게 될 경우 즉, 트래픽이 크게 증가하는 경우 서버가 다운되는 현상을 경험하게 된다 이를 막기 위한 방법 중 하나가 Message Queue를 활용하는 방법이다 1. 톰캣 요청 처리 구조 요청이 들어올 경우 우선 큐에 적재 (톰캣 기본 설정 - 큐 사이즈: 100, 스레드 사이즈: 200) 큐에 들어간 요청이 놀고 있는..
Nginx를 통한 로드밸런싱 + 무중단 배포
2023. 3. 16. 00:37
개발 지식/DevOps
GCP에 접속해 보니 젠킨스 서버가...."vm에서 암호화폐 채굴로 인해 무료 서비스 약관을 위반하여 vm 인스턴스가 정지되었습니다."라는 안내와 함께 서버가 중지되어 있었다.. 암호화폐 채굴한 적 없고 젠킨스 공부하고 있었다고 항소요청을 하니 5분도 안 돼서 정지를 풀어줬다 0. 목표 및 테스트 환경 Nginx로 로드밸런싱하여 무중단으로 배포할 수 있는 환경을 구성 로드밸런싱을 진행하기 전 서버를 여러 개로 실행해야 하기 때문에 동일한 환경의 서버를 2개 더 생성했다 GCP의 경우 머신이미지 기능을 활용하면 간단하게 서버 복사가 가능하다 CentOS로 진행 - Jenkins를 실행시킬 jenkins-test-1 - Docker 컨테이너를 띄울 worker-test-1, 2, 3 - nginx를 실행시킬..
Jenkins 배포 환경 구축
2023. 3. 11. 21:46
개발 지식/DevOps
0. 목표 및 테스트 환경 Jenkins 세팅 SSH를 통한 배포 dockerized 애플리케이션 배포 자동화 GCP 클라우드 서버를 통해 진행! CentOS로 진행 - Jenkins를 실행시킬 jenkins-test-1 - Docker 컨테이너를 띄울 worker-test-1 2개의 서버를 생성하였음 1. 관련 파일 설치 - wget, maven(Java 포함), git, docker 설치 sudo yum install wget sudo yum install maven sudo yum install git sudo yum install docker 2. Jenkins 설치 Jenkins 설치 시 패키지를 먼저 추가해 준 다음 설치를 진행해야 한다 sudo wget -O /etc/yum.repos.d/j..
간단한 Docker 환경 구축하기
2023. 3. 11. 18:44
개발 지식/DevOps
0. Docker 환경의 애플리케이션 실행 과정 Docker File 빌드 시 Docker Image가 생성됨. Docker Image를 저장소에 푸쉬하면 Docker Image가 저장소에 업로드 됨. 풀을 통해 Docker Image 다운로드 다운로드된 Docker Image를 런하여 컨테이너 실행 1. Docker File 작성 https://spring.io/guides/topicals/spring-boot-docker/ Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform. spring.io Spring Boot 에서 제공하는 샘플 코드를..
CPU bound Test
2023. 3. 8. 23:11
개발 지식/DevOps
1. 기본 용어 정의 Burst 어떤 현상이 짧은 시간 안에 집중적으로 일어나는 일 CPU Burst 프로세스가 CPU에서 명령을 실행하는 시간 I/O Burst 프로세스가 I/O(Input/Output) 를 요청한 뒤 기다리는 시간 CPU bound 프로세스 CPU burst가 많은 프로세스 주로 행렬 곱이나 고속 연산을 할 때 CPU 성능에 의해 작업 속도가 결정됨 ex) 머신러닝 프로그램 I/O bound 프로세스 CPU burst가 많은 프로세스 파일 쓰기, 디스크 작업, 네트워크 통신을 할 때 주로 나타남 작업(다른 시스템과 통신) 병목에 의해 작업 속도가 결정됨 ex) 백엔드 API 서버 2. CPU bound 애플리케이션 Hash 연산을 반복하여 CPU를 극단적으로 사용하는 애플리케이션을 통..
함께 자라기 - 3부 애자일
2022. 9. 1. 14:10
개발 서적/함께 자라기 - 애자일로 가는길
1. 애자일 애자일은 불확실성이 높은 프로젝트에 적합한 방법이다 애자일이 불확실성을 다루는 방식은 좀 더 짧은 주기로 더 일찍 피드백을 받고 더 다양한 사람으로부터 더 자주 그리고 더 일찍 피드백을 받는 것으로 정리할 수 있다 시대가 변하면서 불확실성이 낮은 프로젝트는 비즈니스적 가치가 없어지고 불확실성이 높은 프로젝트를 하는 것이 일반적이 됨에 따라 빠른 속도로 인기를 얻게 되었다 결과적으로 애자일은 서로의 업무를 공유하고 상호 검토하는 협력을 통해 불행항 일을 '또는' 조건에서 '그리고' 조건으로 바꾸게 한다 모든 사람이 통찰을 얻어야 업무를 개선할 수 있는게 아니라 한 사람이라도 통찰을 얻으면 그걸 공유해서 전체가 개선되는 것 이다 학습과 협력은 불확실성이 큰 상황에서 좋은 대응전략이 된다 애자일의..