Spring Framework 환경 구축/4,5,6/(jdk,sts,lombok,pom.xml,project setting, 경로)

유성훈·2023년 2월 2일
0

Spring Framework공부

목록 보기
3/7

📌JDK설치

  • 구글 JDK11 검색 -> window x64 installer(자신의 환경에 맞게)
    (오라클 계정을 만들어야 다운 가능)
  • 관리하기 쉬운 위치로 jdk이동
  • 다운받은 jdk 더블클릭 후 실행
  • 경로는 change클릭 후 Program Files를 지워준다.
  • 환경변수 설정(내PC우클릭 -> 속성 -> 고급 시스템 설정 -> 환경변수 -> 시스템 변수에 만약 JAVAHOME있다면 이미 완료 ->새로만들기 -> JAVA HOME, 경로는 다운 받은 경로 -> Path더블 클릭 -> 빈 공간에 %JAVA_HOME%\bin -> 위로 이동하고 -> 확인)
  • cmd창 javac -version, java -version으로 설치 확인
    (현업 에서는 jdk8을 많이 사용)



📌Spring Tool Suit(sts는 통합개발환경)

🔎spring framework를 spring tool suit에서 사용하는 방법

  • sts4에서 3버전 플러그인 설치(오류가 많기 때문에 비추)
  • sts3버전을 설치 해서 사용(아래설명)

📍sts3버전 설치 방법

  1. 구글 sts검색
  2. 하단 looking for spring tool suit3? -> spring tool suit3 wiki 클릭
  3. 3버전 중 3.9.18 최신 설치
  4. 운영체제에 맞는 것을 설치
  5. 다운로드 알집을 관리하기 쉬운 위치로 이동
  6. 알집 우클릭 -> 알아서 풀기
  7. sts-3.9.18 release로 들어가면 STS를 들어가는 응용프로그램이 있다.
  8. 편의성을 위해 STS우클릭 -> 바로가기 만들가 -> 원하는 위치에 놓기
  9. 처음 sts를 클릭해서 workspace를 자신이 관리 하기 쉬운 위치로 경로를 지정해 준다. -> lanuch
  10. 처음 들어와서 할 설정
    1) server에서 sts에 내장 되어있는 VMware 서버 실행 -> reminde later
    2) window -> preferences -> general -> workspace -> text file encoding(other : utf-8)로 변경
    3) window -> preferences -> web -> css files -> ISO....(UTF-8)로 변경
    4) window -> preferences -> web -> html files -> ISO....(UTF-8)로 변경
    5) window -> preferences -> web -> jsp files -> ISO....(UTF-8)로 변경
    6) window -> preferences -> run/debug -> console -> limit console output체크 해제 -> apply and close
    7) window -> preferences -> general -> appearance -> colors and fonts -> text font더블 클릭 -> (원하는 것 선택)



📌Tomcat 서버 설정

  1. 구글 -> tomcat검색 -> 왼쪽 tomcat9버전 클릭 -> 64bit window zip(자신의 환경에 맞게)
  2. 다운로드 에서 zip을 자신이 관리 하기 쉬운 위치로 이동
  3. 경로를 간단히 하기 위해 c드라이브에 zip파일 복사 붙여 넣기
  4. zip파일 우클릭 -> 알아서 풀기(추후 풀린 폴더로 경로를 지정해 주기 때문에 위치 알고 있어야 한다.)
  5. servers부분에 서버가 없다면 no servers are available. click this link to create a new server 클릭
  6. tomcat9 버전 선택 -> next -> browse클릭 -> tomcat을 다운 받은 경로 선택 -> next -> finish
  7. servers에 생긴 tomcat을 더블 클릭 하면 port번호 지정 가능, 8080은 다른 port와 겹칠 수 있기 때문에 10000으로 변경, server option에서 server moduls without publishing 체크하면 속도가 더 빨라진다. -> 저장(서버를 꺼야 저장 가능)
  8. servers에서 tomcat 실행 해서 정상 실행 되면 성공
    (tomcat을 사용하기 때문에 내장 서버는 삭제 해도 된다. / servers -> VMware서버 클릭 -> delete -> ok)




