Docker Container Volume 옵션 사용하여 Symbolic 링크와 동일한 기능 적용하기 포스팅 썸네일 이미지

Server/Docker

Docker Container Volume 옵션 사용하여 Symbolic 링크와 동일한 기능 적용하기

도커 컨테이너 생성 시 볼륨 옵션을 사용하면 Host OS의 경로와 컨테이너 내부의 경로를 서로 공유할 수 있게 된다. 그럼 컨테이너 내부에서 생성된 파일을 Host OS에서 확인할 수 있고 반대로도 역시 가능하게 된다. Tomcat 이미지 컨테이너에 Spring WAS를 배포하여 컨테이너 내부 디렉터리 경로에 생성되는 로그 파일을 Host OS에서 공유받고자 하는 경우를 예시로 들어보았다.  [STEP 1] Host OS에서 컨테이너 내부 디렉터리를 조회할 경로를 생성해 둔다. # Host OS: /disk/api/logs# Docker Container: /disk/api/logs$ mkdir /disk/api/logs    [STEP 2] Host OS에서 컨테이너 내부에 생성될 로그 파일을 조회할..

2024.06.01 게시됨

Linux Crontab 사용하여 Spring Application 로그 파일 날짜별로 백업하기 포스팅 썸네일 이미지

Server/Linux

Linux Crontab 사용하여 Spring Application 로그 파일 날짜별로 백업하기

Crontab이란? 리눅스에서 특정 시간에 명령어를 주기적으로 실행하며 스케줄러 같은 역할을 한다.  [STEP 1] 웹 애플리케이션 로그 저장 경로에 history 디렉터리 생성 $ mkdir {로그 파일 생성 경로}/history$ mkdir /disk/api/project/logs/history해당 디렉터리에 system.log 로그 파일이 생성되고 있는 상황  [STEP 2] 로그 파일 백업해주는 Bash Shell Script 파일을 해당 웹앱이 동작하는 톰캣 하위 디렉터리에 생성 후 작성  $ mkdir /usr/local/tomcat/crontab$ vi /usr/local/tomcat/crontab/log_backup.sh #!/bin/sh# 20240601 형식으로 전 날 Date 값 세..

2024.06.01 게시됨

Mysql Table storage engine for Table doesn't have this option 포스팅 썸네일 이미지

DataBase/MySQL

Mysql Table storage engine for Table doesn't have this option

테이블 칼럼 추가 또는 수정 시 위와 같이 권한과 관련된 오류가 발생하는 경우 해당 테이블 스토리지 엔진을 확인해 볼 필요가 있다. 해당 디비의 테이블 스토리지 엔진 확인 명령문SELECT engine FROM information_schema.TABLES where table_name='테이블명' AND table_schema='디비명';    나의 경우 해당 테이블이 FEDERATED 테이블이라 로컬 서버에서 테이블을 수정할 수 없었다. 따라서 원격 서버에서 테이블에 칼럼을 추가해 주고, 다시 로컬 서버에서 테이블 Drop 후 원격 서버 해당 테이블을 FEDERATED 엔진으로 재생성 처리하였다. 위와 같은 오류가 발생한다면 해당 테이블 엔진을 먼저 조회해 보고 이상이 없는 경우 권한을 조회해 보는 ..

2024.06.01 게시됨

Slack Chat API 사용하여 슬랙 알림 메시지 전송 포스팅 썸네일 이미지

BackEnd/Spring

Slack Chat API 사용하여 슬랙 알림 메시지 전송

슬랙에서 지원해 주는 Chat API를 사용하여 알림 메시지를 전송해 주는 샘플 코드를 작성해 보겠습니다.[STEP 1] 알림봇으로 사용할 App 생성 api.slack.com/apps 접속 후 Create an App 클릭  앱 이름 및 알람봇을 적용할 Workspace 지정  [STEP 2] 생성한 알림봇에게 권한 부여 좌측 사이드바 Features → OAuth & Permissions 클릭  스크롤 살짝 내려서 Scopes 설정 항목 찾은 후 Add on Oauth Scope 클릭   알림봇에게 channels:read(채널 조회) 및 chat:write(메시지 전송) 권한 부여  [STEP 3] API 사용 시 필요한 토큰 발급받기 좌측 사이드바 Settings → Install App → In..

2023.02.27 게시됨

Git First commit and push 포스팅 썸네일 이미지

Git

Git First commit and push

깃에 익숙하지 않다면 최초 커밋 및 푸시 과정에서 다양한 오류를 겪을 수 있습니다. 최초 커밋 및 푸시 방법과 해당 과정에서 겪었던 오류에 대해 정리한 내용을 공유하려고 합니다. 프로젝트 최 상단 위치에서 Git Bash 커맨드 창 오픈 후 아래 명령어 순서대로 실행하여 main 브랜치에 push $ git init $ git remote add origin "git repository url" $ git pull origin main $ git branch -M main # 로컬 브랜치명이 master인 경우 main으로 변경 $ git add * $ git commit -m "first commit" $ git push --set-upstream origin +main 오류 정리 fatal: 'ori..

2023.01.15 게시됨

Tomcat CORS Filter 설정하기 포스팅 썸네일 이미지

Tomcat

Tomcat CORS Filter 설정하기

Spring Boot에도 CORS Filter 설정 관련 코드를 작성했다면 중복으로 인한 오류가 발생할 수 있으니 주의가 필요합니다. [STEP 1] /usr/local/tomcat/conf 경로의 web.xml 파일 vi 에디터로 수정 $ cd /usr/local/tomcat/conf $ vi web.xml [STEP 2] 아래 내용 추가. 6번 라인의 https://gcpower.kr 부분에 CORS 허용할 도메인을 입력합니다. CorsFilter org.apache.catalina.filters.CorsFilter cors.allowed.origins https://gcpower.kr cors.allowed.methods GET,POST,HEAD,OPTIONS,PUT,DELETE cors.allow..

2023.01.15 게시됨

Static 변수에 @Value Injection 하기 포스팅 썸네일 이미지

BackEnd/Spring

Static 변수에 @Value Injection 하기

보통 application.properties에 선언되어 있는 변수 값을 @Value 어노테이션을 사용하여 Injection 하는데, Spring에서는 @Value가 static field를 지원하지 않기 때문에 Setter Inject으로 값을 할당할 수 있습니다. 기존 public class AuthToken { @Value("${jwt.secret}") private static String jwtSecret; // null } 수정 public class AuthToken { private static String jwtSecret; // jwt.secret value @Value("${jwt.secret}") public void setJwtSecret(String jwtSecret) { Aut..

2023.01.15 게시됨