일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jetbrains
- Kubernetes
- react
- gradle
- nginx
- intellijIDEA
- mybatis
- IntelliJ
- BPMN
- Git
- gson
- NCP
- tibero
- maven
- wildfly
- useEffect
- VSCode
- springboot
- Windows
- nodejs
- JPA
- docker
- Spring
- JavaScript
- LOG4J
- MySQL
- database
- dbeaver
- log4j2
- Java
- Today
- Total
목록분류 전체보기 (238)
두 손끝의 창조자
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..
의존성 넣기 org.apache.maven.plugins maven-source-plugin 3.2.0 maven-plugin 플러그인 넣기 org.apache.maven.plugins maven-source-plugin attach-sources jar 실행 mvn package maven.apache.org/plugin-developers/cookbook/attach-source-javadoc-artifacts.html Maven – Cookbook - How to attach source and javadoc artifacts maven.apache.org
1. 각 브라우저 주소창에 하기와 같이 입력 - 엣지 : edge://flags/#same-site-by-default-cookies - 크롬 : chrome://flags/#same-site-by-default-cookies 2. SameSite by default cookies 를 Default -> Disabled 로 변경
프로젝트 소스 파일이 workspace 안에 있다면 이클립스 프로젝트가 아니어도 쉽게 할 수 있다. 만약, 외부에 있는 프로젝트가 이클립스 프로젝트가 아닌데 Import를 하고 싶을 때는? 일단 workspace 안에서 외부에 있는 프로젝트 이름과 똑같은 이름으로 빈 프로젝트를 만든다. 빈 프로젝트를 만들면 .settings 디렉토리, .classpath, .project 파일이 생기는데 .project 파일만 외부에 있는 프로젝트에 복사해서 넣는다. workspace 안에 있는 프로젝트는 지운다. 그다음 import -> General/Existing Projects into Workspace 에서 실제로 있는 프로젝트를 넣고 options에 copy projects into workspace가 체크 ..
도큐먼트에 링크 넣기 {@link $code$}
전반적인 처리 절차 central.sonatype.org/pages/ossrh-guide.html#deployment OSSRH Guide OSSRH Guide Introduction Sonatype OSSRH (OSS Repository Hosting) uses Sonatype Nexus Repository Manager to provide repository hosting service for open source project binaries - be sure to review the full terms of service. OSSRH uses the Maven repository fo central.sonatype.org Gradle로 배포 방법 상세 central.sonatype.org/page..