문제: 잘되던 스프링 프로젝트가 갑자기 main을 찾을 수 없다고 함

원인: spring-jdbc dependency를 추가할 떄 spring-context 앞에 추가를 했기 때문이다. 

context가 가장 먼저 만들어져야 그 다음것들을 만들 수 있기 때문에 순서를 바꾸면 에러가 발생

해결: jdbc 디펜던시를 context 디펜던시 뒤로 보내줬다

Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).

 

 

원인: 오라클 서버 프로그램을 켜두면서 톰캣을 실행한 경우 충돌이 나는 경우가 많다.

 

해결법: 

1. server.xml을 찾아서 포트번호를 바꿔준다

2.cmd에서 netstat -ao를 통해 사용중인 프로세스를 kill한다

3.db를 그때 그때 꺼준다

 

나는 3번을 주로 쓴다. 충돌나는 이유가 대부분 오라클 db때문이기 때문에 아예 stop database 실행파일을 바탕화면에 꺼내두었다. 충돌날때마다 한번씩 눌러주면 짱 편하다. 

 

위치: C:\oraclexe\app\oracle\product\11.2.0\server\bin\ 에 stop DB 실행파일 있다.

 

 

 

이클립스에서 스프링 프로젝트 열기

how to: 프로젝트 파일을 압축해제-> import->maven existing project ->browse->해당 파일 찾기.

+웬만하면 워크스페이스에 파일을 두자! 
(그냥 프로젝트를 오픈시키면 메이븐 라이브러리가 포함되어 있지 않아서 빌드를 못한다)
(스프링과 메이븐이 설치되어있어야 함)

 

깃허브에 스프링 프로젝트 올리기

how to:기존에 만들어둔 repository가 있다면, 그곳에 이름이 같은 파일로 create file 또는 files를 하면 PR(Pull Request)을 생성할 수 있다.  이때 new branch를 체크해서 만들면 해당 PR은 팀원과 상의 후 본 코드에 merge할 수 있다.

+이때, 파일 변화를 볼 수 있는데 ++도 중요하지만 --가 되는 부분에 특히 집중해야한다. 잘못하면 만든 코드가 다 날라갈 수도 있다. merge된 코드(최종코드)에선 history로 들어가면 이전에 존재하던 코드들이 보이고, 어떤 변화가 있었는지 알 수 있고 코드 한줄 한줄에 코멘트도 달 수 있다. 또, 그 코멘트에 대해 사람을 추가하여 토론 또한 가능하다.

 

 

 

느낀점: 형상관리 툴을 처음 사용해봤는데 프로젝트에 없어서는 안될 요소라는 생각이 들었다. 코드가 어디가 어떻게 바뀌었는지 한눈에 볼 수 있고, 작은 이슈도 그냥 지나치지 않고 함께 고민해보고 다양한 관점으로 토론해보는 방식이 협업에 많은 도움이 되었다.  하지만 사용법은 따로 공부하면서 이것저것 만져보면서 익혀야할 것 같다. 

깃: 분산 소스 버전관리 시스템(혼자 할 때 유용)

깃허브:깃을 업로드하는 웹사이트(여럿이서 공동개발할 때 유용)

 

 

 

what?

applicationContext.xml에서 base-package 값을 다른 패키지 경로로 지정해주면 스프링 빈 등록과 코드실행도 잘 되는데 다른 패키지로 하면 404 에러가 떴다. 콘솔에는 경고만 뜨고 심각은 뜨지 않았다.

 

how?

아래는 성공 전까지 시도했던 방법들이다.

 

1.톰캣 재시작(처음 톰캣 실행이 안되는 에러를 잡을 수 있었다. 하지만 404에러는 잡히지 않았다)

 

error:

Server Tomcat v7.0 Server at localhost failed to start

 

 

 

 

 

 

Servers->톰캣 우클릭->Delete->새 톰캣 서버 만들기

 

 

2.maven update

프로젝트 우클릭->Maven->Update Project

 

3.각종 버전 수정

