오프라인 서버에 Nexus가 설치되어 있을 경우, Nexus Repository에 Maven 라이브러리들을 대량 업로드할 필요가 있다.

shell script를 이용한방법과 proxy repository를 이용한 방법이있다.

 

 

1. Shell Script를 이용한 방법.

1.1 mavenimport.sh

아래의 주소에 접속해서 Nexus 설치 서버에 mavenimport.sh를 다운받는다.

github.com/sonatype-nexus-community/nexus-repository-import-scripts

 

sonatype-nexus-community/nexus-repository-import-scripts

A few scripts for importing artifacts into Nexus Repository - sonatype-nexus-community/nexus-repository-import-scripts

github.com

 

1.2 Repository 이동

Window라면 User/.m2/repository에 있는 Maven폴더들을 Nexus가 설치되어 있는 서버에 옮긴다.

아래와 같이 mavenimport.sh와 같은 위치에 라이브러리들을 위치시킨다.

1.3 명령어 실행

넥서스 계정과 비밀번호 및 IP와 PORT 저장할 repository들을 지정하고 실행한다.

./mavenimport.sh -u ID -p PASSWORD -r http://IP:PORT/repository/maven-releases/

실행 후 Nexus 저장소를 확인하면 라이브러리들이 들어가있는 것을 확인할 수 있다.

 

2. Proxy Repository를 이용하는 방법

2.1 Local Server 또는 Online Server에 Nexus 설치

인터넷이 되는 서버에 Nexus를 먼저 설치한다.

 

 

2.2 Proxy Repository 생성

Offline으로 Nexus가 설치되어 있는 서버에 maven2 (proxy) 저장소를 생성한다.

생성하는 항목의 Remote storage 부분에 인터넷이 되는 서버의 Nexus Maven Central Repository 또는 이미 사용하고 있는 저장소의 URL을 입력한다.

 

2.3 Settings.xml 설정

Maven Settings.xml을 설정한다 Window일 경우 User/.m2/ 폴더에 있다. 만약 없으면 아래와 같이 생성한다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">


</settings>

생성하였으면, 아래와 같이 <server> 와 <mirror>를 설정한다.

1. <servers>

<id>에는 <mirror>에 입력할 id 이므로 적절하게 사용한다.

<username>은 Nexus 아이디이다. Nexus에 anonymous가 허용되어있다면 입력해도 무관하다.

<password>는 Nexus 아이디의 비밀번호이다.

 

2. <mirros>

<id> 에는 위에 생성한 id를 입력한다

<name> 은 저장소의 설명이다.

<url> 에는 위에서 생성한 Offline Nexus Server의 maven2 (proxy) URL을 입력하면 된다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">


 <servers>
    <server>
      <id>nexus</id>
      <username> </username>
      <password> </password>
    </server>
  
  </servers>

  <mirrors>
    <mirror>
      <id>nexus</id>
      <name>nexus</name>
      <url>http://주소:8081/repository/home/</url>
      <mirrorOf>*</mirrorOf>
    </mirror>
  </mirrors>

</settings>

 

설정 후 프로젝트에 Maven Dependency를 추가하거나 Jenkins 빌드를 하게 되면 자동으로 Nexus에 라이브러리들이 업로드되어 Nexus Repository를 사용할 수 있는 것을 확인할 수 있다.

 

끝으로..

2가지 방법 중 하나를 선택해 적절히 사용하면 될 것 같다.

1. Local Tomcat 설정

1.1 Tomcat 폴더의 server.xml 설정

1.1.1 GlobalNamingResources 추가

driverClassName엔 사용하는 드라이버를 입력하면된다.

오라클일 경우 : oracle.jdbc.driver.OracleDriver 등.

global과, name 변수에는 똑같은 이름을 넣어준다. 

url이 오라클일 경우 : jdbc:oracle:thin:@IP:PORT:스키마이름

<GlobalNamingResources>

...

