본문 바로가기
개발/스프링 FIreBase Neo4j

IntelliJ Spring initializr 설정 방법

by 꿈트리꿈트리 2023. 1. 21.

https://devkimchi.tistory.com/62

 

SPRING BOOT + FIREBASE (DATABASE,FUNCTIONS,AUTH) + NEO4J 프로젝트 시작

SPRING BOOT + FIREBASE (DATABASE, FUNCTIONS, AUTH) + NEO4J 를 사용 한 프로젝트. 포인트는 FIREBASE FUNCTIONS를 사용하여 함수를 서비스로 마들고 그걸 권한에 맞게 스프링과 플러터에서 사용하는 것인데 쉽게 될

devkimchi.tistory.com

위의 글에서 프로젝트 초기 설정에 이어 intellj에서 Spring initializr 이용하여 프로젝트를 생성해 보고

테스트해 보겠다.

 

IDE에서 제공하는 스프링 종속성 라이브러리들을 추가해 주고 있다.

첨 보는 라이브러리도 있다.

Security에 보면 Okta라는 것이 있어서 뭔가 하고 유심히 찾아보니

saml, mfa 한글로 된 문서는 적은데 유용해 보였다.

 

Security Assertion Markup Language

saml은 보안인증을 수행할 수 있는 표준 방법 중에 하나인데. 하나의 아이디를 통해 이미 가입되어 있는 사이트를 이용할 수 있게 해주는 기술이다.

 

Multi-Factor Authenticaton

OTP, Email 등 다양한 인증 요소를 사용하여 추가 인증을 할 수 있게 해주는 것을 말한다.

 

Single Sign-On

한번 로그인하여 여러 가지 다른 사이트들을 사용할 수 있게 해주는 기술.

 

OAuth

별도의 회원 가입이 없이 기존에 가지고 있던 계정으로 서비스를 이용하고 인증 가능하게 해주는 기술 회원가입을 새롭게 할 필요가 없어서 편해진다.

 

이런 다양한 기술을 간편하게 사용할 수 있게 해주는 라이브러리가 OKTA라이브러리이다.

사용해 본 적은 없는데 큰 허들이 없으면 사용해 보려 한다.

Okta랑 OAuth랑 함께 사용하면 더 좋다고 하니 이 기회에 한번 사용해 보려 한다.

 

옥타?Okata

옥타라고 읽는 게 맞는지 모르겠지만 okta에 대한 글들을 찾아보니 보안이나 인증 관련된 부분들을 개발자가 어렵지 않게 사용할 수 있을 거 같다.

보안 인증 부분을 제대로 완벽하게 구현하려면 참 힘든 부분이 있지 모든 프로젝트의 공통적인 부분이지만 계속 유지하기도 힘들고 잘 만들지 않으면 문제의 소지도 많기 때문에 이런 걸 다 해결해 준다니 엄청 좋아 보인다. 쉽게 사용 가능하고 무료인지는 알아봐야겠지만 돈 내라고 나오는 부분은 애플리케이션 5개 이상이면 돈 내는 거 같기도 하고 좋아 보이는 거에 비해선 한글 문서들이 적은 거 같다.

security okta 종속성 표시

 

GraalVM Native Support

스프링 프레임웍들은 어플리케이션을 시작하면 수초에서 수십 초씩 초기 부팅을 하는데 이를 개선했다고 docker 이런 게 발전하다 보니 시스템에 어플 올리는데도 부팅이 빨리 돼야 하나 보다 그래서 그쪽으로 업그레이드되고 있는 거 같다.

애플리케이션을 실행파일로 만들고 그 실행돼서 부팅속도가 빠르기를 기대합니다.

빠르면 좋은 거니까요.

https://www.graalvm.org/

 

GraalVM

Companies that successfully use different GraalVM technologies in their products and services

www.graalvm.org

새로운 버전의 프로젝트를 시작하려 하면 새롭게 시도해 보려던 것보다 더 새롭게 알아야 할 주변 라이브러리들이 더 많이 생기는 건 그만큼 발전하고 있다는 것이다.

나중엔 개발자는 로직만 집중하고 나머지는 AI가 해결해 주면 좋을 거 같다. 근데 이거 머라고 읽어야 하나..쥐RAAL..

 

종속성에서 Spring Data Neo4j도 선택해 주고 리액티브론 단어가 안 붙은 걸로 봐선 리액티브가 지원이 되는 것인지

NoSQL이라 원래가 리액티브로 돌아가는 것인지 쉽사리 찾아지지는 않는다.

 

어차피 Neo4j 컨트롤은 FIrebase의 Functions를 사용할 것이라.

 

Sprng Boot 버전은 3.0.1로 하고 추가한 종속성은 아래와 같다

추가한 종속성 목록

 

오류 메시지

어김없이 찾아오는 오류 역시 한방에 되지 않는다.

프로젝트 SDK 설정 화면

JDK를 설정해 준거 같은데 Ctrl+Shift+Alt+S로 프로젝트 설정에 들어가서 JDK를 추가해 준후