xml파일에 java version 관련된 값들이 올바르게 설정되어있는지 확인

 

4.오타확인(""값으로 들어가면 컴파일 에러도 안뜨니 주의하자)

실행되는 자바파일의 AbstractApplicationContext를 생성하는 부분에 "applicationContext" 값의 't'를 뺴먹었었다. 

 

5.서버 옵션 체크

 

 

error:

setting property 'source' to 'org.eclipse.jst.jee.server:boardweb' did not find a matching property.

 

 

 

 

 

 

 

 

Servers->톰캣 더블클릭->overview의 sever options에서 'public module contexts to separate XML files' 체크.

 

 

 

6.run 세팅 확인(성공한 방법)

 

 

 

 

 

알고보니 내가 실행하려는 BoardServiceClient가 프로젝트 실행 소스로 등록이 되어있지 않았다! 그래서 추가해주고 돌리면 에러가 나지 않는다. 등잔 밑이 어둡다..

 

 

 

 

 

 

 

 

 

 

 

 

프로젝트 우클릭->properties->run/debug->new->시작할 소스 추가

 

 


아래는 콘솔창 로그이다. 

 

12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Server version:        Apache Tomcat/7.0.85
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Server built:          Feb 7 2018 18:52:33 UTC
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Server number:         7.0.85.0
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: OS Name:               Windows 10
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: OS Version:            10.0
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Architecture:          amd64
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Java Home:             C:\Program Files\Java\jre1.8.0_144
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM Version:           1.8.0_144-b01
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: JVM Vendor:            Oracle Corporation
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_BASE:         C:\Users\KCE\Desktop\spring5\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: CATALINA_HOME:         C:\Program Files\apache-tomcat-7.0.85
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Command line argument: -Dcatalina.base=C:\Users\KCE\Desktop\spring5\.metadata\.plugins\org.eclipse.wst.server.core\tmp0
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Command line argument: -Dcatalina.home=C:\Program Files\apache-tomcat-7.0.85
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Command line argument: -Dwtp.deploy=C:\Users\KCE\Desktop\spring5\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Command line argument: -Djava.endorsed.dirs=C:\Program Files\apache-tomcat-7.0.85\endorsed
12월 17, 2019 10:05:43 오전 org.apache.catalina.startup.VersionLoggerListener log
정보: Command line argument: -Dfile.encoding=MS949
12월 17, 2019 10:05:43 오전 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
정보: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_144\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_144/bin/server;C:/Program Files/Java/jre1.8.0_144/bin;C:/Program Files/Java/jre1.8.0_144/lib/amd64;C:\oraclexe\app\oracle\product\11.2.0\server\bin;C:\ProgramData\Oracle\Java\javapath;C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files\Intel\Intel(R) Management Engine Components\DAL;C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files\Intel\WiFi\bin\;C:\Users\KCE\Documents\opencv\build\x64\vc14\bin;C:\Program Files\Java\jdk1.8.0_144bin;C:\Users\KCE\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Python 3.6;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Git\cmd;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files\Android\Android Studio\jre\bin;C:\Program Files\PuTTY\;C:\Users\KCE\AppData\Local\Microsoft\WindowsApps;C:\Program Files\R\R-3.5.1\bin\x64;C:\Users\KCE\Documents\R\win-library\3.5\rJava\jri\x64;C:\Users\KCE\AppData\Local\Microsoft\WindowsApps;C:\devtool\apache-maven-3.6.2\bin;;C:\Users\KCE\Desktop;;.
12월 17, 2019 10:05:43 오전 org.apache.coyote.AbstractProtocol init
정보: Initializing ProtocolHandler ["http-bio-8080"]
12월 17, 2019 10:05:44 오전 org.apache.coyote.AbstractProtocol init
정보: Initializing ProtocolHandler ["ajp-bio-8009"]
12월 17, 2019 10:05:44 오전 org.apache.catalina.startup.Catalina load
정보: Initialization processed in 834 ms
12월 17, 2019 10:05:44 오전 org.apache.catalina.core.StandardService startInternal
정보: Starting service Catalina
12월 17, 2019 10:05:44 오전 org.apache.catalina.core.StandardEngine startInternal
정보: Starting Servlet Engine: Apache Tomcat/7.0.85
12월 17, 2019 10:05:46 오전 org.apache.catalina.startup.TldConfig execute
정보: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
12월 17, 2019 10:05:46 오전 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
경고: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [655] milliseconds.
12월 17, 2019 10:05:46 오전 org.apache.catalina.startup.HostConfig deployDescriptor
정보: Deploying configuration descriptor C:\Users\KCE\Desktop\spring5\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\Catalina\localhost\biz.xml
12월 17, 2019 10:05:46 오전 org.apache.catalina.startup.SetContextPropertiesRule begin
경고: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:BoardWeb' did not find a matching property.
12월 17, 2019 10:05:49 오전 org.apache.catalina.startup.TldConfig execute
정보: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
12월 17, 2019 10:05:49 오전 org.apache.catalina.startup.HostConfig deployDescriptor
정보: Deployment of configuration descriptor C:\Users\KCE\Desktop\spring5\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\conf\Catalina\localhost\biz.xml has finished in 2,626 ms
12월 17, 2019 10:05:49 오전 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["http-bio-8080"]
12월 17, 2019 10:05:49 오전 org.apache.coyote.AbstractProtocol start
정보: Starting ProtocolHandler ["ajp-bio-8009"]
12월 17, 2019 10:05:49 오전 org.apache.catalina.startup.Catalina start
정보: Server startup in 5610 ms

 

 

