일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Spring
- LOG4J
- IntelliJ
- react
- Java
- JPA
- NCP
- springboot
- nginx
- gson
- maven
- Kubernetes
- docker
- sapfiorielements
- Git
- tibero
- log4j2
- intellijIDEA
- useEffect
- BPMN
- nodejs
- mybatis
- database
- dbeaver
- MySQL
- Linux
- Windows
- JavaScript
- VSCode
- gradle
- Today
- Total
목록분류 전체보기 (260)
두 손끝의 창조자
리액트 컴포넌트는 상위 컴포넌트에서 넘겨준 props로 데이터를 받아 로직을 처리하는 형태가 대부분이다. 상위 컴포넌트의 매소드를 호출하려면 props로 넘겨받은 함수 변수를 실행해서 호출한다. 만약, 그 반대의 경우가 필요하다면? 즉, 상위 컴포넌트에서 하위 컴포넌트의 메소드를 호출하고자 할 때는 어떻게 할까? React.forwardRef와 useImperativeHanlde을 이용하여 구현한다. 하위 컴포턴트 실행할 로직을 구현하고 ref를 노출한다. const Input = React.forwardRef((props, ref) => { const somethingToDo = () => { console.log('Do Something'); } useImperativeHandle(re..
리액트는 루트 요소에 엘리먼트가 하나가 있어야 한다. one two 이런 식에 요소 정의는 안된다. 그래서 one two 이렇게 빈 태그를 추가하여 루트요소에 하나도 오도록 조정한다. 그런데 빈 요소 추가는 불필요한 리소스 낭비이기 때문에 실제 랜더링할 때는 나오지 않도록 리엑트에서 래핑 컴포넌트를 제공한다. one two
Spring Boot 애플리케이션에서 로그 레벨을 동적으로 설정하는 방법에 대해 살펴본다. Spring Boot Actuator 소개 Spring Boot Actuator는 Spring Boot의 하위 프로젝트로서 애플리케이션의 관리와 모니터링에 필요한 다양한 기능을 제공한다. 이를 통해 애플리케이션의 상태, 메트릭스, 그리고 여기서 다룰 내용인 로깅과 같은 중요한 정보를 제공한다. 로그 레벨 확인하기 로그 레벨을 확인하려면 /actuator/loggers 엔드포인트로 GET 요청을 보내면 된다. curl -X GET http://localhost:8080/actuator/loggers 응답 형태 { "levels": ["TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FAT..
프로젝트에 루트에서 다음과 같은 파일을 찾아서 초기화 시 실행한다. schema.sql data.sql schema-${platform}.sql data-${platform}.sql ${platform} 은 spring.datasource.platform 의 값을 사용한다. spring.datasource.initialization-mode 속성을 always 로 설정한다. JPA를 사용한다면 spring.jpa.hibernate.ddl-auto 속성을 none으로 해야 테이블 자동 생성등을 비활성한다. 이런 방법은 sql이 DATABASE에 따라 변경이 필요할 수 있다. @PostConstruct 애노테이션으로 메소드를 지정하면 스프링 컨텍스트가 모두 로드 된 후 해당 메소드를 실행하기 때문에 데이터 ..
spring boot 를 사용하면 application.properties 에 속성을 설정하여 @Value 애노테이션으로 참고하여 사용할 수 있다. 인텔리제이 유료버전에서는 속성값 검증이 어느정도 되는데 프로퍼티 작성시에 자동 완성 기능이 동작하지는 않는다. 속성에 대한 구조, 항목을 클래스로 정의하고 appication.properies 에 정의할 때 자동 완성 기능을 할 수 있도록 해보자. spring-boot-configuration-processor 추가 annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor' 프로퍼티 클래스 정의 @ConfigurationProperties(prefix = ..
1. Docker 그룹 생성 sudo groupadd docker Docker를 sudo 없이 실행하기 위해 docker 그룹을 생성한다. 이 그룹은 Docker를 사용할 수 있는 권한을 부여하는 데 사용된다. 2. 유저를 Docker 그룹에 추가 sudo usermod -aG docker [userid] 위 명령어에서 [userid]를 실제 사용자ID로 바꿔서 실행한다. 이 명령어는 특정 사용자를 docker 그룹에 추가한다. 3. 시스템 재부팅 sudo systemctl reboot 사용자를 docker 그룹에 추가한 후, 변경 사항을 적용하기 위해 시스템을 재부팅한다.
네이버 클라우드 플랫폼에서 Kubernetes을 사용한다면 인그래스를 이용하여 https를 적용할 수 있다. 적용하려면 pod를 NodePort으로 노출시키고 인그래스 리소스를 이용해서 로드밸랜서를 생성한다. 인그래스 컨트롤러 설치 인그래스를 사용하려면 인그래스 콘트롤러(파드와 유사함)를 설치하고 인그래스 리소스로 노드포트 서비스와 연결한다. kubectl --kubeconfig=$KUBE_CONFIG apply -f https://raw.githubusercontent.com/NaverCloudPlatform/nks-alb-ingress-controller/main/docs/install/pub/install.yaml 위 구문을 실행하면 그냥 설치된다. 노드포트 서비스 생성 apiVersion: v1 ..

Application LoadBalancer를 추가하면 어플리케이션단에서 별도 HTTPS 설정없이 간편하게 HTTPS를 적용할 수 있다. 그러기 위해 해야할 두 가지 작업을 해야한다. 인증서 등록 LoadBalancer에 리스너 추가 인증서 등록 Certificate Manager 에서 인증서를 등록할 수 있다. 인증서를 등록하기 위해서는 Private Key, Certificate Body, Certificate Chain 을 넣어줘야한다. 텍스트를 넣을 때는 순수 텍스트만 들어가도록 유의한다. 인증서 발급기관에서 받은 개인키를 복사해서 Private Key 넣는다. 인증서 발급기관에서 받은 인증서 내용을 복사해서 Certificate Body에 넣는다. Certificate Chain 에는 상위 발급..
온프레미스에서 도커로 서비스하던 레드마인을 NCP로 이관하면서 수행한 내용 기록. 쿠버네티스는 NCP 서비스 사용(Master Node). 백업 데이터 베이스 redmine-postgres 컨테이너에서 데이터를 덤프한다. legacy-host>docker exec -it redmine-postgres redmine-postgres_container>/usr/bin/pg_dump -U redmine -d redmine -Fc --file=redmine.sqlc redmine # U=user, d=database 💡 host에 psql이 설치되어 있다면 호스트에서 덤프를 한다. psql -h [legacy-host-ip] -U redmine -d redmine -p [DB포트] 덤프한 파일을 호스트로 가져온..
nginx.conf 에 백엔드 서비스의 주소를 명시적으로 할 필요없이 서비스 이름을 지정하여 간접적으로 지정할 수 있다. server { listen 80; error_log /var/log/nginx/error.log; location /api { proxy_pass http://backend-service.default:3001; } location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html =404; } include /etc/nginx/extra-conf.d/*.conf; }/api로 요청하는 url에 대하여 backend-service 클러스터IP로 연계하는 설정이다. 내 ..

인텔리제이는 특정 확장자에 대해서 OS단에 연결된 프로그램으로 실행시키는 기능을 제공한다. OS단에서 연결된 프로그램과 연결 Settings -> Editor -> File Types 에서 Files opened in associated applications File name patterns에 *.bpmn 추가 이제 해당 파일을 더블클릭하면 연결된 프로그램이 열리면서 해당 파일을 볼수 있다. 단, 미리 OS에 연결프로램으로 등록을 해야한다. 장점 : 쉬운 파일 열기 단점 : 인텔리제이 검색기에서 내부 내용 검색을 하지 않아 운영시 불편 인텔리제이에서 외부 프로그램 연결 외부 프로그램 등록 Settings -> Exteranl Tools 에서 신규 추가 프로그램 위치에 맞게 수정한다. 파일 타입 TEXT..
다운로드 CLI 다운로드 실행 jar 파일로 만들어져있는데 ncloud 스크립트로 실행하면 된다. 다운로드 패키지내에 jre가 포함되어 있지만 사용을 원치 않으면 ncloud 스크립트를 변경한다. java -jar ${HOME}/ncloud-api-cli-1.0.2-SNAPSHOT-jar-with-dependencies.jar 인증키 설정 ncloud configure 을 실행하면 Access Key와 Secret Key를 입력하라고 뜬다. 키를 각 입력하면 클라우드 API 주소를 입력하라고 뜨는데 그냥 엔터처서 디폴드로 넣는다. 해보기 ncloud server getRegionList 참조 https://cli.ncloud-docs.com/docs/guide-userguide
kubectl 설치 brew install kubectl파워쉘 ncp-iam-authenticator 설치 brew tap NaverCloudPlatform/tap brew install ncp-iam-authenticator기타 OS ncp-iam-authenticator API 인증키값 설정 OS 환경변수 설정 export NCLOUD_ACCESS_KEY=ACCESSKEYIDACCESSKEY export NCLOUD_SECRET_KEY=SECRETACCESSKEYSECRETACCESSKEYSECRETACCE export NCLOUD_API_GW=https://ncloud.apigw.ntruss.comncp-iam-authenticator update-kubeconfig 명령 사용 ncp-iam-aut..
특정 문자열을 간편하게 인코딩 디코딩 하려면 인코드 커맨드 echo "문자열" | base64 결과 66y47J6Q7Je0Cg==디코드 커맨드 echo "66y47J6Q7Je0Cg==" | base64 --decode 결과 문자열
$i=0; while($true) { %{$i++; write-host -NoNewLine "$i $_" } (Invoke-RestMethod "http://192.168.1.11")-replace '\n', " " }
pod 목록 kubectl get pods자세히 보기 kubectl get pod -o wide커스텀 컬럼 kubectl get pods -o=custom-columns=NAME:.metadata.name,ID:.status.podIP,STATUS:.status.phase,NODE:.spec.nodeName 커스텀 컬럼 항목 살펴보기 kubectl get pod echo-hname-7894b67f-6rtn7 -o yaml pod 삭제 kubectl delete pods nginx-pod디플로이먼트 삭제 kubectl delete deployment dpy-nginx디플로이먼트 상태 보기 kubectl describe deployment rollout-nginxpod 의 쉘 들어가기 kubectl exec..
스프링부트 2.7.13 기준 버전 세팅 다운로드 https://www.h2database.com/html/main.html 2.1.214 버전 다운로드 압축 해제 후 h2/bin/h2.bat 실행 linux, mac은 h2.sh 실행 실행전 실행권한 추가 chmod +x h2.sh 설정 DB 명을 cop-oasis라고 하였을 때 최초 실행시 JDBC URL : jdbc:h2:~/cop-oasis DB 생성 후 ~/cop-oasis.mv.db 파일 생성됨 다음부터는 JDBC URL : jdbc:h2:tcp://localhost/~/cop-oasis ~/cop-oasis.mv.db 생성 확인
기본값으로 포함되어 있는 logging 모듈을 제외시킨다. configurations { configureEach { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging' } } log4j2 SpringBootStart를 의존성에 추가한다. implementation 'org.springframework.boot:spring-boot-starter-log4j2'
$directories = Get-ChildItem -Directory | Sort-Object { try { $_ | Get-ChildItem -Recurse -Force -ErrorAction Stop | Measure-Object -Property Length -Sum | Select-Object -ExpandProperty Sum } catch { 0 } } -Descending foreach ($directory in $directories) { try { $size = Get-ChildItem -Recurse -Force -LiteralPath $directory.FullName | Measure-Object -Property Length -Sum | Select-Object -ExpandPr..
React.memo export default React.memo(Left);형태로 정의하면 이전 props와 현재 props를 비교하여 값의 변화가 없으면 Left 컴포넌트를 다시 호출하지 않아 불필요한 리프레시를 방지한다. props에 매우 많은 값이 들어있으면 비교하는것 자체가 부하를 주기 때문에 잘 판단해야한다. 비교할 때 === 연산자로 비교한다고 보면 되는데 원시타입은 값자체가 같으면 같아도 인식하지만, 오브젝트, 함수등은 컴포넌트를 호출하는 곳에서 재실행이 됐다면 새로운 함수로 인식하게 된다. 따라서 프롭스에 함수가 있다면 그 함수를 useCallback 으로 재생성되지 않도록 조치가 필요하다. useCallback 정의한 함수를 리액트의 내부 저장 공간에 저장해서 함수 객체가 실행될 때마다..