강의 사이트 만들기

가비아 컨테이너 호스팅, PuTTY 설치, Spring 프로젝트 초기 설정

계란💕 2023. 8. 7. 22:47

프롤로그

  • 게임 강의(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로 어떤 서버에 최초 접속 시,서버의 신뢰여부를 묻는 알림창


가비아에서 SSH key 이용이 가능할까? 

일반 로그인
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)


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