+처음 404에러가 떴을때 콘솔에 뜬 로그를 봤을때, 자꾸 appServlet과 home.js가 찍혀나오는걸 보고 짠 적도 없는게 왜 나오지...? 싶었는데, spring legacy를 만들면 자동적으로 생성되는거라고 한다. 그래서 webapp 폴더를 삭제했다. 그러나 war로 패키징 되도록 설정되있어서 반드시 web.xml이 있어야만 했다(서블릿3.0버전부터는 없애기 가능) 

 

더보기

https://minwan1.github.io/2017/10/08/2017-10-08-Spring-Container,Servlet-Container/

 

Wan Blog

WanBlog | 개발블로그

minwan1.github.io

 

IoC 백날 공부해도 스프링 동작원리를 모르면 에러 하나 잡기가 많이 힘든 것 같다. 위 글에 잘 정리되어있으니 참고하자!

내가 현재 보고 있는 '스프링 퀵스타트' 책에선 H2데이터베이스를 사용한다.

하지만 나는 Oracle을 쓰고 싶다! 

 

그래서 구글링으로 오라클 데이터베이스를 사용할 수 있도록 세팅을 해뒀다.

(오라클 계정 만들고..sql developer 설치하고..등등 select 쿼리 결과 나오는거까지 볼 수 있도록)

 

For what?

이 상태에서 spring과 어떻게 연동을 하느냐??

보통 필요한 모듈이 있으면 pom.xml에 dependecy 추가를 해주면 maven이 찾아서 설치를 해준다고

앞부분에서 배웠다. 그래서 'spring oracle 연동'이란 키워드로 검색을 해서 dependency 추가하는 코드만

긁어서 붙여봤는데 아래와 같은 부분에 빨간줄이 뜬다. 

 

Why? 오라클에서 법적 분쟁이 일어날 수 있기 때문에 메이븐이 오라클이 제공하는 jdbc(ojdbc)를 자동적으로 가져다 쓸 수 없게 해뒀다. 그래서 사용하려면, 직접 추가를 해줘야한다. 

 

How?

 

1. oracle 홈페이지에서 아래 파일을 받는다. ojdbc jar파일이다. jdk8에는 ojdbc7이 적절하다해서 7로 받았다.

