본문 바로가기
반응형

개발/기타48

Jenkins를 활용한 SpringBatch 스케줄러 구성 SpringBatch로 작성한 배치 어플리케이션을 주기적으로 실행시키기 위한 스케줄러로 Jenkins를 활용하는 방법을 알아본다. 다른 대안들도 많이 있지만 Jenkins 활용 시 오픈소스 무료로 GUI 기반 대시보드, 이력관리, 권한관리 등이 가능하다는 장점이 있다. 배치 스케줄러 JOB을 생성한다 생성한 JOB에서 좌측 "구성"을 클릭하고 설정을 시작한다. 스케줄러를 설정하는 것임으로 '소스코드 관리'는 None으로 선택하고, 하단에 빌드 유발에 crontab 표현식으로 설정을 한다. 아래 예시는 "월~금요일, 매일 1시, 05~30분 사이 실행"을 의미한다. 분까지 직접 설정하는 방식이 아닌 H 심볼을 사용하여 Jenkins가 내부적으로 범위 내(ex. 05~30분)에서 분을 결정하도록 하면 부하 .. 2023. 10. 18.
random secret key 생성(openssl rand) 개발 할때 여러가지 이유로 복잡도 있는 랜덤한 키(ex. JWT secretkey 생성)를 생성해줘야 하는 경우가 있다. 이럴때 적절한 키를 선정하기 애매할 때가 있는데 OpenSSL 명령어 한줄로 간단히 랜덤 키를 생성해서 사용할 수 있다. openssl rand -hex 64 위와 같이 입력하면 아래와 같이 결과가 나오고 복사해서 사용하면 된다. 추가적인 옵션 사용법들은 다음과 같다. 필요에 따라서 사용하면 된다. # Hexadecimal output + 64byte openssl rand -hex 64 # Base64 output + 32byte openssl rand -base64 32 아래는 각 옵션 별 샘플 실행 결과이다 2023. 9. 23.
NodeJS mongoose DB 커넥션 오류 - SyntaxError: Invalid or unexpected token NodeJS mongoose를 활용해서 어플리케이션 올리는 중에 아래와 같은 에러가 발생했다. 개발 환경은 NodeJS 버전은 18.17, mongoose 7 버전으로 개발이중이었다. .../node_modules/mongodb/lib/collection.js:74 pkFactory: db.options?.pkFactory ?? utils_1.DEFAULT_PK_FACTORY, ^ SyntaxError: Invalid or unexpected token at Module._extensions..js (node:internal/modules/cjs/loader:1310:10) Node.js v18.17.1 [nodemon] app crashed - waiting for file changes before .. 2023. 9. 17.
MongoDB mongo: command not found 오랜만에 MongoDB로 테스트 하기 위해 MongoDB를 설치하고 접속을 확인하는 중에 아래 같은 에러가 떴다. mongo: command not found 처음에는 설치에 문제가 있었나 했는데 찾아보니 MongoDB 6.0부터 "mongo" 라는 명령어는 remove되었다. 대신 "mongosh"라는 명령어를 사용해서 shell에 접속해야 한다. $ mongosh 사용방법은 예전의 mongo와 다른것이 없다. use 데이터베이스명 데이터베이스 사용(없으면 새로 생성) db 현재 사용중인 데이터베이스 확인 show dbs 데이터베이스 리스트 확인(최소 한 개의 Document를 가진 DB만 출력) db.컬렉션명.insertOne({key:value, ...}) 컬렉션 안에 Document 추가 db.데.. 2023. 9. 16.
웹사이트 성능 최적화 방법 웹사이트 최적화 방법론을 정리해본다. 어떤 항목들은 여러 라이브러리나 툴 등을 통해서 쉽게 해결 할 수 있는 부분도 있지만 개발시 신경써서 구현을 해줘야 하는 부분도 많이 있다. 1. HTTP 요청을 최소화 - 페이지를 구성하고 있는 각 요소(이미지, 스타일시트, 스크립드 등)들을 줄이기 - 방법 : 디자인을 단순화. 스크립트, 스타일시트 등 파일을 결합, 배경이미지들을 하나로 결합 2. CDN(Content Delivery Network) 사용 - 사용자 응답시간의 80%이상은 페이지의 구성요소(이미지, 스타일시트, 스크립트 등) 다운로딩에 소요 됨. - 사용자에게 효율적인 Content 제공을 위해 여러 지역에 분산된 웹서버의 집합체(응용프로그램 아니라 정적 컨텐츠에 대한 응답을 빠르게 함) - 사용.. 2023. 8. 26.
Java 디자인 패턴 정리 객체지향 디자인을 위해서는 재사용성, 확장성. 관리 용이성 등을 갖춰야 한다고 얘기를 하고 있다. 이런 것들을 갖추기 위해서 Java에서는 유명한 여러가지 디자인 패턴이 있는데 이를 한번 정리해본다. 1. Iterator 패턴 - 반복작업에 대한 캡슐화 : Iterator를 사용하면 클라이언트에서는 처리할 컬렉션 객체가 List인지 Array인지 신경쓰지 않아도됨. - Enumeration과의 차이점은 Iterator은 remove() 를 지원. 2. Adapter 패턴 - 캐스팅 등이 불가능한 경우 클래스의 인터페이스를 클라이언트가 원하는 인터페이스로 변환하는 역할(Adapter) - 인터페이스 간의 호환성 문제를 해결할 수 있음. 3. Factory Method 패턴 - 객체 생성을 다른 클래스(주로.. 2023. 8. 26.
프로그래밍 관련 법칙(파레토, 디미터, 콘웨이 법칙) 1. 파레토 법칙 (Pareto principle) 80 대 20 법칙, 전체 결과의 80%가 전체 원인의 20%에서 일어나는 현상 소프트웨어의 개발 80%를 20%의 기능을 개발하는데 소비한다. 프로그램 사용자의 20%가 80%의 부하를 발생시킨다. 등으로 사용이 된다. 프로젝트를 설계할 때 이 법칙을 감안해서 설계를 하면 프로젝트를 위험에 빠트리게 하는 위험요소들을 사전에 파악하고 관리가 가능할 것이다. (예를 들어서 중요한 기능을 먼저 구현하던지 특정 사용자들에게서 집중적으로 자원이 소모되는 것을 감안해서 설계 하고 테스팅한다.) 2. 디미터 법칙 (The Law of Demeter) :디미터 법칙은 객체 O의 메소드 m은 다음의 객체들의 타입의 메소드만 호출해야 한다는 법칙이다. 1. O 객체 자.. 2023. 8. 26.
클린 코드(Clean Code) 깨끗한 코드를 작성하는 방법은 배우기 어렵다. 단순히 원칙과 패턴을 안다고 깨끗한 코드가 나오지 않는다. 고생을 해야한다. 연습하고 실패하고 다시 일어서야 한다. 결정을 내리느라 고민하는 모습, 잘못된 결정으로 대가를 치르는 모습도 봐야한다. 보이스카우트 규칙: "처음 왔을 때보다 더 깨끗하게 해놓고 떠나라.” 단순한 설계 규칙 4가지(중요도 순서) 1. 모든 테스트를 실행한다. - 리팩토링 쉽게 가능 2. 중복을 없앤다. 3. 프로그래머의 의도를 표현한다. - 좋은 이름선택, 함수,클래스 크리 줄이기, 표준명칭 사용, 단위 테스트 작성 4. 클래스와 메소드의 수를 최소로 줄인다. 냄새와 휴리스틱 1. 주석 C1 부적절한 정보 - 코드,설계의 기술적인 설명이외의 변경이력 등은 주석으로 적절하지 못함. C.. 2023. 8. 26.
반응형