전체 글 645

설계 품질과 트레이드오프 | 책임 할당하기 | 메시지와 인터페이스

조영호의 '오브젝트'를 읽고 알게 된 내용을 정리한다 😊4장. 설계 품질과 트레이드오프🌈 TIL객체지향설계는 올바른 객체에게 올바른 책임을 할당하는 것이다. 이를 통해 낮은 결합도와 높은 응집도를 가진 구조를 만들 수 있다.응집도는 모듈에 포함된 내부 요소들이 연관되어있는 정도다.결합도는 의존성의 정도다.캡슐화를 지키면 응집도는 높아지며 결합도는 낮아진다.데이터 중심의 설계는 캡슐화 위반, 높은 결합도, 낮은 응집도의 문제가 있을 가능성이 높다.접근자와 수정자 메서드를 사용하는 게 캡슐화를 한다고 생각했는데 아니라는 것을 알았다. 속성의 가시성을 private로 설정했다고 해도 접근자와 수정자를 통해 속성을 외부로 제공하면 캡슐화를 위반한 것이다.추측에 의한 설계전략(design-by-guessing..

JAVA 2024.08.25

could not create task ':funding:generatequerydslproto'.

🐛 문제 상황funding 모듈이 빌드가 되지 않고, 아래와 같이 funding만 Tasks도 뜨지 않았다.검색해도 해결방법이 나오지 않았다. Could not create task ':funding:generateQuerydslProto'.Invalid state: INIT* Try:> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Exception is:com.intellij.openapi.externalSystem.model.ExternalSystemException: Could not create task ':funding:generateQuerydslProto'.In..

IDE/Intellij 2024.08.10

[Ubuntu] MySQL 자동 백업 설정

🧀 폴더 생성 및 권한 수정755는 앞자리 수부터 사용자, 그룹, 다른 사용자를 의미한다.7은 사용자에게 읽기(r), 쓰기(w), 실행(x) 권한을 준다.그룹과 다른 사용자에게는 읽기(r), 실행(x) 권한을 준다.mkdir db_backupchmod 755 db_backup drwxr-xr-x디렉토리읽기(4)쓰기(2)실행(1)읽기(4)0실행(1)읽기(4)0실행(1)   🍍 스크립트 파일 생성 및 작성백업 파일명은 년도, 달, 일, 시, 분, 초가 들어가게 했다.위에서 생성한 폴더 아래에 백업된 파일이 생성된다.백업 파일이 생성된지 14일이 지나면 그 파일은 삭제된다.-p와 {비밀번호} 사이에 공백이 있으면 안 된다.스크립트를 작성한 후 sh {스크립트 파일명}으로 실행해보는 게 좋다. 권한 문제가 ..

Linux 2024.07.23

이상한 나라의 객체 | 역할, 책임, 협력

요즘 가장 관심 있는 분야는 객체지향 설계다.최근에 했던 프로젝트를 리팩토링 하면서 디자인 패턴을 적용하여 문제도 해결하고 있다.리팩토링을 하는 것도 좋지만, 만약에 프로젝트 초기로 돌아간다면 좋은 객체지향 설계를 하는 것에 집중할 것 같다.이번 기회에 어쩌면 잘못 이해하고 있었을 수 있었던 객체지향 설계에 대해 제대로 알고 싶었다.이 책은 ' 객체지향의 사실과 오해'의 저자로 유명하신 조영호님이 쓰셨다.예전에 '객체지향의 사실과 오해'는 조금 읽다가 이해하기 어려워서 다 읽지 못했었다. 🥹'오브젝트'는 목차랑 내용을 살펴보니 예제도 많고 이해하기 쉬울 것 같아서 구입했다.'오브젝트'를 다 읽으면 '객체지향의 사실과 오해'도 읽을 예정이다. 😁알게 된 내용은 프로젝트에도 적용해야지!!!  2장. 이상..

JAVA 2024.07.15

Facade Pattern

한 서비스에서 여러 레포지토리를 참조하고 있는 게 서비스 입장에서 과도한 책임을 가지게 된다는 것을 알게 되었다.이를 해결하기 위해 디자인 패턴 중 하나인 Facade Pattern을 적용하였다.   🍗 Facade Pattern 적용 후 PaymentServiceFacade Pattern을 적용한 후 PaymentFacadeRepository클래스만 참조하면 되기 때문에 책임이 줄어들었다.Interface를 만들지 고민했는데 기능을 확장할 가능성이 없으면, 구현체를 사용하는 것만으로 충분하다고 생각했다.@Slf4j@Service@RequiredArgsConstructorpublic class PaymentService { private final PaymentsConfirmClient payme..

JAVA 2024.07.03

[Kubernetes] CI/CD

gcloud services enable container.googleapis.com cloudbuild.googleapis.com sourcerepo.googleapis.com containeranalysis.googleapis.comCloudBuild API를 활성화한다. gcloud artifacts repositories create my-repository --repository-format=docker --location=us-central1Artifact Registry에 my-repository라는 이름으로 저장소를 생성했다.  gcloud container clusters create hello-cloudbuild --num-nodes 1 --region us-central1클러스터를 생..

DevOps/Kubernetes 2024.06.11

[Kubernetes] helm

gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/helm-nodejs .이미지를 빌드해서 Cloud Container Registry에 push했다.  Helm 차트helm create helm-chart차트 생성 cd helm-chartcat values.yaml  cat Chart.yamlappVersion을 확인할 수 있다. cd templatescat service.yaml helm install helm-nodejs .helm 차트를 설치했다.helm-chart 폴더 아래에서 명령어를 실행하지 않으면 위와 같은 에러가 뜬다.Chart.yaml 파일이 필요하기 때문이다. helm package .패키지를 생성한다. gcloud auth pri..

DevOps/Kubernetes 2024.06.09

[Kubernetes] 배포

GKE 클러스터에 연결export my_zone=us-central1-cexport my_cluster=cluster-1source  gcloud container clusters create $my_cluster --num-nodes 3 --zone $my_zone --enable-ip-alias를 실행시키니까 이미 존재한다고 한다.난 GUI 기반으로 생성해서 그런 듯  deployment.yamlcat > deployment.yaml   디플로이먼트 배포kubectl apply -f deployment.yaml  디플로이먼트 상태 확인kubectl get deployments kubectl get pod  kubectl exec -it {POD_NAME} -- /bin/bashnginx-deploym..

DevOps/Kubernetes 2024.06.09

[MySQL] Dump

1. C:\Program Files\MySQL\MySQL Server 8.0\bin에서 cmd를 켠다. 2. 덤프 파일 생성mysqldump -u {mysql 계정명} -p {백업할 데이터베이스명} > {백업할 파일명}.sql  3. 해당 위치에 덤프 파일이 생성됨   참고 👇👇👇https://m.blog.naver.com/rhrkdfus/221535739080 [Database] Windows에서 MySQL DB 백업하기* 목차 1. 백업할 데이터베이스 확인하기 2. cmd 창에서 MySQL 경로로 이동 3. Database 백업하기 4. ...blog.naver.com

DB/MySQL 2024.05.28