2. maven 명령어로 해당 jar파일을 로컬 repository에 설치해준다. (maven 로컬 repository에 그냥 추가하면 안되나?라고 생각했지만..ㅋㅋ그렇게 직접적으로 한다고 되는건 아닌 것 같다.)

 

 

$mvn install:install-file -Dfile="~~~ojdbc7.jar" -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.1.0 -Dpackaging=jar

 

*첫번쨰 굵은 글씨) ojdbc가 설치된 경로

*두번째)파일이름

*jdbc 드라이버 버전 ($java -jar ojdbc7.jar -getversion)

 

설치하면 요로케 된다

3. pom.xml에 dependency를 추가한다

 

<dependency>

    <groupId>com.oracle</groupId>

   <artifactId>ojdbc7</artifactId>

   <version>12.1.0.1.0</version>

</dependency>



4.저장하고 메이븐 플젝 업데이트!

user/.m2/repository/com/oracle에서 설치된 ojdbc를 확인할 수 있다

 


+ 추가

 

이때 만들었던 프로젝트를 다른 컴퓨터에서 열었을 때 같은 오류가 발생했다.

하지만  그대로 따라 했을 때 'mvn'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는
배치 파일이 아닙니다.'라는 에러를 콘솔에서 볼 수 있었다. 그 이유는, 내가 원래 쓰던 컴퓨터는

시스템에 직접 설치를 해서 환경변수도 설정해줬지만 지금 사용하는 컴퓨터에선 이클립스의 market place에서 메이븐을

설치했기 때문이다. 

 

 

 

물론, GUI환경이라는 점이 다를뿐 maven은 잘 설치되어있다. 이클립스에서 바로 maven 명령어를 실행하려면

프로젝트 우클릭->run as->maven->maven build...에서 goal에 명령어를 쓰면 된다. 

이때 명령어는 다음과 같다.

 

install:install-file -Dfile=C:~//ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.1.0 -Dpackaging=jar

 

나는 \를 //로 써야하는지 몰라서 한참 걸렸었다ㅠ

그 후, 프로젝트 우클릭->maven->project update를 하면 pom.xml의 빨간줄이 사라진다.

 

더보기

그림으로 공부하는 오라클 구조-오다 케이지

시간나면 읽어볼 것!

 

Listener refused the connection with the following error: ORA-12505, TNS:listener does not currently know of SID given in connect descriptor 

얼마전까지 oracle사의 sql developer를 잘 사용했었는데 위의 창이 뜨면서 접속이 되지 않았다.

해석을 해보면 리스너가 제대로 작동되지 않는다는 것을 알 수 있다. 

 

cmd에 위의 명령어를 입력해서

 

 

OracleServiceXE를 실행상태로 만들어준다.

 


 

Why?

 

리스너란 네트워크를 통해 클라이언트와 서버(오라클)의 연결을 담당하는 프로그램이다. 

 

리스너는 listener.ora 라는 내용에 의해 실행된다

이 서비스는 SID를 가지고 실행되는데, 

-호스트 시스템 이름이 변경된 경우

-IP가 변경된 경우(유동IP사용)

-사용하지 않아서 자동적으로 리스너가 꺼진 경우

에 'SID를 찾지 못한다'는 메시지가 출력이 된다.

 

SID가 변경됐다면 위의 설정파일을 수정해주면 되는데, 나처럼 잘되다가 갑자기 안되는 경우는 리스너가 꺼졌을 가능성이 높다. 그래서 cmd에서 명령어로 실행중인 서비스를 확인한 것이고, OracleListener가 아니라 OracleService가 꺼진 것을 발견했다.

 

오라클DB를 쓸 때, 오라클 서비스 인스턴스와 오라클 리스너가 따로 시작하여 동작한다. 오라클 서비스(OracleServiceXE)는 기본 서비스이며 오라클 사용 시 가장 먼저 시작되어야한다. 그래서 켜줬다. 실행이 된다.

(MySQL은 인스턴스와 리스너가 mysqld 하나로 되어 있어서, mysqld만 시작하면 즉시 서비스 가능하다)

 

 

 

+ Recent posts