[프로젝트를 만들어서 깃에 올리는 사람 입장]
(0) 깃에 워크스페이스가 아닌 프로젝트를 올린다.
- 팀원 중 한명만 프로젝트를 올리고 다른사람을 초대할 수 있다.
- 다른 팀원들은 모두 다 워크스페이스를 각자 만들어야 한다. 워크스페이스 세팅도 각자 해야 한다.
- 워크스페이스 세팅, 서버세팅은 다 각자해야 한다.
- 프로젝트는 한명이 만든다. 프로젝트 이름은 팀명을 따서 각 팀별로 다르게 만든다.
- 스프링 부트 프로젝트다. STS4, 스프링 부트 버전 3.2.11, 자바 17버전을 사용한다.
(1) C:\workspaces에 final-workspace 폴더를 만든다.
(2) sts4로 워크스페이스를 C:\workspaces\final-workspace로 선택하고 실행한다.
- 이러면 C:\workspaces\final-workspace에 ".metadata" 폴더가 만들어진다.
(3-1) 워크스페이스 세팅 - UTF-8 인코딩
- window - preferences - general - workspace에서 UTF-8로 설정
- window - preferences - Web - CSS files, HTML files, JSP Files의 인코딩을 제일 위에 있는 "ISO 10646/UNICODE(UTF-8)"로 설정. ("enco"를 검색)
- window - preferences - XML - XML Files 의 인코딩을 제일 위에 있는 "ISO 10646/UNICODE(UTF-8)"로 설정.
- window - preferences - general - editors - text editors - spelling - Encoding에서 Default (UTF-8) 체크. ("spelling" 검색)
(3-2) 워크스페이스 세팅 - 폰트 설정
- general - appeance - colors and fonts - basic 확장 - text font 선택하고 오른쪽에서 Edit.. 누르고 D2CODING 선택하고 확인.
(3-3) 워크스페이스 세팅 - tab size 설정
- window - preferences - general - editors - text editors에서 Displayed tab width를 4에서 2로 바꾼다. (tab 검색)
(3-4) 워크스페이스 세팅 - java code templates 설정
- window - preferences - java - code style - code templates 에서 'Code' 눌러서 method body, catch block body에서 주석 지운다.
(3-5) 워크스페이스 세팅 - JSP Files templates 설정
- window - preferences - Web - JSP Files - Editor - Templates - 'New JSP File (html 5)'를 선택해서 Edit..을 누른다.
- 페이지 지시어 아래에 아래 두 줄을 추가한다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="$${pageContext.request.contextPath}" />
(3-6) 워크스페이스 세팅 - xml파일 주석에 빨간줄 안뜨게
- window - preferences - XML(Wild Web Devloper)에서 Download external resources like referenced DTD, XSD를 체크한다.
(3-7) 워크스페이스 세팅 - 주석에 빨간줄 안뜨게
- window - preferences - general - editors - text editors - spelling에서 제일 위의 Enable spell checking을 체크 해제한다.
(3-8) 워크스페이스 세팅 - xml catalog 등록
- window - preferences - xml - xml catalog - user specified entries 등록
- config 파일용 Location에 http://mybatis.org/dtd/mybatis-3-config.dtd
- config 파일용 Key에 -//mybatis.org//DTD Config 3.0//EN
- mapper 파일용 http://mybatis.org/dtd/mybatis-3-mapper.dtd
- mapper 파일용 -//mybatis.org//DTD Mapper 3.0//EN
(4) 서버세팅
- 스프링 부트는 내장 서버(아파치 톰캣 10)가 있다. 그래서 서버 세팅을 할 필요가 없다.
- 포트번호는 스프링 부트 프로젝트를 만들고 나서 application.properties에서 수정한다.
(5) new 했을 때 뜨는 목록 설정
- window - perspective - customize perspective - shortcuts 탭에서 설정한다.
- General에서 File, Folder 체크.
- Java에서 Class, Interface, Package, Source Folder 체크.
- Maven은 체크 해제.
- Spring Boot에서 Spring Starter Project 체크.
- Web에서 JSP File 체크. CSS File은 해도 되고 안해도 된다.
- XML에서 XML File 체크.
(6) 새로운 Spring Starter Project 생성
- 패키지 익스플로러의 Create new Spring Starter Project를 클릭한다.
- name은 xxxx (프로젝트 이름)
- Type은 Maven (빌드도구 선택)
- packaging은 War (개발끝나고 배포할때 압축시킬 파일의 타입)
- Languagae는 Java
- Java Version은 17 (17이상만 있다)
- GroupId는 com.br
- ArtifactId는 xxxx
- Package는 com.br.xxxx
- Description은 설명이다. 수정해도 되고 그래도 둬도 된다. 그냥 둔다.
- 하단의 next.
- 스프링 부트 버전은 3.2.11 버전을 선택한다.
- lombok 검색 -> Lombok 체크
- devtools 검색 -> Spring Boot DevTools 체크
- spring web 검색 -> Spring Web 체크
- 하단의 finish.
(7) 생성된 프로젝트 구조 확인
- 위와 같이 만들어진다.
- src/main/java : java파일 (소스코드 작업)
- src/main/resources : 로그 설정문서, 마이바티스 관련 문서
- src/main/resources/static : 정적 자원 (이미지, js, css파일들)
- src/main/webapp/WEB-INF/views : jsp파일 (화면 작업)
- 위는 수업때 한 boot 프로젝트의 최종 구조(참고용).
(8) pom.xml 수정
- 기존 프로젝트의 pom.xml을 작업탐색기에서 복사해서 붙여넣기 했다. 이 프로젝트의 pom.xml은 지웠다.
- pom.xml을 다른데서 가져온다면 groupId, artifactId, name을 수정해야 한다.
(9) application.properties 수정
- 기존 프로젝트의 application.properties 파일 자체를 복사해서 가져오지 않고,
현재 프로젝트의 application.properties 파일에 구문만 추가한다.
(파일을 가져오면 utf-8로 저장이 안돼서 주석이 깨져보인다)
- 맨 위의 spring.application.name=gdcampus 아래에 기존 프로젝트에서 썼던 구문들을 복붙했다.
- [사용할 포트번호 수정]으로 9999를 했다. 8080은 오라클이 쓰고, 8888은 수업 때 만든 부트 프로젝트가 쓰고 있었다.
- [연결 db 정보 관련 구문 등록]에서 위 4줄은 내 pc의 로컬 db에 연결할 때 구문이다.
아래 4줄은 학원 db 서버(13.125.128.181)에 접속할 때의 구문이다.
- [연결 db 정보 관련 구문 등록]에서 spring.datasource.hikari.maximum-pool-size=1를 추가해야 한다.
커넥션풀에 제한을 주지 않으면 db서버가 뻗어버린다.
- [마이바티스 관련 구문 등록]에서 mybatis.type-aliases-package=com.br.boot.dto로 되어있는 걸
=com.br.gdcampus로 수정한다.
- Save Problems 오류 창이 뜬다면 Save as UTF-8을 누르면 된다.
(10) 서버 start
- 서버를 start하고 오류가 없는지 확인한다. 오류가 없어야 한다.
- 오류가 발생한다면 Project - Clean, Maven - Update Project를 하면 정상 구동된다.
===========================================================
(11) src/main/webapp/WEB-INF/views 폴더 생성
- WEB-INF 폴더와 그 하위 폴더인 views 폴더를 따로 만들어줘야 한다.
(11-2) migration이라면 기존 spring legacy project에서 views와 resources 가져온다.
- spring legacy project에서 src/main/webapp/WEB-INF/views 폴더 안의 폴더들과 main.jsp를 복사한다.
STS4 패키지 익스플로러의 src/main/webapp/WEB-INF/views에 붙여넣기 한다.
- spring legacy project에서 src/main/webapp/resources 폴더 안의 images와 js 폴더를 복사한다.
STS4 패키지 익스플로러의 src/main/resources/static에 붙여넣기 한다.
(12) src/main/webapp/WEB-INF/views에 main.jsp 생성
(13) src/main/webapp/WEB-INF/views에 common 폴더 생성
(14) src/main/webapp/WEB-INF/views/common에 header.jsp 생성
- <a href="${contextPath}"><img src="${ contextPath }/resources/images/goodee_logo.png" width="100px"></a>
기존의 스프링 레거시 프로젝트에서는 이렇게 작성되어 있었다.
- <a href="${contextPath == '' ? '/' : contextPath}"><img src="${ contextPath }/resources/images/goodee_logo.png" width="100px"></a>
이렇게 contextPath를 수정했다. 이러면 로고 이미지 클릭시 메인페이지로 이동된다.
(스프링 부트에서는 기본적으로 context path가 빈문자열이다)
- <a href="${contextPath == '' ? '/' : contextPath}"><img src="${contextPath}/images/goodee_logo.png" width="100px"> </a>
이렇게 img의 src 경로를 수정(정적자원 디렉토리 경로 재설정)하면
스프링 부트 프로젝트의 src/main/resources/static/images 폴더 안의 goodee_logo.png 이미지가 보여진다.
(15) src/main/webapp/WEB-INF/views/common에 footer.jsp 생성
(16) src/main/webapp/WEB-INF/views/common에 error.jsp 생성
(17) src/main/java에 com.br.gdcampus.controller 패키지 생성
(18) com.br.gdcampus.controller에 MvcController 생성
(19) 서버 start
- localhost:9999를 입력해서 메인페이지가 잘 뜨는지 확인한다.
- application.properties에 뷰 리졸버의 prefix와 suffix를 설정했기 때문에 MvcController에서 main을 리턴하면 /WEB-INF/views/main.jsp가 떠야 한다.
- 왼쪽 위 로고 이미지는 깨져보인다.
정적 자원들을 src/main/resources/static 폴더에 가져다 놨는데도 못찾고 있다.
- static 폴더에 가져다 놨는데도 이미지를 못 찾고 있는 이유는 스프링에서 가져온 header.jsp는 이미지 경로를 resources라는 경로로부터 찾고 있다.
- spring legacy project할 때는 src/main/webapp 폴더 안에 resources 폴더가 있었다. (resources 안에 images 폴더)
스프링 부트 프로젝트는 소스폴더인 src/main/resources안에 static 폴더가 있다. (static 안에 image 폴더)
- migration을 할 때 정적자원 경로를 재설정 해야 한다. (정적 자원 디렉토리 등록)
근데 일일이 찾아가서 바꾸기 번거로우니 한번에 어떤 요청이 왔을때 어떠한 곳으로 보내게 한다.
(20) com.br.spring.config 패키지 생성
- 설정에 필요한 클래스가 있을 수 있다. 그걸 config 패키지에 둘 예정이다.
(21) com.br.spring.config에 WebMvcConfig (일반) 클래스 생성
- 일단 리소스 핸들링 하는 메소드만 작성한다.
- 인터셉터는 나중에 할 때 추가한다.
- upload 관련은 https://moca7.tistory.com/335 마지막 부분 참조.
(22) 서버 start
- localhost:9999를 요청하면 메인 페이지가 뜬다. 로고 이미지도 잘 뜬다.
====================================================================
(23) 패키지 생성 & 쓰레기 파일 추가
- com.br.gdcampus.config (위에서 만듦)
- com.br.gdcampus.controller (위에서 만듦)
- com.br.gdcampus.dao
- com.br.gdcampus.dto
- com.br.gdcampus.handler
- com.br.gdcampus.interceptor
- com.br.gdcampus.scheduler
- com.br.gdcampus.service
- com.br.gdcampus.util
- 깃은 폴더가 아닌 파일 단위로 관리되기 때문에 폴더만 만들어 놓고 파일이 없으면 깃에 올라가지 않는다.
각 패키지에 쓰레기 파일을 추가한다.
(24) src/main/webapp/WEB-INF/views에 board, member 등의 폴더를 추가한다.
- 화면구현 페이지들을 보관하는 폴더다. 각각 쓰레기 파일도 추가한다.
(25) gitignore 추가
- 스프링 부트 프로젝트를 깃으로 올릴때는 application.properties 파일도 올려야 된다.
- 스프링 때의 gitignore 문서에서 *.properties는 없애거나 주석처리(앞에 # 붙이면 주석처리)한다.
- 깃에 워크스페이스가 아닌 프로젝트 폴더를 올릴 것이기 때문에
수업 때와 달리 워크스페이스 폴더가 아닌 프로젝트 폴더에 gitignore를 둬야 한다.
- 그런데 이미 프로젝트 폴더에 gitignore가 있다.
STS4에서 기본 설정으로 Spring Boot 프로젝트를 생성하면 프로젝트 폴더 안에 .gitignore 파일이 자동으로 생성된다.
이미 있는 .gitignore 파일을 수정한다.
(26) git에 올리기
- 깃에 워크스페이스(C:\workspaces\final-workspace)가 아니라
프로젝트(C:\workspaces\final-workspace\gdcampus) 만 올린다.
- 깃허브 데스크탑을 연다.
file - new repository - local path를 choose 눌러서 c:\worksapces\final-workspace를 선택하면
로컬 패스가 c:\worksapces\final-workspace가 보여진다.
(올리고자 하는 폴더의 한 단계 상위폴더를 선택한다.)
- 그리고 Name에 semiProject, vita, gdcampus 등의 올리고자하는 폴더 이름(프로젝트명)을 적는다.
- readMe 파일을 체크한다.
- create repository 한다. 이런다고 끝이 아니고 publish repository까지 해야 끝난다.
(이때 private으로 체크해도 초대하면 다른사람들이 내가 올린 repository에 접근할 수 있다)
(27) 팀원 초대보내는 법
- 깃허브 홈페이지에서 your repository - 초대를 보내고자 하는 repository에 들어가서
깃허브 상단 메뉴 중 settings - access의 collaborator - add people - 닉네임을 입력해서 선택하면 메일이 발송된다.
- 초대를 받은 사람은 private이어도 repostiory에 접근이 가능하다.
====================================================================
* migration 작업 - BCryptPasswordEncoder 빈 등록
1. 라이브러리 등록 : pom.xml
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
2. BCryptPasswordEncoder 빈 등록
1) Spring Security 설정 관련 클래스 만들기 : com.br.boot.config.SecurityConfig
2) 해당 클래스에 @Configuration 작성
3) @Bean 으로 BCryptPasswordEncoder 빈 등록
---------------------------------------------------------------
* migration 작업 - MyBatis, logback, log4jdbc
1. OrcleDriver, MyBatis starter 라이브러리 등록
1) 프로젝트 우클릭 > Spring > Add Starters 선택후 dependency 선택
ㄴ Oracle Driver (SQL 안)
ㄴ MyBatis Framework (SQL 안)
2. mybatis 기존 mapper 파일 가져다 두기 : src/main/resources/mybatis/mappers/
3. db 연결 정보 등록 : application.properties
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:oracle:thin:@localhost:1521:xe
spring.datasource.username=spring
spring.datasource.password=spring
4. mybatis 관련 구문 등록 : application.properties
mybatis.mapper-locations=mybatis/mappers/*.xml
mybatis.type-aliases-package=com.br.boot.dto
mybatis.configuration.jdbc-type-for-null=NULL
5. log4jdbc 라이브러리 추가 : pom.xml
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
6. logback, log4jdbc 기존 파일 복사해오기 : src/main/resources/
logback.xml 파일 패키지 수정
---------------------------------------------------------------
* migration 작업 - 파일업로드 (별도의 라이브러리 등록 필요 없음)
1. MultipartResolver 관련 등록 구문 : application.properties
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=100MB
2. FileUtil 클래스에 fileupload 메소드 안에 업로드 폴더 경로 수정
File filePathDir = new File("C:" + filePath);
---------------------------------------------------------------
* migration 작업 - Interceptor
1. 기존 프로젝트의 interceptor 클래스 복사
2. 해당 interceptor 클래스 빈으로 등록 (@Component)
3. 인터셉터 등록 : WebMvcConfig
1) Interceptor 객체 DI
2) addInterceptors 메소드 오버라이딩 후 아래 내용 작성
registry.addInterceptor(실행시킬Interceptor객체)
.addPathPatterns("url mapping값")
.addPathPatterns("url mapping값");
4. contextPath 이슈
- Interceptor 클래스에 contextPath로 리다렉트 구문 작성시
contextPath가 빈 문자열일 경우 이슈 발생 (제대로 redirect 되지 않음)
=> response.sendRedirect(request.getContextPath().equals("") ? "/"
: request.getContextPath()); 로 수정
---------------------------------------------------------------
* migration 작업 - Scheduler
1. 기존 프로젝트에서 Scheduler 클래스 복사
2. 해당 클래스 빈으로 등록 (@Component)
3. 스케줄링 활성화 : com.br.boot.BootApplication
@EnableScheduling 추가
---------------------------------------------------------------
* migration 작업 - WebSocket
1. 라이브러리 등록
1) 프로젝트 우클릭 > Spring > Add Starters
2) WebSocket (Messaging 안) dependency 추가
2. 기존 프로젝트 EchoHandler 클래스 복사
3. 해당 클래스 빈 등록 (@Component)
4. websocket 핸들러 등록
1) websocket 설정을 위한 클래스 만들기 : com.br.boot.config.WebSocketConfig
2) WebSocketConfigurer 구현 클래스로 만들기 : implements WebSocketConfigurer
3) EchoHandler 객체 DI
4) HttpSessionHandshakeInterceptor 빈으로 등록
5) registerWebSocketHandlers 오버라이딩 한 후 하단 구문 작성
registry.addHandler(구동시킬EchoHandler객체, "웹소켓연결을위한url")
.addInterceptors(httpSessionHandshakeInterceptor())
.withSockJS();
ㅁ
- market place에서 web 검색해서 설치, 롬복 라이브러리 추가하고 실제 파일 있는데 가서 실행시켜서 sts나 이클립스에 설치하는건 1번만 하면 된다.
'프로젝트 > 파이널프로젝트-대학 행정 그룹웨어' 카테고리의 다른 글
[문제] 예약 내역에서 비품이 안 보임 (0) | 2024.11.27 |
---|---|
[문제] 나갔다 들어오면 채팅이 안보임 (0) | 2024.11.19 |
[문제] 1대1 채팅방 상대의 사번이 보이지 않고 내 사번이 보임 (0) | 2024.11.14 |
파이널 프로젝트 받아오기 (0) | 2024.11.08 |
Spring Boot 프로젝트에 Swagger 적용하기 (1) | 2024.11.07 |