전체카테고리 468

Redis 설치 Centos7에서

EPEL Repository 설치 yum install epel-release yum을 업데이트 yum update redis를 설치한다. yum install redis redis를 시작 systemctl start redis redis를 자동 시작될 수 있도록 설정 sudo systemctl enable redis 설치가 잘 되었는지 확인 redis-cli ping 방화벽 추가해주고 재시작 $ firewall-cmd --zone=public --add-service=redis --permanent $ firewall-cmd --reload 간단하게 데이터를 입력하고 확인 $ redis-cli redis 접속 set sampleKey sampleValue get sampleKey 외부접속 허용 /etc..

PaaS/기타 2023.08.31

KeyCloak 17버전 Centos7에 설치하기

※ 서버측과 클라이언트 측 모두 keycloak 서비스 URL로 잘 찾아갈 수 있도록 세팅할 것 Keycloak 17.0.1을 설치한다. 설치 wget https://github.com/keycloak/keycloak/releases/download/17.0.1/keycloak-17.0.1.tar.gz 압축 tar -zxf keycloak-17.0.1.tar.gz 환경설정 keycloak-17.0.1폴더 밑 conf/keycloak.conf에서 환경세팅을 할 수 있다. cd conf vi keycloak.conf keycloak.conf파일에 아래와 같이 추가를 하였다. hostname-strict=false // hostname 체크 해지 hostname-strict-https=false keycloa..

PaaS/기타 2023.08.31

코드 품질올리기, 코드 설계 - 3 성숙한 클래스 만들기 (3/3)

1) 단일 책임 원칙 : Class가 담당하는 책임은 하나로 제한해야 한다. 책임을 대신지는 Class가 만들어지면 다른 클래스가 제대로 성장할 수 없습니다. 중복을 제거하다보면 실수로 책무를 생각하지 않고 중복을 제거하는 경우가 있습니다. 그렇게 되면 하나로 모인 로직이 여러 책무를 담당해야 합니다. 모든 지식은 시스템 내에서 한번만 애매하지 않고 권위있게 표현되어야 합니다. 중복이 발생하더라도 중복제거 과정으로 인해 단일 책무가 위협을 받을때는 중복을 허용해야 합니다. 그리고 하나의 로직으로 봐야하는 흐름이 두 클래스에 분산되어 있는 설계는 좋은 설계라고 말할 수 없습니다. 2) 슈퍼클래스 의존을 탈피하기 위해서는 상속보다는 컴포지션이 좋습니다. 컴포지션이란 사용하고 싶은 클래스를 private 인스..

Programming/기타 2023.08.30

코드 품질올리기, 코드 설계 - 3 성숙한 클래스 만들기 (2/3)

1) 응집도를 저해하는 것들 static 메서드는 인스턴스 변수를 사용할 수 없습니다. 따라서 데이터와 데이터 로직사이에 괴리가 생깁니다. 즉 응집도가 낮아집니다. static 메서드는 로그 출력 전용메서드, 포맷 변환 전용 메서드, 팩토리 메서드등 응집도와 관계없는 기능을 static 으로 정의하면 좋습니다. private 생성자, 팩토리 메서드를 사용해 목적에 따라 초기화 하기 올바른예 class GiftPoint { private static final int MIN_POINT = 0; private static final int STANDARD_MEMBERSHIP_POINT = 3000; private static final int PREMIUM_MEMBERSHIP_POINT = 10000; pr..

Programming/기타 2023.08.30

코드 품질올리기, 코드 설계 - 3 성숙한 클래스 만들기 (1/3)

1) 클래스는 클래스 하나로도 잘 동작할 수 있도록 설계해야 합니다. 또한 복잡한 초기 설정을 하지 않아도 곧바로 사용할 수 있게 해야합니다. 모든 클래스는 자기방어 임무가 있습니다. 다른 클래스를 사용하여 초기화하거나 유효성 검사를 해야하는 클래스는 그 자체로는 안전하게 사용할 수 없는 미성숙한 클래스 입니다. 올바른 예 Class Money { final int amount; final Currency currency; Money(int amount, Currency) { if (amount < 0){ throw new IllegalArgumentException("금액은 0 이상의 값을 지정해 주세요."); } if (currency == null) { throw new NullPointerExce..

Programming/기타 2023.08.30

PagerDuty에 대해서

총평 처음에는 PagerDuty가 도대체 어떤 제품인지 정확하게 이해하지 못했다. HandsOn을 통해서 이 제품의 컨셉을 정확하게 인지하였다. 모니터링이라는 단어에는 잘 생각해보면 다음의 기능적 요소가 포함되어 있다. ㉠ 모니터링 대상(자원)에 대한 Health Check 지표 확인을 어떻게? ㉡ 이슈가 있을때의 관련자에 알람 및 대응을 어떻게? ㉠ 은 기술에 대한 이야기 이며, ㉡ 은 Management에 대한 이야기 이다. PagerDuty는 ㉠ 에도 일부분 기여할 수는 있다(노이즈감소, AIOpns) . 그런데 PagerDuty의 핵심컨셉은 ㉡ 에 맞추어져 있다. 예를들어, 이슈 알람은 어떤 Escalation Rule을 통해서, 누구에게? 담당자 스케쥴은 어떻게 배정해야하는지? 와 같은것이다. ..

코드 품질올리기, 코드 설계 - 2 분기중접 줄이기 (3/3)

이미 존재하는 기능을 다른 방법으로 구현할 필요는 없습니다. 1) 조건을 만족하는 요소가 컬렉션 내부에 하나라도 포함되어 있는 경우 잘못된 예 boolean hasPrisonKey = false; // items List 자료형 for (Item each : items){ if (each.name.equals("감옥열쇠")){ hasPrisonKey = true; break; } } 이 기능을 간단하게 아래와 같이 구현할 수 있습니다. 올바른 예 boolean hasPrisonKey = items.stream().anyMatch( item -> item.name.quals("감옥열쇠") ); 이렇게 anyMatch를 사용하면 for 반복문과 if 조건문을 사용할 필요도 없이 한 줄로 처리를 완료할 수 있..

Programming/기타 2023.08.28

코드 품질올리기, 코드 설계 - 2 분기중접 줄이기 (1/3)

가. 이해하기 어렵게 만드는 분기중첩 조건 분기는 조건에 따라 처리 방식을 다르게 하는데 사용되는 프로그래밍 언어의 기본 제어 구조입니다. 그런데 조건 분기를 어설프게 사용하면 악마가 되어 개발자를 괴롭힙니다. 잘못된 예 if ( 0 < member.hitPoint ) { //살아 있는가? if (member.canAct()) { //움직일 수 있는가? if(magic.costMagicPoint

Programming/기타 2023.08.28

JSESSIONID만으로 세션 유효성 검증하는 방법

1. 아래와 같이 Interceptor Class를 정의한다. Prehandler에 세션체크 로직을 정의한다. package egovframework.example.com; import javax.servlet.ServletContext; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.slf4j.Logger; import org.slf4j.loggerFactory; import org.springframework.web.servlet.ha..

Programming/Java 2023.08.28