<Resource 
auth="Container" 
driverClassName="com.mysql.jdbc.Driver" // mysql, oracle, mariadb, tibero 등등 드라이버입력 
global="global과 name 똑같은 이름" 
maxActive="8"
maxIdle="8" 
maxWait="-1" 
minIdle="0" 
name="global과 name 똑같은 이름" 
password="DB패스워드" 
type="javax.sql.DataSource" url="jdbc:mysql://localhost:3306/myDB" username="DB아이디"/>

</GlobalNamingResources>

 

1.2 Tomcat 폴더의 context.xml 설정

1.2.1 ResourceLink 추가

name과 global 변수엔 server.xml에서 설정한 name,과 global 이름을 똑같이 넣는다.

<Context>

...
<ResourceLink name="위에 설정한 name, global이름과 동일" global="위에 설정한 name, global이름과 동일"
		auth="Container" type="javax.sql.DataSource" />

</Context

 

2. 개발 프로젝트(Eclipse 설정)

2.1 xml 파일에 설정

2.1.1 root-context.xml or context-datasource.xml

root-context.xml 또는 context-datasource.xml에 기존 DB접근하는 설정들을 지우거나 주석처리하고 아래의 코드를 추가한다.

또한, <value>에는 java:comp/env/jdbc/를 붙이고 server.xml에서 설정한 name, global이름과 동일하게 작성한다.

ex) server.xml에서 설정한 이름이 test라면 - java:comp/env/jdbc/test 

<bean id="dataSource"
		class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName">
			<value>java:comp/env/jdbc/name,global 이름과 동일</value>
		</property>
</bean>

 

3. 에러 발생 시 처리

3.1 DB Connection 에러

3.1.1 DB connector lib 가 없을 경우

만약 실행 시 connector에러가 발생한다면, Tomcat 폴더에 각 DB의 connector 라이브러리를 추가한다.

톰캣의 lib폴더에 접근한다.

경로 - apache-tomcat-8.5.59\lib

MySQL을 사용한다면 아래의 jar 파일을 톰캣의 lib폴더에 넣는다.

MySQL - mysql-connector-java.jar

 

 

3.2 UserDatabaseRealm 에러

3.2.1 org.apache.catalina.realm.UserDatabaseRealm Start 에러

만약 시작시 org.apache.catalina.realm.UserDatabaseRealm Start 에러가 발생한다면

Tomcat의 server.xml에 Realm부분의 className="org.apache.catalina.realm.UserDatabaseRealm" 을 아래와 같이 주석 처리한다.

<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- <Realm className="org.apache.catalina.realm.UserDatabaseRealm" -->
<!-- resourceName="UserDatabase" /> -->
</Realm>

 

'Develop > Spring' 카테고리의 다른 글

Spring Tomcat JNDI 설정  (0) 2020.11.17
Spring Security Custom Filter  (0) 2020.11.09
Spring security 로그인(DB에 있는 아이디 조회)  (0) 2019.11.02
Spring Mybatis + MariaDB(HikariCP) 설정  (0) 2019.10.24
Spring 3 에서 4로 migration  (0) 2019.10.22

개인적으로 개발하면서 자주사용하는 기본적인 JavaJavascript HTML DOM Methods 들이다.

이런게 있다로 정리만하고, 예제 사이트들이 충분히 많아 사이트로 대체.

 

1. document.getElementById(id);

일치하는 id 속성을 가진 요소를 찾는 문법.

 

developer.mozilla.org/ko/docs/Web/API/Document/getElementById

 

2. document.querySelector(selectors);

html 태그 및 생성한 CSS 클래스명으로 요소를 찾는 문법 (성능 문제 발생)

 

developer.mozilla.org/ko/docs/Web/API/Document/querySelector

 

3. document.getElementsByTagName(name);

html 태그로 요소를 찾는 문법

 

developer.mozilla.org/ko/docs/Web/API/Document/getElementsByTagName

 

4. document.getElementsByClassName(names)

태그의 클래스명으로 요소를 찾는 문법

 

developer.mozilla.org/ko/docs/Web/API/Element/getElementsByClassName

 

5. element.classList;