📌프로젝트 생성

  1. 좌측 package explorer에서 alt + shift + n -> spring legacy project -> spring mvc project(MVC방식으로 폴더가 만들어 진다.)
  2. 프로젝트명 작성 -> yes, top level package명 조건에 맞게 작성 -> 프로젝트 생성 (오류가 뜰경우 pom.xml버전 수정 필요 3번 작업)
  3. pom.xml에 가면 필요한 파일들이 xml로 작성 되어 있다.(개발자가 필요한 버전에 맞게 수정 하는 과정 필요)
    -java version 11로 변경(현재 PC에 다운 되어 있는 JDK버전에 따라 다름)
    -org.springframework-version은 5.1.20.RELEASE로 변경(상황에 따라 다름)
    -org.aspectj-version은 1.9.0으로 변경
    -org.slf4j-version은 1.7.25로 변경
    -logging부분의 dependecey중 groupId의 log4j의 version을 1.2.17로 변경, 바로 아래 전부 삭제
    -servlet부분의 가 javax.servlet, 가 servlet-spi를 javax.servlet-api로 변경, version은 3.1.0으로 변경
  4. 저장 -> 프로젝트 우클릭 -> Maven -> update project -> force update of snapshots/release 체크 -> ok (pom.xml수정시 해준다.)
  5. 추후 lombok, json(데이터를 교환하는 형식)추가, mybatis
    (버전은 현재 개발환경에 맞추어 설정 한다.)
  6. 프로젝트를 서버에 등록(서버 클릭 -> moduls -> add web modul -> 해당 프로젝트 / edit -> path -> 프로젝트명으로 변경 -> 저장 -> 서버 재시작)
     <?xml version="1.0" encoding="UTF-8"?>
    	<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.hds</groupId>
    	<artifactId>app</artifactId>
    	<name>ex01</name>
    	<packaging>war</packaging>
    	<version>1.0.0-BUILD-SNAPSHOT</version>
    	<properties>
    		<java-version>11</java-version>
    		<org.springframework-version>5.1.20.RELEASE</org.springframework-version>
    		<org.aspectj-version>1.9.0</org.aspectj-version>
    		<org.slf4j-version>1.7.25</org.slf4j-version>
    	</properties>
    	<dependencies>
    		<!-- Spring -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${org.springframework-version}</version>
    			<exclusions>
    				<!-- Exclude Commons Logging in favor of SLF4j -->
    				<exclusion>
    					<groupId>commons-logging</groupId>
    					<artifactId>commons-logging</artifactId>
    				 </exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    		<dependency>
    		    <groupId>org.projectlombok</groupId>
    		    <artifactId>lombok</artifactId>
    		    <version>1.18.22</version>
    		    <scope>provided</scope>
    		</dependency>
    		<!-- AspectJ -->
    		<dependency>
    			<groupId>org.aspectj</groupId>
    			<artifactId>aspectjrt</artifactId>
    			<version>${org.aspectj-version}</version>
    		</dependency>	
    		<!-- JSON -->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<version>2.9.6</version>
    		</dependency>
    		<dependency>
    			<groupId>com.fasterxml.jackson.dataformat</groupId>
    			<artifactId>jackson-dataformat-xml</artifactId>
    			<version>2.9.6</version>
    		</dependency>
    		<dependency>
    			<groupId>com.google.code.gson</groupId>
    			<artifactId>gson</artifactId>
    			<version>2.8.2</version>
    		</dependency>
    		<!-- Logging -->
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>jcl-over-slf4j</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-log4j12</artifactId>
    			<version>${org.slf4j-version}</version>
    		</dependency>
    		<!-- Log4j -->
    		<dependency>
    			<groupId>log4j</groupId>
    			<artifactId>log4j</artifactId>
    			<version>1.2.17</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2 -->
    		<dependency>
    			<groupId>org.bgee.log4jdbc-log4j2</groupId>
    			<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
    			<version>1.16</version>
    		</dependency>
    		<!-- @Inject -->
    		<dependency>
    			<groupId>javax.inject</groupId>
    			<artifactId>javax.inject</artifactId>
    			<version>1</version>
    		</dependency>
    		<!-- Servlet -->
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>javax.servlet-api</artifactId>
    			<version>3.1.0</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet.jsp</groupId>
    			<artifactId>jsp-api</artifactId>
    			<version>2.1</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>javax.servlet</groupId>
    			<artifactId>jstl</artifactId>
    			<version>1.2</version>
    		</dependency>
    		<!-- Test -->
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>5.1.20.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-test</artifactId>
    			<version>5.1.20.RELEASE</version>
    		</dependency>
    		<dependency>
    			<groupId>junit</groupId>
    			<artifactId>junit</artifactId>
    			<version>4.12</version>
    			<scope>test</scope>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/javax.xml/jaxb-api -->
    		<dependency>
    			<groupId>javax.xml</groupId>
    			<artifactId>jaxb-api</artifactId>
    			<version>2.1</version>
    		</dependency>
    		<!-- https://mvnrepository.com.artifact/com.zaxxer/HikariCP -->
    		<dependency>
    			<groupId>com.zaxxer</groupId>
    			<artifactId>HikariCP</artifactId>
    			<version>2.7.4</version>
    		</dependency>
    		<!-- mybatis -->
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis</artifactId>
    			<version>3.4.6</version>
    		</dependency>
    		<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
    		<dependency>
    			<groupId>org.mybatis</groupId>
    			<artifactId>mybatis-spring</artifactId>
    			<version>1.3.2</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-tx</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${org.springframework-version}</version>
    		</dependency>
    		<!-- Thumbnailator -->
    		<dependency>
    			<groupId>net.coobird</groupId>
    			<artifactId>thumbnailator</artifactId>
    			<version>0.4.8</version>
    		</dependency>
    		<!-- Quartz -->
    		<dependency>
    			<groupId>org.quartz-scheduler</groupId>
    			<artifactId>quartz</artifactId>
    			<version>2.3.0</version>
    		</dependency>
    		<dependency>
    			<groupId>org.quartz-scheduler</groupId>
    			<artifactId>quartz-jobs</artifactId>
    			<version>2.3.0</version>
    		</dependency>
    	</dependencies>
       <build>
           <plugins>
               <plugin>
                   <artifactId>maven-eclipse-plugin</artifactId>
                   <version>2.9</version>
                   <configuration>
                       <additionalProjectnatures>
                           <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
                       </additionalProjectnatures>
                       <additionalBuildcommands>
                           <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
                       </additionalBuildcommands>
                       <downloadSources>true</downloadSources>
                       <downloadJavadocs>true</downloadJavadocs>
                   </configuration>
               </plugin>
               <plugin>
                   <groupId>org.apache.maven.plugins</groupId>
                   <artifactId>maven-compiler-plugin</artifactId>
                   <version>3.8.0</version>
                   <configuration>
                       <source>11</source>
                       <target>11</target>
                       <compilerArgument>-Xlint:all</compilerArgument>
                       <showWarnings>true</showWarnings>
                       <showDeprecation>true</showDeprecation>
                   </configuration>
               </plugin>
               <plugin>
                   <groupId>org.codehaus.mojo</groupId>
                   <artifactId>exec-maven-plugin</artifactId>
                   <version>1.2.1</version>
                   <configuration>
                       <mainClass>org.test.int1.Main</mainClass>
                   </configuration>
               </plugin>
           </plugins>
       </build>
    </project>





