일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- NCP
- gson
- Git
- IntelliJ
- kubectl
- intellijIDEA
- dbeaver
- gradle
- MySQL
- nodejs
- mybatis
- docker
- JPA
- database
- wildfly
- Kubernetes
- nginx
- useEffect
- log4j2
- LOG4J
- jetbrains
- react
- tibero
- springboot
- Spring
- VSCode
- BPMN
- Java
- Windows
- JavaScript
- Today
- Total
목록프로그래밍언어 (41)
두 손끝의 창조자
샘플 코드를 받았는데 package.js는 없고 package.lock.js 파일만 있으면 npm install 이 안된다.package.lock.js에는 package.js가 가지고 있는 정보를 일정부분 보함하고 있으니 코드로 복원하자.const fs = require('fs');const lockFile = 'package-lock.json';const packageFile = 'package.json';fs.readFile(lockFile, (err, data) => { if (err) throw err; const lockJson = JSON.parse(data); const packageJson = { name: lockJson.name || 'example-project', v..
function moveElementInJson(json, sourceId, destinationId, newIndex) { // 복제된 JSON 생성 const updatedJson = JSON.parse(JSON.stringify(json)); // 소스 요소 찾기 const sourceElement = findElementById(updatedJson, sourceId); if (!sourceElement) { console.error('Source element not found.'); return null; } // 소스 요소를 제거 const removedElement = removeElementById(updatedJson, sourceId); // 대상 위치에 요소 삽입 co..
모듈 A, B, C가 있을 때 B는 C모듈을 의존해서 구현하고 A는 B모듈을 사용한다. A가 B모듈 중 C에 존재하는 예외 클래스를 상속받아 재구현한 예외를 사용하려고 하면 참조 오류가 발생한다. throw 로 예외를 올렸을 때 오류가 발생하는데 일반 클래스 생성 및 사용은 문제가 없다. 그 이유를 모르겠어서 기록해놓는다. module c code package c; public class BaseException extends RuntimeException{ }module b gradle implementation project(':module-c')code package b; import c.BaseException; public class SubBaseException extends ..
.env 파일은 node를 실행할 때 읽어서 앱의 환경변수값으로 쓸 수 있다. .env 파일은 node를 실행하는 디렉토리에 있어야 한다. react project에서는 빌드할 때 .env 파일을 읽어서 변수값과 소스를 묶은 후 js 파일을 만든다. 따라서 빌드할 때 환경설정 정보가 완비되어야 한다. 개발 서버에 올릴 때와 운영 서버에 올릴 때 환경 변수 값이 다른 경우 빌드 할 때 적절히 환경 변수 값을 교체한 뒤에 빌드해야한다. 환경 변수파일의 우선순위는 npm start 했을 때는 .env < .env.local < .env.development < .env.development.local 순으로 .env.development.local 파일이 가장 우선순위가 높다. npm build 했을 때는 ...
자바스크립트 엔진은 함수를 어디서 호출했는지가 아니라 함수를 어디에 정의했는지에 따라 상위 스코프를 결정한다. 이를 렉시컬 스코프(정적 스코프)라 한다. 따라서 아래 코드의 실행결과는 두 함수 모두 1을 반환한다. const x = 1; function foo(){ const x = 10; bar(); } function bar(){ console.log(x); } foo(); bar();파이썬에도 비슷하게 동작한다. x = 1 def foo(): x = 10 bar() def bar(): print(x) foo() bar() 상위 스코프에 대한 참조는 함수 정의가 평가되는 시점에 함수가 정의된 환경(위치)에 의해 결정된다.=> 렉시컬 스코프
org.springframework.boot.context.annotation.ImportCandidates /* * Copyright 2012-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in w..
private List splitSql(String sqlChunk) { StringBuilder sb = new StringBuilder(); List sqlList = new ArrayList(); boolean openQuote = false; for (int i = 0; i < sqlChunk.length(); i++) { char c = sqlChunk.charAt(i); if (c == '\'') { openQuote = !openQuote; } if (c == ';' && !openQuote) { sqlList.add(sb.toString().trim()); sb = new StringBuilder(); } else { sb.append(c); } } re..
Map에 Key가 abc01 이고 Object 필드의 필드명이 abc_01 일 때 서로 매핑 가능하도록 하려면 매핑전략을 정의해야한다. Gson gson = new GsonBuilder() .setFieldNamingStrategy(f -> concatUnderscoredIndex(f.getName())) .create(); String concatUnderscoredIndex(String str) { if (str == null) return null; if (!str.contains("_")) return str; int i = str.lastIndexOf("_"); if (i == 0) return str; String prefix = str.substring(0, i); String suffix ..
SMTP 서버 설정정보로 세션을 흭득하고 MimeMessage에 세션을 가지고 메시지를 만들고 Transport 로 메시지를 전송한다. 세션을 만들때 default세션으로 가져오면 다른 계정에 대한 정보를 인지하지 않고 기본세션정보만 가져오기 때문에 유의해야한다. import org.springframework.util.StringUtils; import javax.mail.*; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Propertie..
스프링부트 등 jar 로 말려있는 자원 내부에서 특정 리소스를 참조할 때 로컬에서 테스트할 때는 잘되나 서버에서 실행하면 오류가 발생할 수 있다. 리소스에서 읽을 때 File을 받아오지말고 스트림으로 받아 와서 처리. 왜 그런지는 확인 필요. Spring Boot에서 src/main/resource 파일 접근 방법 및 주의사항. — wedul
mockito로 mock을 만들면 해당 메소드의 파라미터 이름을 지운다. 그래서 리플렉션으로 메소드 파라미터의 이름을 사용해야 할 경우 사용할 수 없으므로 유의할 것.
String date = "20220615052111"; LocalDateTime parse = LocalDateTime.parse(date, DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); System.out.println(parse); Instant instant = parse.atZone(ZoneId.systemDefault()).toInstant(); System.out.println(instant); System.out.println(LocalDateTime.ofInstant(instant, ZoneId.systemDefault())); System.out.println(ZoneId.systemDefault());
ObjectMapper objectMapper = new ObjectMapper(); //noinspection deprecation objectMapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 위 코드는 오브젝트를 컨버팅 할 때 타깃과 소스의 이름의 케이스를 무시하고 없는 경우도 오류내지 않고 가능한 것만 매핑하라는 옵션이다.
mac에서는 잘 동작하는데 윈도우에서는 동작이 안될 떄는 suppressions 파일을 지정하는 경로가 잘 못 됐을 수 있다. 리눅스 계열에서는 디렉토리 구분을 / 로 하지만 윈도우는 \ 로 하므로 둘다 되도록 정규식을 구성해야한다. 예를 들어 .*src[/\\]test[/\\].*\.java 같이 하면 테스트 소스만 걸러낼 수 있다.
https://en.wikipedia.org/wiki/ISO_8601
JAVA Instant와 LocalDateTime Instant Instant는 1.8 java.time package에 들어가있으며 UTC의 타임 라인에있는 순간으로, 1970년 1월 1일 UTC의 첫 번째 순간 이후의 현재 시간까지의 나노초를 나타낸 값이다. 애플리케이션에서 이벤트 타임스탬프를 기록하는 데 사용될 수 있습니다. 순간의 범위는 long보다 큰 숫자의 저장공간이 필요하다. 이를 달성하기 epoch-seconds를 나타내는 long과 nanosecond-of-second를 나타내는 int를 저장한다. 이는 항상 0에서 999,999,999 사이이다. epoch-seconds는 1970-01-01T00:00:00Z의 표준 Java epoch에서 측정되며, Epoch 이후의 순간은 양수 값이고..
Map x; Map y = x.entrySet().stream() .collect(Collectors.toMap( e -> Map.Entry::getKey, e -> Integer.parseInt(e.getValue()) ));
jar 파일 내 resource가 있을 때, 예를 들면 스프링부트로 말아서 서비스를 돌리는데 그 안에 리소스를 참조해야하는 경우 리소스를 stream으로 가져오면 사용할 수 있다. getClass().getResourceAsStream("리소스이름"); 문제는 classpath에 서브 디렉토리가 있고 그 안에 리소스가 있는데 정확한 경로를 모르는 경우이다. 스트림이 아니라 파일로 가져올 수 있다면 파일 객체에서 isDirectory() 로 디렉토리를 확인 한 후에 서브 디렉토리를 다시 뒤지는 형태로 Walk가 가능한데 스트림은 그렇게 할 수 없다. 스프링에서는 여러가지 형태로 저장된 리소스를 패턴으로만 찾아서 가져올 수 있도록 도구를 제공한다. Resource[] resources = ResourcePa..
Class.getResource() 클래스 기준으로 상대적인 위치의 리소스를 가져올 수 있다. a.b.C 클래스가 있다면 C.class.getResouce("xxx.txt") 로 C 클래스와 같은 패키지에 있는 자원을 가져 올 수 있다. 절대 위치로도 지정이 가능한데 맨 앞에 /로 시작하면 된다. C.class.getResouce("/a/b/xxx.txt") 은 같은 의미이다. ClassLoader.getResource() 항상 절대 경로 기준으로 리소스를 가져온다. C.getClassLoader().getResource("a/b/xxx.txt"); 는 같은 자원을 가져 온다.