프롤로그
- 게임 강의(C, C++, Unreal, DirectX) 관련된 강의 자료 홈페이지를 만들려고 한다.
- 인프런과 유튜브에서 활동 중인 얄코 강사님처럼 동영상 강의는 인프런에 올리고 강의 자료를 별도로 올릴 수 있는 웹 페이지를 기획하고 있다.
- gabia로 몇 달 운영해보고 AWS로 바꿀 예정이다.
- 이번 포스팅에서는 가비아 호스팅 서비스 구독, DB 연결, spring 프로젝트 셋업 등을 다루려고 한다.
- 들어가기에 앞서 호스팅 관련 기본 개념(SSH, SFTP 같은 프로토콜)을 알아봤다.
SFTP(Secure File Transfer Protocal)
- 파일 전송을 위해 사용되는 프로토콜 중 하나이다.
- 클라이언트와 서버 간 안전한 파일 전송을 가능하게 해주는 프로토콜이다.
- 클라이언트가 SFTP 클라이언트 소프트웨어를 사용해서 서버에 접속하고 서버에 있는 파일을 업로드하거나 다운 가능하다.
- SFTP는 SSH(Secure SHell, 네트워크를 통해 안전한 원격 접속을 제공하는 프로토콜) 프로토콜 위에서 동작하는 파일 전송 프로토콜 중 하나이다.
- 기본적으로 22번 port
- FTP와는 달리 암호화해서 데이터 전송하기 때문에 안전하다.
- 중요한 파일 전송에 주로 사용되며 서버 관리, 원격 접속 파일 전송 등 다양한 용도로 활용된다.
- Putty를 이용하면 윈도우를 사용 중인 컴퓨터에서 리눅스 기반의 다른 컴퓨터에 원격 접속할 수 있다. SSH(보안 셸) 프로토콜을 이용해서 원격 접속을 지원한다.
- FTP(File Transfer Protocol)
- FTP는 암호화되지 않은 평문 데이터를 전송하기 때문에 보안성이 떨어진다.
- FTP: 기본적으로 21번 port
- 보안이 크게 중요하지 않은 파일 전송에 사용된다.
- Ex) 공용 파일 서버나 익명의 사용자들에게 파일을 제공하는 서비스에 활용된다.
- DFTP와 FTP의 공통점
- 파일 전송을 위한 프로토콜이다.
- 플랫폼에 독립적이므로 모든 OS에서 사용 가능하다.
가비아 컨테이너 호스팅
- gabia 컨테이너 호스팅
- Java basic 버전 (9,500원 / 월),
- (도메인이 없으면 초기 설치비용 30,000원 추가적으로 필요하나 이미 구입한 도메인이 있다면 초기 설치비용 10,000원이다.)
- version 및 사양
- Java 11
- MySQL 8.0 (PostgreSQL과 MySQL 중 선택 가능)
- 메모리 1GB
웹 호스팅 설치 후 화면
- 기본 도메인으로 접속하면 구축이 안 되어있어서 다음과 같은 창이 뜬다.
PuTTY 설치 및 SSH key 생성
- 지금 윈도우 기반의 PC를 사용 중이다.
- 따라서, 윈도우 PC에서 (가비아로 부터 대여한) Linux 기반의 서버로 원격 접속 하려면 SSH 접속 프로그램을 통해 가능하다.
- PuTTY를 이용하면 원격 접속할 수 있다. SSH(보안 셸) 프로토콜을 이용해서 원격 접속을 지원한다.
- 가비아를 통해 생성된 IP 주소, ID, password를 입력해서 접속한다.
- PuTTY를 실행해서 생성된 IP에 접속한다.
- PuTTY 홈페이지
- MSI (‘Windows Installer’) 64-bit x86, putty.gen 64-bit x86 다운
(참고) 가비아 컨테이너 호스팅의 경우, SSH key를 이용한 로그인이 불가능하다.
SSH key 생성 방법
- SSH key가 있으면 공인인증서 역할을 한다.
- 따라서, 원격으로 접속할 때 매번 ID, password를 입력할 필요 없고 저장된 값으로 로그인할 수 있다.
- (자동 로그인 기능과 유사함)
- PuTTY genetator exe 파일을 실행하면 다음 창이 뜬다.
- 기본값으로 RSA 선택되어 있다.
- generate 클릭
- key 생성이 완료된 화면
- 아래 화면에서 "save private key"를 눌러서 원하는 위치에 파일을 저장한다.
- PuTTY 설정 화면의 Auth 탭에서 생성한 ppk 파일을 넣어준다.
- 그 다음 아래와 같이 IP 주소를 넣고 save
- 원격 접속 첫 화면
- accept
가비아에서 SSH key 이용이 가능할까?
- 오류
- 정상 실행으로 보이지만 세 번째 줄에 서버에서 공개키를 이용한 signature를 거절했다는 에러가 보인다.
- server refused public-key signature despite accepting key
- 원인: 문의해본 결과, 가비아는 ssh key 를 이용한 로그인 방식을 지원하지 않는다.
- 해결
- 매번 접속 할 때마다 로그인 정보를 입력해야한다.
- 따라서, 굳이 ssh key를 등록할 필요 없다.
원격 접속 에러
- 오류
- putty fatal error
- remote side unexpectedly closed network connection
- ID를 입력했지만 네트워크 연결이 되지 않았다.
- 원인: 가비아 관리 콘솔에서 접속 허용 IP를 추가해두지 않았다.
원격 접속 후
- 명령어를 입력해서 가비아를 통해 연결된 새로운 컴퓨터에 java 버전과 spring 버전을 확인 가능하다.
cf)
- Host name 변경방법& 배포방법 https://yooooonnf.tistory.com/7
Spring Boot 프로젝트 생성
- spring init --list
- 스프링 부트의 기본 설정을 확인할 수 있다.
- 지원하는 디펜던시 목록이 나온다.
데이터베이스 연결
- 가비아 관리 콘솔과 데이터베이스 연결 정보
- host: IP 주소
- Username: 접속 ID
- Database는 데이터베이스명이다. 이미 가비아에서 "db" + ID 를 기본값으로 데이터베이스 이름을 만들어준다.
- port는 3306이 기본값
ERD (작업 중)
- 회원
- 일반 로그인 + oauth2.0 (구글 네이버 카카오톡)
- cf) 강의에 결제, QnA 같은 부분은 인프런에서 이뤄질 예정이라 주문, 결제, 쿠폰 같은 테이블이 필요 없다.
- 회원 - 강의 중간 테이블
- 회원 ID, 강의 ID를 복합키로 가진다.
- 수강 시작일
- 수강 종료일
- 강의
- 강의 정보에 대한 내용
- (로그인 이력 테이블)
spring 프로젝트 셋업
- Java 11
- Spring boot 2.7.14 (자바 11 버전에 )
- Dependency List
- lombok
- Spring data JPA
- Spring Security
- JWT
- querydsl
- JDBC
- elastic search
- mysql
- Redis
- oauth 2.0
- web starter
- spring boot devtools
- ===추가 예정===
- swagger
import
- 위와 같이 세팅한 프로젝트를 빌드하자마자 바로 실행하면 DB 정보를 설정하지 않아서 오류가 난다.
<hide/>
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
Reason: Failed to determine a suitable driver class
Action:
Consider the following:
If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
If you have database settings to be loaded from a particular profile you may need to activate it (no profiles are currently active).
Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.
You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.
- yml 파일에 다음과 같이 db 정보를 넣어줘야한다.
<hide/>
spring:
application:
name:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://"IP 주소":3306/"데이터베이스명"
username:
password:
- 리눅스 명령어 (작업 예정)
<hide/>
spring init --dependencies=web,lombok,spring-data-jpa,security,jwt,querydsl,jdbc,elasticsearch,mysql,redis,oauth2,devtools --java-version=11 --type=gradle-project springgradle
To do List
- ERD 클라우드 마무리
- API 명세서 노션 작업
- SSH key 발급
찾아보기
- 일반 로그인, oauth 로그인 회원 ex) 티빙 처럼 최근에 뭘로 로그인했는지 태그로 표시 기능
title
- con
- con
'강의 사이트 만들기' 카테고리의 다른 글
Spring 애플리케이션을 원격으로 전송하기 (1) | 2023.10.14 |
---|---|
ubuntu 방화벽 설정 방법(ufw)과 MySQL 접속 및 주의사항 (0) | 2023.10.14 |
원격 서버(ubuntu)에 Java 설치, MySQL 서버 구축 (0) | 2023.09.20 |
Vue.js 3 프로젝트 세팅, VO / Entity / DTO 차이점 (0) | 2023.08.15 |
ERD, querydsl 세팅 (0) | 2023.08.08 |