💡오류 발생시

위의 과정을 진행하면서 프로젝트 내에서 오류가뜰 경우
1. repository폴더 삭제(아래 경로 참고) -> sts재샐행 -> 그래도 안될 경우 pom.xml지우고 저장 -> pom.xml재작성 후 저장 ->maven update
(이해 : C드라이브/사용자or유저/현재PC에 로그인 되어 있는 계정/.m2/repository의 경로 에는 pom.xml에서 다운 받은 것들이 저장 되는 위치 이다.)
2. 프로젝트를 실행 할때 오류 발생(오류 원인이 jstl관련일 경우)

JSTL을 xml에 작성했는데 인식이 되지 않는 경우 아래의 경로에 1.1.2버전을 직접 설치 한다.
https://archive.apache.org/dist/jakarta/taglibs/standard/binaried/ -> 설치 -> 관리하는 위치에 폴더 압축 풀기 -> 2가지를 -> 프로젝트에 WEB-INF안에 lib폴더를 직접 만든다 -> 해당 lib폴더 안에 2개를 넣어준다 -> 서버 재실행



📌프로젝트 시작 전 maven project 이해 하기(maven vs graddle)

  • Maven : 필요한 API나 document들이 있으면 직접 사이트에 가서 다운을 받아야 하는데 메이븐 프로젝트는 xml에 우리가 다운 받고 싶은 정보를 작성하면 알아서 다운 받아주는 것을 의미 한다.
  • graddle : maven과 비슷 하게 요즘 많이 사용되고 있는 비슷한 개념(크게 차이가 없다. / 문법과 파일이 조금 다르다.)