요소에 적용된 클래스들을 반환, add, remove, contains 이외 여러 문법을 사용할 수 있다.

 

developer.mozilla.org/ko/docs/Web/API/Element/classList

 

6. node.parentNode

선택한 요소의 부모 Node(html태그)를 선택할 수 있다.

 

developer.mozilla.org/en-US/docs/Web/API/Node/parentNode

 

7. node.childNodes; 

선택한 요소의 자식 Node(html태그)를 선택할 수 있다.

 

developer.mozilla.org/en-US/docs/Web/API/Node/childNodes

 

8. element.tagName;

선택한 요소의 태그명을 가져올 수 있다.

 

developer.mozilla.org/ko/docs/Web/API/Element/tagName

1. Spring Security Custom Filter

Spring Security 에 Custom Filter를 추가할 수 있다.

1.1 GenericFilterBean

기본 로그인 세팅 후 클래스를 생성하여 GenericFilterBean을 상속 받은 뒤 security-context.xml에 설정해주면 된다.

public class CustomFilter extends GenericFilterBean {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub

		chain.doFilter(request, response);
		
	}

}

 

1.2 security-context.xml

security-context.xml에 생성한 filter를 추가해 주면 된다.

	<security:http auto-config='true' use-expressions="true">
		<security:csrf disabled="true" />
		<security:intercept-url  />
		<security:form-login />
		<security:logout  />

		<security:custom-filter before="FORM_LOGIN_FILTER" ref="customFilter" />
	</security:http>

	<bean id="customFilter"
		class="com.test.app.filter.CustomFilter" />

 

before 대신 after, position을 사용할 수 있다. ref 에는 생성한 filter 클래스를 입력한다.

(현재 예제 : FORM_LOGIN_FILTER - 로그인 폼 인증 처리)

before - FORM_LOGIN_FILTER 인증 전에 생성한 filter 호출

after - FORM_LOGIN_FILTER 인증 후에 생성한 filter 호출

position - FORM_LOGIN_FILTER 대체를 생성한 filter로 대체 함.

position을 사용할 경우 security auto-config를 사용하지 않으므로 auto-config를 false로 해야 한다.

(auto-config : Automatically registers a login form, BASIC authentication, anonymous authentication, logout services, remember-me and servlet-api-integration. If set to "true", all of these capabilities are added (although you can still customize the configuration of each by providing the respective element). If unspecified, defaults to "false".)

 

2. Standard Filter Aliases and Ordering

FORM_LOGIN_FILTER 대신에 사용할 수 있는 항목들은 아래와 같다.

CHANNEL_FILTER ChannelProcessingFilter http/intercept-url@requires-channel
SECURITY_CONTEXT_FILTER SecurityContextPersistenceFilter http
CONCURRENT_SESSION_FILTER ConcurrentSessionFilter session-management/concurrency-control
LOGOUT_FILTER LogoutFilter http/logout
X509_FILTER X509AuthenticationFilter http/x509
PRE_AUTH_FILTER AstractPreAuthenticatedProcessingFilter Subclasses N/A
CAS_FILTER CasAuthenticationFilter N/A
FORM_LOGIN_FILTER UsernamePasswordAuthenticationFilter http/form-login
BASIC_AUTH_FILTER BasicAuthenticationFilter http/http-basic
SERVLET_API_SUPPORT_FILTER SecurityContextHolderAwareRequestFilter http/@servlet-api-provision
JAAS_API_SUPPORT_FILTER JaasApiIntegrationFilter http/@jaas-api-provision
REMEMBER_ME_FILTER RememberMeAuthenticationFilter http/remember-me
ANONYMOUS_FILTER AnonymousAuthenticationFilter http/anonymous
SESSION_MANAGEMENT_FILTER SessionManagementFilter session-management
EXCEPTION_TRANSLATION_FILTER ExceptionTranslationFilter http
FILTER_SECURITY_INTERCEPTOR FilterSecurityInterceptor http
SWITCH_USER_FILTER SwitchUserFilter N/A

 

참고 :

www.baeldung.com/spring-security-custom-filter

docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-custom-filters

'Develop > Spring' 카테고리의 다른 글

Spring Tomcat JNDI 설정  (0) 2020.11.17
Spring Security Custom Filter  (0) 2020.11.09
Spring security 로그인(DB에 있는 아이디 조회)  (0) 2019.11.02
Spring Mybatis + MariaDB(HikariCP) 설정  (0) 2019.10.24
Spring 3 에서 4로 migration  (0) 2019.10.22

a태그안에 a태그를 포함한 다른 태그들 있으면 다른태그들이 끝에 오기전에 먼저 닫힘

복잡한 코드안에 a태그가 있는걸 인지하지 못해 오랜시간 삽질했 던 기억이 있다. 

 

 

Ex)

<html>
<head>
</head>

<body>

<a href="#"> 
<div> <a href="#">test1</a> </div>
test2
</a>

</body>

</html>

 

결과 :

1. Keyboard package

1.1 사용한 패키지

Windows Keyboard를 제어할 목적으로 Python의 Keyboard 패키지를 사용하였다.

https://github.com/boppreh/keyboard

 

boppreh/keyboard

Hook and simulate global keyboard events on Windows and Linux. - boppreh/keyboard

github.com

 

1.2 사용목적

한 손으로 사용하기 힘든 단축키를 한손으로만 사용하기 위해 Keyboard Pacakge에서의 Hotkey를 사용하였다.

예를 들어, 윈도우 데스크톱 이동 명령어인 ctrl+window key+left or right 는 한손으로는 무리가 가기 때문에 이를 위해 아래와 같이 작성하여, 한손으로 사용하고자 하였다.

import keyboard

def main():
    
    keyboard.add_hotkey('cmd+z', lambda: keyboard.press_and_release('ctrl+cmd+left'))

    keyboard.add_hotkey('cmd+c', lambda: keyboard.press_and_release('ctrl+cmd+right'))
 
    keyboard.wait()  

if __name__== '__main__':
    main()

 

2. 문제

2.1 Keyboard Package 한/영키 문제

사용 중에 가끔 먹통이 되는 이유가 있었는 데, 원인을 파악해 보니 한/영키 문제 였다.

 

2.2 해결

한/영키를 누를 경우 Keyboard에 hangeul 이라는 것이 늘 따라 붙게 된다. 따라서 앞에 hangeul이라는 것을 붙이면 해결된다. 아래는 해결한 코드이다.

import keyboard

def main():
    
    keyboard.add_hotkey('cmd+z', lambda: keyboard.press_and_release('ctrl+cmd+left'))
    keyboard.add_hotkey('hangeul+cmd+z', lambda: keyboard.press_and_release('ctrl+cmd+left')) # hangeul 붙임

    keyboard.add_hotkey('cmd+c', lambda: keyboard.press_and_release('ctrl+cmd+right'))
    keyboard.add_hotkey('hangeul+cmd+c', lambda: keyboard.press_and_release('ctrl+cmd+right')) # hangeul 붙임

    keyboard.wait()  

if __name__== '__main__':
    main()

 

이렇게 한/영키를 통해 먹통이 되는 Keyboad Pacakge를 앞에 hangeul 이라는 단어를 붙여 해결 할 수 있다.

이전 글에 이어서 Kotlin + Spring Boot 2.0 + Webflux + R2DBC(MySQL)사용방법이다.

 

이전글 - Kotlin Spring Boot Webflux (Eclipse)

2020/04/26 - [Develop/Spring Boot] - Kotlin Spring Boot Webflux (Eclipse)
 

Kotlin Spring Boot Webflux (Eclipse)

이클립스에서 Kotlin + Spring Boot 2.0 + Webflux 사용방법이다. DB연동은 다음에 하며 간단한 프로젝트 생성 후 Get, Post, Put, Delete 부터시작한다. 1. https://start.spring.io/ 불러오는 중입니다... 접속..

wky.kr

 

0. DB 테이블 생성

프로젝트에 사용할 MySQL 테이블을 생성한다