다시 Spring initializr을 이용해 종속성을 추가해 준후 생성하면 모듈이 생성됩니다.

 

JDK 설정

 

그리고 다시 메뉴의 > 파일>새로 만들기> 기존파일에 있는 모듈로 모듈을 프로젝트에 추가해 주면 됩니다.

모듈 가져오기
애플리케이션 Run 메뉴

프로젝트에 모듈 추가 후 디렉터리가 표시가 되지 않아 프로젝트 닫았다 다시 들어오니 표시가 되네요.

이런 버그가 ㅠㅠ 오래된 프로그램이고 개발자들이 만들고 쓰는 프로그램이라도 어쩔 수 없나 봅니다.

일단 실행을 하면 부족한 부분의 세팅을 하라고 오류들이 뜹니다.

2023-01-21T14:54:14.438+09:00  INFO 172704 --- [  restartedMain] devkimchi.kweb.KwebApplication           : No active profile set, falling back to 1 default profile: "default"
2023-01-21T14:54:14.466+09:00  WARN 172704 --- [  restartedMain] ironmentPostProcessorApplicationListener : Your Okta Issuer URL is missing. You can copy your domain from the Okta Developer Console. Follow these instructions to find it: https://bit.ly/finding-okta-domain
To fix this add the `okta.oauth2.issuer` property to your application environments.
2023-01-21T14:54:14.466+09:00  INFO 172704 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
2023-01-21T14:54:14.466+09:00  INFO 172704 --- [  restartedMain] .e.DevToolsPropertyDefaultsPostProcessor : For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
2023-01-21T14:54:14.918+09:00  INFO 172704 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Neo4j repositories in DEFAULT mode.
2023-01-21T14:54:14.927+09:00  INFO 172704 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 6 ms. Found 0 Neo4j repository interfaces.
2023-01-21T14:54:14.929+09:00  INFO 172704 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Neo4j repositories in DEFAULT mode.
2023-01-21T14:54:14.930+09:00  INFO 172704 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 0 ms. Found 0 Neo4j repository interfaces.
2023-01-21T14:54:15.264+09:00  WARN 172704 --- [  restartedMain] ion$DefaultTemplateResolverConfiguration : Cannot find template location: classpath:/templates/ (please add some templates, check your Thymeleaf configuration, or set spring.thymeleaf.check-template-location=false)
2023-01-21T14:54:15.418+09:00  INFO 172704 --- [  restartedMain] o.neo4j.driver.internal.DriverFactory    : Direct driver instance 887850476 created for server address localhost:7687
2023-01-21T14:54:15.443+09:00  INFO 172704 --- [  restartedMain] o.s.b.a.e.web.EndpointLinksResolver      : Exposing 1 endpoint(s) beneath base path '/actuator'
2023-01-21T14:54:15.484+09:00  INFO 172704 --- [  restartedMain] ctiveUserDetailsServiceAutoConfiguration : 

Using generated security password: 2bee7baa-4d39-448a-8e9c-c1e604d366fd

2023-01-21T14:54:15.734+09:00  INFO 172704 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
2023-01-21T14:54:15.866+09:00  INFO 172704 --- [  restartedMain] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2023-01-21T14:54:15.876+09:00  INFO 172704 --- [  restartedMain] devkimchi.kweb.KwebApplication           : Started KwebApplication in 1.625 seconds (process running for 2.055)
2023-01-21T14:54:16.146+09:00  WARN 172704 --- [o4jDriverIO-3-3] o.s.b.a.n.Neo4jReactiveHealthIndicator   : Health check failed

org.neo4j.driver.exceptions.ServiceUnavailableException: Unable to connect to localhost:7687, ensure the database is running and that there is a working network connection to it.
	at org.neo4j.driver.internal.async.connection.ChannelConnectedListener.databaseUnavailableError(ChannelConnectedListener.java:72) ~[neo4j-java-driver-5.2.0.jar:5.2.0-e0e5b6a8d95e38084c5cf9ac39e3ee8c9f5f05d0]
	at org.neo4j.driver.internal.async.connection.ChannelConnectedListener.operationComplete(ChannelConnectedListener.java:66) ~[neo4j-java-driver-5.2.0.jar:5.2.0-e0e5b6a8d95e38084c5cf9ac39e3ee8c9f5f05d0]
	at org.neo4j.driver.internal.async.connection.ChannelConnectedListener.operationComplete(ChannelConnectedListener.java:36) ~[neo4j-java-driver-5.2.0.jar:5.2.0-e0e5b6a8d95e38084c5cf9ac39e3ee8c9f5f05d0]
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:321) ~[netty-transport-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:337) ~[netty-transport-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776) ~[netty-transport-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[netty-transport-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[netty-transport-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[netty-transport-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.86.Final.jar:4.1.86.Final]
	at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: localhost/127.0.0.1:7687

모 이런 것들... 크게 보면 okta, neo4 j 값들 설정하라는 거 같네요

 

다음 편에 Okta 가입과 설정등을 하고 

로컬에 Neo4j를 설치해 개발 환경을 맞추고 세팅을 해보겠습니다.