전체 글

· 기타
문제 상황 (1) Can't be opened becaues Apple cannot check it for malicious software. 웹브라우저로 protobuffer binary 파일을 다운받는다. https://github.com/protocolbuffers/protobuf/releases/download/v25.1/protoc-25.1-osx-universal_binary.zip Can't be opened becaues Apple cannot check it for malicious software. 웹 브라우저로 다운로드 받은 Binary 실행 파일은 그냥 열 수 없다. Apple 은 어떤 실행파일이든 Notarization 이라고하는 과정을 거친 파일만 웹에 게시되고, 다운로드하여 실..
· JVM/Java
거짓 중복 발생 사례 상품의 정가를 나타내는 Regular Price 를 정의해봅시다. public class RegularPrice { private static final int MIN_AMOUNT = 0; private final int value; RegularPrice(final int amount) { if (amount < MIN_AMOUNT) throw new IllegalArgumentException("가격은 0원 이상이어야 합니다."); this.value = amount; } } 일반 할인, 여름 할인을 책임지는 클래스를 정의해봅시다. @Getter public class RegularDiscountedPrice { private static final int MIN_AMOUNT =..
환경 Redis Master 3대 + Slave 3대 클러스터 모드 문제 상황 특정 클러스터 노드에 multi key 명령어 사용시 에러 발생 DEL id:1 id:2 id:3 id:4 id:5 특정 노드에서 id:1 ~ id:5 에 해당하는 슬롯을 가지고 있다 하더라도 '슬롯'까지 같아야만함. 해결책 tag 사용 key에 {} 로 태그를 지정하면 특정 슬롯에 저장됨을 보장할 수 있다. group by slot slot 별로 키를 담아서 해당 슬롯을 가지고있는 노드로부터 multi key 연산을 실행한다. tistory 테마 적용이 깨짐에 따라 medium 에 글을 기고했다. https://medium.com/@mbh023/redis-multi-key-command-in-cluster-mode-feat-..
좋은 코드란? 변경 용이성, 유지 보수성을 갖춘 코드다. 읽기 좋은 코드가 성능 개선된 코드보다 낫다. Legacy 코드는 곧 변경이 어려운, 유지 보수하기 어려운 코드다. 응집도 클래스의 응집도가 낮으면 API 변경 시 수정 누락으로 버그가 발생할 수 있다. (거대한 클래스를 만들고 그 클래스의 메소드 변경시 해당 클래스에 의존하는 다른 모듈에서 에러가 발생할 수 있다.) 가독성 개발자는 코드를 짜는 시간보다 읽는 시간이 길다. 가독성이 떨어진단 얘기는 많은 시간을 이해하는데 소모하게 한다는 것이다. 즉, 생산성 저하가 발생한다. 나무꾼의 딜레마 한 나무꾼이 나무를 베느라 낑낑대고 있었다. 지나가는 행인이 말했다. "도끼를 좀 갈고 베야하지 않을까요?" 나무꾼은 대답했다. "급해서 도끼를 갈 시간이 없..
· JVM/Java
TL;DR; 무적권 .eqauls() 대신 ==을 써라. Pizza.java @Getter @NoArgsConstructor @AllArgsConstructor public class Pizza { // == 을 쓰면 좋은 이유 // getStatus() 랑 PizzaStatus 값(평가값)이 실제로 같다 하더라도 타입은 다르기 때문에 // compile error 가 발생해야한다. // 이를 피하기위해 .equals() 대신 == 을 쓴다. // Q. enum 에 string 값을 삽입할 수 있는가? private PizzaStatus status; private PizzaColor color; public enum PizzaColor { GREEN, RED, BLUE } public enum Pizz..
· JVM/Spring
환경 분리가 왜 필요한가? 애플리케이션은 로컬, 개발, 운영, 테스트 등 다양한 환경을 지원하고 싶을 수 있다. 각 환경마다 다른 자원, 스팩을 사용하는 일은 생각보다 자주 마주친다. SpringBoot 는 이를 지원하기 위한 매커니즘으로 Profile 을 제공한다. yaml 파일로 환경 분리하기 사전 준비 SpringBoot 앱이 로드되자마자 Yaml 파일을 읽어 로깅하도록 지정했다. 어노테이션은 주석을 참고하자. (1) 하나의 application.yaml 에 때려박기 (2) 환경별 yaml 파일 분리하기 profile 을 환경별로 분리하여 정의하고 `application.yaml` 에서 `spring.profiles.active` 값만 지정해줘야한다. 해당 값 미지정시 어느 프로파일로 실행할지 결정..
M_Falcon
Falcon