이틀간 삽질한거에 대해서 적어보려고 한다..
본 포스팅은
Tomcat Jsp호스팅(비즈니스형 결제)
Intelij IDEA 환경에서 진행되었다
프로젝트 생성
Spring Boot버전은 크게 상관없고 빨간색 네모 해둔것만 일단 그대로 따라서 만들어주자
반드시 War에 Java8를 선택해주자
전부 세팅했으면 GENERATE를 누르고 저장 후 압축을 풀어주자
Cafe24 Tomcat Jsp 페이지에 들어가게 되면 버전이 명시되어있다.
기존에 쓰던 문법이 맞고 로컬에서 잘 돌아가는데 서버에서 에러가 난다면
해당 문법이 해당 버전에 지원되는지 확인해보자
테스트 페이지 작성
이제 Intellij IDEA를 통해 호스팅이 잘되는지 확인해볼 간단한 테스트 페이지를 작성해보자
다음과 같이 controller, model패키지를 생성해주고
Maincontroller.class, User.class, welcome.html 파일을 생성해준다
User
package com.example.demo.model;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class User {
private Long id;
private String uid;
private String pw;
}
Maincontroller
package com.example.demo.controller;
import com.example.demo.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/")
public class Maincontroller {
@GetMapping("")
public String welcomePage(Model model) {
List<User> userList = new ArrayList<>();
for(int i = 1; i <= 5; i++) {
User user = new User();
user.setId((long) i);
user.setUid("Hello");
user.setPw("World");
userList.add(user);
}
model.addAttribute(userList);
return "welcome";
}
}
간단하게 welcome페이지에 유저리스트를 넘겨주는 로직이다
welcome.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Welcome!!</h1>
<table>
<tr th:each="user: ${userList}">
<td th:text="${user.id}"></td>
<td th:text="${user.uid}"></td>
<td th:text="${user.pw}"></td>
</tr>
</table>
</body>
</html>
전부 복붙했으면 이제 로컬에서 제대로 실행되는지 확인해보자
war파일 만들기
artifact 세팅을 해주기 위해 File - Project Structure를 눌러준다(단축키 Ctrl + Shift + Alt + S)
artifact하나 생성해준다
artifact name을 ROOT로 수정해준다.
이제 artifact를 생성해보자
artifact를 생성하기전에 프로젝트 build하고 생성하는것을 잊지말자
Build Artifacts누르면 다음과같이 뜰텐데 우리가 만들어둔 아티팩트를 ROOT - Build해주자
정상적으로 따라왔으면 다음과같은 경로에 ROOT.war이 생성된것을 확인할 수 있다.
참고: war파일 압축을 해제하고 싶다면 터미널에서
"jar xvf <war파일이름>"을 해주면 된다
여기까지 했다면 배포준비 완료이다.
배포해보기
구매한 호스팅관리페이지에서 서비스접속정보에들어 가면 다음과같이 FTP와 DB에 대한 설명이 쓰여져 있다.
따로 건드린게 없다면 다음과 같다
FTP아이디 - cafe24 id, FTP비밀번호 - 호스팅서버구매시 적었던 비밀번호
DB아이디 - cafe24 id, DB비밀번호 - 호스팅서버구매시 적었던 비밀번호
본인이 사용하는 도메인이 있다면 연결해주고 없다면 카페24 무료 도메인으로 만들어서 대표도메인으로 설정해주자
해당 도메인으로 cafe24에서 호스팅하는 서버IP에 요청이 가는것이니 제대로 대표 도메인으로 접속이 되나 확인해보자
대표도메인으로 들어가보면 아직 아무것도 세팅하지 않은상태라 기본페이지가 뜬다.
본인이 사용하는 도메인으로 등록하고 이렇게 뜬다면 정상적으로 도메인 등록이 된것이다.
이제 본격적으로 war파일을 배포해보자
두 사이트에 들어가서 putty와 filezilla client를 다운받아 설치해준다
먼저 파일질라로 방금 만든 서버와 연결해보자
연결할일이 자주 있을테니 다음과같이 적어준다
호스트 - 웹으로 접속했던 대표 도메인
사용자 - cafe24 ID
비밀번호 - 도메인 등록시 설정한 PW
제대로 연결이 되지 않는다면 호스팅 관리자페이지에서 FTP비밀번호를 바꿔보거나, 호스트를 제대로 작성했는지 확인해보자
맨처음에 사용자 홈폴더로 시작될텐데 tomcat - webapps을 눌러서 저 세가지 폴더 있는곳으로 위치를 옮겨준다
만들었던 war파일을 drag&drop으로 업로드한다
업로드시 자동으로 ROOT.war을 unpack해준다. ROOT폴더에 들어가면 우리가 만든 프로젝트 elements를 볼 수 있다.
이제 putty에 들어가서 SSH접속할 도메인을 적고 open을 누른다
터미널이 생길텐데
아이디- cafe24 ID
비밀번호 - 도메인 등록시 설정한 PW
입력해주면 제대로 들어가질것이다.
다음과 같은 방식으로 두개의 터미널을 켜주자
1번터미널로는 제대로 실행되는지 로그를 확인할겁니다
저같은 경우는 사전에 했던 로그가 남아있어서 이렇게 출력됩니다
cd tomcat/logs
tail -f catalina.out
2번터미널에서는 tomcat 서비스를 실행합니다
cd tomcat/bin
./shutdown.sh
./startup.sh
두번째 명령어에서 tomcat서비스를 껐다키면 첫번째 터미널에서 실행로그가 출력됩니다
우리가 Intelij IDEA에서 실행할때 나오는 로그도 나오니 에러확인을 첫번째 터미널에서 확인하면 됩니다.
프로젝트가 제대로 실행되고 Excetion이나 Error가 없는지 확인해봅시다
대표도메인으로 들어가보면 다음과같이 우리가 배포한게 제대로 되었는지 확인 할 수 있습니다.
여기까지 했는데 제대로 안된다하면 혹시 https로 접속하고 있는지 확인해보자.
크롬에서 http로 접속하면 https로 리다이렉트해서 접속하는 경우가 있다.
SSL인증서를 등록했을경우 괜찮지만, 따로 등록한적 없다면 http로 접속해야된다
여기까지 잘왔다면 이제 JPA를 추가해서 Mariadb와 연결해보자
JPA 작동 및 DB연결확인 테스트페이지 작성
간단한 JPA작동을 확인하기 위한 UserRepo 인터페이스를 생성해주고
build.gradle파일에 jpa와 mariadb connector를 추가해준다
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client:2.7.4'
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
수정이 끝났다면 오른쪽 위에 뜨는 생쥐를 눌러서 Load gradle Change해준다
User
package com.example.demo.model;
import lombok.Getter;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Getter
@Setter
@Entity(name = "User")
public class User {
@Id @GeneratedValue
private Long id;
private String uid;
private String pw;
}
UserRepo
package com.example.demo.repo;
import com.example.demo.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserRepo extends JpaRepository<User, Long> {
User save(User user);
List<User> findAll();
}
MainController
package com.example.demo.controller;
import com.example.demo.model.User;
import com.example.demo.repo.UserRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/")
public class Maincontroller {
private UserRepo userRepo;
@Autowired
public Maincontroller(UserRepo userRepo) {
this.userRepo = userRepo;
}
@GetMapping("")
public String welcomePage(Model model) {
User user = new User();
user.setUid("Hello");
user.setPw("World");
userRepo.save(user);
List<User> userList = userRepo.findAll();
model.addAttribute(userList);
return "welcome";
}
}
application.properties
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/marinelife?serverTimezone=UTC&characterEncoding=UTF-8&createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
이제 제대로 실행되는지 확인해보자
이전에 만든 테스트 페이지와 달라진게 있다면, F5를 누를때마다 새로운 유저가 추가될 것이다.
이제 로컬에서 cafe24 MariaDB와 제대로 연결되어 작동되는지 확인해보자
호스팅 관리페이지에서 서비스 사용현황 - MySQL 외부 IP를 설정해준다.
해당 사이트에서 본인의 IP를 확인할수 있다.
본인이 공유기를 통해서 작업중이라면 포트포워딩도 해주자
공유기마다 기종이 다르니 공유기 설정에 접속하는 방법은 따로 구글링을 해보고 NAT 설정에서 해줄수 있다
이제 application.properties에 mariadb url과 아이디 비번을 cafe24꺼로 바꿔주자
application.properties
spring.datasource.driver-class-name = org.mariadb.jdbc.Driver
# spring.datasource.url = jdbc:mariadb://localhost:3306/marinelife?serverTimezone=UTC&characterEncoding=UTF-8&createDatabaseIfNotExist=true
spring.datasource.url = jdbc:mariadb://<cafe24 ID>.cafe24.com:3306/<cafe24 ID>?serverTimezone=UTC&characterEncoding=UTF-8&createDatabaseIfNotExist=true
spring.datasource.username = <cafe24 ID>
spring.datasource.password = <도메인 등록시 적은 비밀번호>
spring.jpa.hibernate.ddl-auto = update
제대로 되는지 확인됐다면 본 어플리케이션은 cafe24에 mariadb에서도 잘돌아간다는게 확인된것이다.
배포시에는 localhost로 다시 바꿔줘야한다
application.properties
spring.datasource.driver-class-name = org.mariadb.jdbc.Driver
spring.datasource.url = jdbc:mariadb://localhost:3306/<cafe24 ID>?serverTimezone=UTC&characterEncoding=UTF-8&createDatabaseIfNotExist=true
spring.datasource.username = <cafe24 ID>
spring.datasource.password = <도메인 등록시 적은 비밀번호>
spring.jpa.hibernate.ddl-auto = update
이제 이전했던 방식으로 아티팩트에서 War파일을 생성하고, 기존에 있던 ROOT.war삭제후 filezila로 배포, 톰캣서비스를 다시 실행시킨다.
에러 없이 잘 실행되면 성공... 안되면 열심히 에러를 고쳐보길바란다.
https로 접속시 접속이 안된다는거 또한 주의하길바란다(필자가 이거로 삽질 엄청했다)
지금까지 간단한 예제와 함께 cafe24 tomcat jsp환경에서 spring boot + jpa + mariadb 배포하는법을 알아보았다.
이글을 보고 삽질하던분들이 빨리 배포문제를 해결하길 바란다
'웹' 카테고리의 다른 글
텍스트 밑줄 커스터마이징 (0) | 2021.11.02 |
---|---|
png 이미지 아이콘 파일 수정하지 않고 css로 색깔 변경하기 (1) | 2021.10.24 |
파일 업로드 폼 만들기 & 업로드한 파일 삭제 구현 (0) | 2021.05.27 |
css 초기화 하는 방법 (0) | 2021.04.26 |