일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Linux
- IntelliJ
- database
- JPA
- gradle
- gson
- nodejs
- tibero
- useEffect
- mybatis
- docker
- react
- JavaScript
- NCP
- Windows
- SAP
- nginx
- log4j2
- LOG4J
- dbeaver
- MySQL
- Java
- Kubernetes
- Spring
- VSCode
- sapfiorielements
- springboot
- maven
- BPMN
- Git
- Today
- Total
목록분류 전체보기 (263)
두 손끝의 창조자
input 태그 버튼 value 는 버튼안 텍스트 button 태그 버튼 태그사이에 뭐든 넣을 수 있어 더 유연하게 쓸 수 있고 나중에 나온 기능. 이 타입을 쓰는 것이 더 선호됨
로컬 네트워크에 설치한 넥서스 리포지토리를 사용하려고 아래와 같이 리포지토리를 등록하면 maven { url "http://10.110.1.12:8889/nexus/content/groups/public" } 아래와 같은 오류를 볼 수 있다. * What went wrong: Execution failed for task ':compileJava'. > Failed to notify dependency resolution listener. > Could not resolve all dependencies for configuration ':detachedConfiguration1'. > Using insecure protocols with repositories, without explicit opt-i..
logback mdc 등 MDC 를 찾아서 적용하라
발생할 때 error: unmappable character (0xEB) for encoding x-windows-949compileJava { options.encoding = "utf-8" } compileTestJava { options.encoding = "utf-8" } 추가
checkstyle.xml 추가 suppressions.xml checks에 무시할 check 를 나열하거나 정규식으로 표현
Plugin [id: 'maven'] was not found in any of the following sources: gradle 7부터 maven 플러그인은 지원하지 않는다. 대신 maven-publish 를 사용할 것. 로컬설치 task인 install은 없어지고 publishToMavenLocal task로 좀 더 명료 태스크가 생겼다.
인터페이스 A, 인터페이스 B가 있다. 인터페이스 A를 구현하는 구현체는 인터페이스 B가 필요하고 인터페이스 B를 구현하는 구현체는 인터페이스 A가 필요한 상황이다. 그러기 위해서 A 구현체의 생성자는 B 인터페이스 오브젝트를 필요로 하고, B 구현체의 생성자는 A 인터페이스 오브젝트가 필요하게 된다. 그러면 아래와 같이 무한 참조 상황이 된다. A a = new AImpl( new BImpl( new AImpl( .... 이럴때는 A의 구현체와 B의 구현체 독립적으로 만들지 말고, 둘 기능을 조합하는 구현체를 만들자. class CompsiteImpl implement A, B A a = new CompsiteImpl( ); B b = new CompsiteImpl( );
$ssh-keygen -t rsa -b 4096 -C "이메일" 기본값으로 엔터 엔터 공개키 클립보드로 복사(windows) clip SSH and GPG keys -> New SSH key
관리자 권한으로 커맨드 창 열기 mklink /h /j c:\링크를_저장할_절대경로 c:\링크_대상이_되는_위치_절대경로
Nexus에서 close 를 하려고 하니 키스토어에서 공개키를 찾을 수 없다고 에러메시지가 발생하였다. 이번에 올려놨던 키서버에 직접 찍어서 들어가보니 문을 닫았는지 안열렸다. Nexus에서 접근하려고 하는 url이 내가 올려놨던 서버가 아니어서 그 주소에 공개키를 다시 등록하니잘 되었다. gpg --list-keys --keyid-format short 에서 rsa3072/XXXXXX 부분으로 키 이름 가져와서 올림 gpg --keyserver hkp://keyserver.ubuntu.com --send-keys XXXXXX
elements = (E[]) Array.newInstance(clazz, capacity); (T[])java.lang.reflect.Array.newInstance(a.getClass().getComponentType(), size); https://www.baeldung.com/java-generic-array
EntityManagerFactory 는 persistence.xml 에 정의한 persistence unit 당 하나를 만든다. 팩토리는 애플리캐이션 레벨에 하나만 존재하면 되고 이 팩토리를 이용해서 EntityManager를 만들어서 데이터 처리를 하면된다. 스프링에는 트랜잭션을 ThreadLocal 을 이용해서 관리하고 있는데 한번 만들어진 EntityManager를 같은 스레드 내에서 가져오고 싶을 때 편리한 유틸리티 클래스를 제공한다. EntityManagerFactoryUtils 이 그것이다. getTransactionalEntityManager 메소드에 EntityManagerFactory를 파라미터로 전달해서 현재 스레드에서 동작중인 EntityManager 를 가져온다. 여러 클래스와 메..
resources/junit-platform.properties 파일 만들고 junit.jupiter.execution.parallel.enabled=true junit.jupiter.execution.parallel.config.strategy=dynamic junit.jupiter.execution.parallel.mode.default = same_thread junit.jupiter.execution.parallel.mode.classes.default = same_thread 밑에 config는 스레드 개수를 설정한다. 자신의 상황에 맞춰서 아래 링크를 참조하여 수정 https://junit.org/junit5/docs/snapshot/user-guide/index.html#writing-tes..
junit5 부터는 RunWith 대신 ExtensionWith 애너테이션을 사용하여 스프링과 상호작용한다. 그러기 위해서는 SpringExtention 클래스가 필요한데 이건 스프링 5부터 지원한다. spring 4 에서 사용하기 위해서는 아래 라이브러리를 추가한다. 먼저 리포지포리를 추가하고 repositories { mavenLocal() mavenCentral() maven { url "https://jitpack.io" } } testImplementation('com.github.sbrannen:spring-test-junit5:1.5.0') 테스트 의존성을 추가한다.
EmbeddedDatabase는 테스트 할 때 유용하게 쓸 수 있다. 나는 이것을 내가 만든 코드가 트랜잭션이 잘 동작하는지 확인하고자 할 때 사용했다. EmbeddedDatabase 는 자체로 DataSource 이어서 스프링의 트랜잭션 매니저나 JdbcTemplete 에 바로 사용할 수 있다. 하지만 트랜잭션테스트를 하기 위해서는 그대로 사용하면 build 할 때마다 다른 데이터베이스가 생겨 스키마를 공유할 수가 없게된다. 그래서 EmbeddedDatabase 는 진짜 디비만 생성하고 데이터 소스는 이를 참고하여 만든뒤 그 것을 활용하는것이 좋겠다. EmbeddedDatabase database = new EmbeddedDatabaseBuilder() .generateUniqueName(true) ...
DAO는 데이터 지속성의 추상화입니다. 그러나 Repository는 개체 모음의 추상화입니다. DAO는 스토리지 시스템에 더 가까운 저수준 개념입니다. 그러나 Repository는 Domain 개체에 더 가까운 상위 수준 개념입니다. DAO는 데이터 매핑 / 액세스 레이어로 작동하여 복잡한 쿼리를 숨깁니다. 그러나 Repository는 도메인과 데이터 액세스 계층 사이의 계층이므로 데이터 조합 및 도메인 개체 준비의 복잡성을 숨깁니다. DAO는 Repository를 사용하여 구현할 수 없습니다. 그러나 Repository는 기본 저장소에 액세스하기 위해 DAO를 사용할 수 있습니다.
docs.wildfly.org/17/Getting_Started_Guide.html Getting Started Guide WildFly 17 is the latest release in a series of JBoss open-source application server offerings. WildFly 17 is an exceptionally fast, lightweight and powerful implementation of the Java Enterprise Edition 8 Platform specifications. The state-of-the-art arch docs.wildfly.org Standalone Directory Structure In " standalone " mode e..
이클립스는 워크스페이스 개념이 있고 워크스페이스 안에 있는 프로젝트들은 쉽게 의존성을 가질 수 있다. 그래서 한 프로젝트를 수정해도 별다른 빌드나 배포 없어도 의존성을 가지는 프로젝트에서 즉시 변경된 사항을 사용할 수 있다. 이클립스에서는 모듈을 추가하여 비슷하게 구현할 수 있다. www.jetbrains.com/help/idea/working-with-module-dependencies.html#remove-dependency 그런데 메이븐 의존성 등 별도로 의존성을 넣고 개발 편의상 모듈을 추가했다면 좀 생각해볼 필요가 있다. 모듈간 의존성과 메이븐 의존성을 합집합으로 의존성을 가지게 되어 삭제한게 남아있거나 추가한게 당장 안보일 수 있다. 그래서 인텔리제이에서는 다른 프로젝트는 별도의 창으로 띄우는..
3.4 버전부터는 자동으로 매핑을 사용할 수 있다. 그 전버전은 타입핸드러를 직접 구현하여 사용해야한다. 구현하는 방법은 다른 사이트 참조. 단, 3.4.4 이하는 mybatis-typehandlers-jsr310 의존성을 추가해줘야 한다. 3.4.5 버전 이후는 포함되어 있다. mybatis.org/mybatis-3/ko/configuration.html#typeHandlers MyBatis – 마이바티스 3 | 매퍼 설정 매퍼 설정 마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.: configuration properties 이 설정은 외부에 옮길 수 있다. 자바 프로퍼티 파일 인스턴스에 설정할 mybatis.org github.com/mybatis/myba..