create table test{
	id int(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    name varchar(50)
}

 

1. 이전 프로젝트 수정

1.1 TestHandler에 getAllTest 메소드를 추가한다.

 

TestHandler.kt

 

1.2 router패키지의 index를 아래와 같이 변경한다.

index.kt

 

1.3 model의 Test.kt 수정

Test.kt 에서 String으로 선언한 id를 Int형으로 수정한다.

Test.kt

 

2. DB 연결(R2DBC)

2.1 Maven 추가

R2DBC Start Maven과 MySQL Maven을 추가한다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>

<dependency>
	<groupId>dev.miku</groupId>
	<artifactId>r2dbc-mysql</artifactId>
</dependency>

 

2.2 DB 연결

2.2.1 Config패키지와 R2DBC를 연결할 코틀린파일을 생성한다.

com.example.demo.config 패키지, R2DBCConfig.kt 파일생성

 

 

2.2.2 DB Connection 설정

생성한 R2DBCConfig파일에 AbstractR2dbcConfiguration을 상속받고 아래와 같이 작성한다.

host : DB 접속 URL (ip주소를 입력할 땐 앞에 http를 생략해야한다. http를 붙일 경우 connection error 발생)

password : DB 비밀번호

port : DB 포트

database : DB 이름

username : DB 계정

 

R2DBCConfig.kt

 

2.2.3 @EnableR2dbcRepositories

메인 코틀린 파일에 @EnableR2dbcRepositories 어노테이션을 붙여준다.

DemoApplication.kt

 

3. DAO생성 및 Model 수정

3.1 DAO 패키지와 인터페이스를 생성한다.

TestDAO.kt

 

3.2 DAO 설정

TestDAO에 ReactiveCrudRepository를 추가하고 Model을 연결한다.

TestDAO.kt

 

3.3 Model 수정

Test.kt 파일을 수정한다. DB 연결에 필요한 annotation 및 생성자를 추가한다.

아래의 생성자는 id를 통해 DB의 데이터를 삭제하기 위해 생성하였다.

Test.kt

 

4. Handler 수정

4.1 TestDAO 선언

TestHandler.kt에 생성한 TestDAO를 선언한다.

TestHandler.kt

 

4.2 생성한 Handler Method들 수정

4.2.1 소스 수정

TestHandler.kt

 

 

4.2.2 PostMan으로 테스트

추가

 

전체 조회 :

 

수정 : id 2의 name을 test222로 수정

 

하나만 조회 : 수정한 id : 2 인 데이터가 수정이 잘되었는지 조회

 

삭제 :

 

5. 기타

현재 테스트한 테이블에서는 id가 Auto Increment로 되어있다. 따라서 save 메소드 사용할 경우 insert와 update가 잘 되지만,

만약 auto increment가 아닌 테이블에 데이터를 삽입하게 된다면, save를 사용할 경우 insert가 되지않고 update문이 적용될 것이다.

이를 해결하기 위해선 Persistable이라는 interface를 상속받아 isNew의 반환값을 true로 하면 해결이되나, 이는 또 다시 insert만되고 update는 안되는 반대되는 상황이 발생한다. 

아직 ReactiveCrudRepository에서는 정확한 해결방법이 나오진 않은 것 같다.

 

다음 - R2DBC Join, Query사용 Dynamic Projection

1. Maven Archetype

Archetype이란 Maven(Spring, Spring boot)에서 나만의 template/boilerplate를 제작하는 방법이다.

 

2. 기본세팅

2.1 Setting.xml

- Archetype 사용하기 위해선 setting.xml 파일이 필요하다.

- setting.xml 파일이 없다면, 내문서의 .m2 폴더에 setting.xml 파일을 생성한다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">


  <localRepository>${user.home}/.m2/repository</localRepository>

</settings>

 

2.2 Maven

https://maven.apache.org/download.cgi

 

Maven – Download Apache Maven

Downloading Apache Maven 3.6.3 Apache Maven 3.6.3 is the latest release and recommended version for all users. The currently selected download mirror is http://us.mirrors.quenda.co/apache/. If you encounter a problem with this mirror, please select another

maven.apache.org

- Archetype은 기본적으로 Maven명령어를 사용하기 때문에 Maven이 설치되어 있어야 한다.

- 위 사이트에 접속하여 .zip 파일을 다운받아 적절한 위치에 압축을 해제한 뒤 고급시스템 설정의 path에

압축 해제한 경로에 맞게(Ex : C:\apache-maven-3.6.3\bin) path를 추가한다.

 

※ Spring/Spring Boot는 Maven 설치안하는데 Maven이 되는데, 그 이유는 Spring/Spring Boot의 경우 프로젝트를 생성하게 되면, 자동으로 mvnw.cmd 라는 파일이 생기기 때문이다.

 

3. Archetype 사용방법

3.1 미리 생성한 프로젝트에서 생성 후 로컬배포

- Spring/Sprin Boot에서 나만의 template/boilerplate를 제작하였다면, IDE Terminal에서 프로젝트 Root 경로에 아래의 명령어를 입력한다

mvn archetype:create-from-project

 

- 명령어를 입력하게되면 target/generated-sources/archetype 폴더가 생성된다. 생성한 폴더에 접근한다.

cd target/generated-soruces/archetype

 

- IDE Terminal에서 mvn install 또는 mvn deploy를 실행한다.

mvn install

  - mvn install은 local 저장소에 배포를 하며, .m2 폴더에 저장된다.

  - mvn deploy는 maven 저장소에 배포하는 것이며, 사설 nexus 저장소에 배포가능하다.

 

 

- mvn archetype:generate -DarchetypeCatalog=local 명령어를 통해 정상적으로 등록되었는지 확인한다.

mvn archetype:generate -DarchetypeCatalog=local

 

- mvn install 했으나 로컬에 배포되지 않은 경우 mvn archetype:update-locate-catalog 를 입력한다.

mvn archetype:update-locate-catalog

 

3.2 사설 저장소에 배포

- mvn deploy로 사설 nexus에 등록할 경우 target/generated-soruces/archetype 에 있는 pom.xml에 아래와 같이 등록한다. 

	<distributionManagement>
        <repository>
            <id>test-releases</id> 
            <name>Releases Repository</name>
            <url>http://127.0.0.1/repository/maven-releases/</url>
        </repository>
        <snapshotRepository>
            <id>test-snapshots</id>
            <name>Snapshots Repository</name>
            <url>http://127.0.0.1/repository/maven-snapshots/</url> 
        </snapshotRepository>
    </distributionManagement>

 

- 만약 사설 저장소에 권한이 필요해 계정 및 비밀번호가 필요하면, .m2 폴더의 settings.xml에 계정과 비밀번호를 등록한다. server에 들어가는 id 와 위 xml의 id가 같아야한다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">


  <localRepository>${user.home}/.m2/repository</localRepository>

  <servers>
    <server>
      <id>test-releases</id>
      <username>admin</username>
      <password>testpw</password>
    </server>
     <server>
      <id>test-snapshots</id>
      <username>admin</username>
      <password>testpw</password>
    </server>

  </servers>
 
</settings>

 

- 등록 후 target/generated-soruces/archetype 경로에서 mvn deploy를 하면 사설저장소에 저장된다.

- 사설 저장소에 있는 것을 사용 및 확인하고 싶다면 setting.xml에 mirror를 작성해줘야 한다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">


  <localRepository>${user.home}/.m2/repository</localRepository>

 <mirrors>
	<mirror>
	<id>test-snapshots-repo</id>
	<mirrorOf>*</mirrorOf>
	<name>Mirror.</name>
	<url>http://127.0.0.1/repository/maven-snapshots/</url>
	</mirror>
</mirrors>

  <servers>
    <server>
      <id>test-releases</id>
      <username>admin</username>
      <password>testpw</password>
    </server>
     <server>
      <id>test-snapshots</id>
      <username>admin</username>
      <password>testpw</password>
    </server>

  </servers>
 
</settings>

 

- 등록 후 mvn archetype:generate 하면 등록한 archetype 항목이 나올것이다.

 

4. 프로젝트 생성

- mvn archetype:generate 명령어 후 플젝 선택시 입력하는 것들은

target/generated-soruces/archetype 폴더의 pom.xml에 있는

- groupid

- artifactId

- version

이며, 똑같이 입력해주면 프로젝트가 생성된다.

 

이클립스에서 Kotlin + Spring Boot 2.0 + Webflux 사용방법이다.

DB연동은 다음에 하며 간단한 프로젝트 생성 후 Get, Post, Put, Delete 부터시작한다.

 

R2DBC MySQL 연결 -

2020/06/04 - [Develop/Spring Boot] - Kotiln Spring Boot Webflux r2dbc(MySQL)

 

Kotiln Spring Boot Webflux r2dbc(MySQL)

이전 글에 이어서 Kotlin + Spring Boot 2.0 + Webflux + R2DBC(MySQL)사용방법이다. 이전글 - Kotlin Spring Boot Webflux (Eclipse) 2020/04/26 - [Develop/Spring Boot] - Kotlin Spring Boot Webflux (Eclipse..

wky.kr

 

1.

https://start.spring.io/

접속하여 간단히 프로젝트 부터 생성한다. Dependencies는 Webflux를 위해 Reactive Web만 추가한다.

 

GENERATE를 눌러 프로젝트를 다운받은 후 이클립스에 추가한다.

 

2. 실행하기 전에 Intellij 에서는 실행을 안해봐서 잘 모르겠지만, 이클립스에서 실행할 경우 final 에러가 뜨는데 그 경우

Spring Boot를 실행하는 메인 클래스에 open이라는 키워드를 붙여준다.

 

3.다음 간단히 프로젝트 구조를 잡아준다.

Model에는 Spring이나 Webflux가 아닌 SpringBoot 에서의 VO를 작성해준다.

 

4. Handler를 작성해준다. Handler는 Spring이나 Webflux가 아닌 SpringBoot 에서의 Controller라고 생각하면된다.

 

5. router를 작성해준다. router에서 URL을 설정해 Handler로 연결 시켜준다.

Configuration Annotation을 사용하는 경우 class 앞에 꼭 open 을 붙여주어야 하며,

open이 붙은 클래스들의 함수들 또한 앞에 open을 꼭 붙여주어야 한다.

 

 

6. Postman으로 간단히 실행해본다.

GET : Handler에서 작성한대로 query parameter를 넣어 그 결과를 반환한다.

 

POST : Handler에서 작성한대로 id, name을 전송하게 되면 id, name을 출력한다.

 

PUT : Handler에서 작성한대로 id, name을 전송하게 되면 id, name을 출력한다.

 

DELETE : Handler에서 작성한대로 id, name을 전송하게 되면 id, name을 출력한다.

 

다음에 시간나면 데이터베이스 연결을 위해 ReactiveCrudRepository사용법과 Join하는 방법을 올려야겠다.

 

Kotlin Webflux R2DBC MySQL - 

2020/06/04 - [Develop/Spring Boot] - Kotiln Spring Boot Webflux r2dbc(MySQL)

 

Kotiln Spring Boot Webflux r2dbc(MySQL)

이전 글에 이어서 Kotlin + Spring Boot 2.0 + Webflux + R2DBC(MySQL)사용방법이다. 이전글 - Kotlin Spring Boot Webflux (Eclipse) 2020/04/26 - [Develop/Spring Boot] - Kotlin Spring Boot Webflux (Eclipse..

wky.kr

 

1. 이클립스 삭제 후 재설치 시 발생하는 에러

 - ERROR: org.eclipse.equinox.p2.engine code=4 An error occurred during the org.eclipse.equinox.internal.p2.engine.phases.CheckTrust phase.

 

내 문서의 .eclipse, .m2, .p2 폴더 삭제

 

2. 프로젝트 선택 시 발생하는 에러

- please choose another workspace as

 

해당 프로젝트의 metadata폴더 삭제

+ Recent posts