📌Lombok라이브러리, 설치 방법

  • JSP의 모델2 방식의 경우 직접 모델 객체 따로 controller따라 만들었을때 모델 객체의 경우 DBMS에서 만든 테이블 컬럼과 동일 하게 하고 private를 통해 getter, setter를 일일이 해주고 생성자등을 해주면서 코드를 작성하면 코드가 길어진다.
  • 반면 Lombok을 사용하면서 명령어를 쓰면 getter, setter, toString, hashCode, 생성자가 자동으로 만들어 진다.
  • Lombok을 이용하면 JAVA개발시 getter,setter,toString(),생성자 등을 @Data등의 어노테이션을 통해 자동으로 생성 해준다.
    lombok설치 방법
  • 구글 lombok -> download project lombok클릭 -> download1.18.22 -> 다운로드 받은 것을 관리 하기 쉬운 위치로 이동 -> 더블 클릭 (만약 실행 되지 않을 경우 lombok파일 위치에 있는 url창에 cmd 검색 -> java -jar lombok.jar 엔터) -> specify location클릭후 해당 IDE경로 선택 후 install/update(현재 개발하고 있는 IDE경로를 잡아 주는 작업/만약 IDE가 실행중 이라면 닫아 준다.) -> 정상적으로 되었는지 확인 하기 위해서는 sts.exe위치에 lombok이 생기면 성공



📌프로젝트 기본 경로 설명

  • 1) src/main/java : 자바 코드를 작성 하는 경로, 서버단 java 파일
  • 2) src/test/java : 단위 test를 위한 java 파일(was에 종속적이지 않기 때문)
  • 3) src/main/resources : src/main/java에서 관련 설정 파일을 여기에 저장
  • 4) src/test/resources : src/main/test관련 설정 파일
  • 5) src/main/webapp/WEB-INF/views : views는 jsp, html파일이 있는 곳
  • 6) pom.xml : 라이브러리 의존성 관리
  • 7) src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml : 웹과 관련된 설정 파일(해당 요청에 따른 controller로 이동할 수 있는 sevlet mapping등 / 잘 모르면 jsp공부 더 하기) / (경로 설정, 문자열을 리턴할때 prefix는 문자열 앞에 suffix는 문자열 뒤에 자동으로 붙는다.)
  • 8) src/main/webapp/WEB-INF/spring/root-context.xml : applicationcontext라는 객체가 의존성 주입을 하는데 개발자가 해당 객체를 spring에 올려주어야 applicationcontext가 해당 객체를 인식해서 사용한다. ==>스프링 객체 관련 설정 파일(bean을 등록하면 bean그래프를 보고 설정되어 있는 것을 볼 수 있다.)
profile
프로그래밍 공부

0개의 댓글