[NCloud 1기] 클라우드 서버에 Spring Boot 백엔드 서버 올리기 (with PuTTY & WinSCP & SSL VPN)
이번 글은 네이버클라우드 플랫폼(NCP)의 비공인 IP만 가진 WAS 서버에 Spring Boot 백엔드를 올리고 실행한 과정을 기록한 것이다.
WEB 서버처럼 공인 IP가 있는 서버라면 브라우저에서 바로 접속해서 확인할 수 있지만,
이번에는 WAS 서버가 비공인 IP(10.0.0.6)만 가지고 있다는 점이 핵심이다.
그래서 다음 순서로 작업했다.
- 로컬에서 Spring Boot 애플리케이션 빌드
- NCP에서 WAS 서버와 SSL VPN 생성
- SSL VPN으로 VPC 내부로 진입
- WinSCP로 WAS(10.0.0.6)에 접속해 JAR 업로드
- PuTTY로 같은 비공인 IP에 SSH 접속
- WAS에 Java 17 설치 후 JAR 백그라운드 실행
- curl 명령으로 /hello API 응답 확인
1. 로컬에서 Spring Boot 프로젝트 빌드
1-1. 예제 코드
DemoApplication.java
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
HelloController.java
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "Hello from NCP server!";
}
}
1-2. Gradle 빌드
프로젝트 루트에서 다음 명령을 실행했다.
gradlew clean build

빌드가 끝나면 build/libs 폴더 아래에 두 개의 JAR가 생긴다.
- demo-0.0.1-SNAPSHOT.jar ← 실행용 (스프링부트 포함)
- demo-0.0.1-SNAPSHOT-plain.jar ← 의존성 없는 순수 코드만 들어있는 JAR
우리가 서버에 올려 실행할 파일은 demo-0.0.1-SNAPSHOT.jar 이다.

2. NCP에서 WAS 서버와 SSL VPN 준비
2-1. WAS 서버 상태 확인
NCP 콘솔에서 VPC 서버 목록을 보면 다음과 같은 WAS 서버가 있다.

- 서버 이름: hsj-was-01
- 비공인 IP: 10.0.0.6
- 공인 IP: 없음
- OS: Rocky Linux 9.6
이 서버는 사설망 안에만 존재하므로, 외부 PC에서 바로 SSH/HTTP로 접근할 수 없다.
그래서 SSL VPN을 통해 먼저 VPC 내부로 들어가야 한다.
2-2. SSL VPN 생성
NCP 콘솔에서 VPC > SSL VPN 메뉴로 이동해 SSL VPN을 하나 생성했다.


- 접근할 VPC: hsj-vpc (10.0.0.0/16)
- SSL VPN 이름: hsj-sslvpn
- IP Pool: 자동 할당 (예: 172.16.0.0/23 )
생성 후 상세정보에서 접속 URL을 확인할 수 있다.
예시:
- 접속 URL: https://sslvpn-kr-vpc-01.ncloud.com
- IP Pool: 172.16.0.0/23
2-3. BIG-IP Edge Client로 SSL VPN 접속
로컬 PC에서 BIG-IP Edge Client를 실행한 뒤, NCP 콘솔에서 확인한 접속 URL을 입력하고 다음을 눌렀다.

이후 브라우저 형태의 로그인 창이 뜨면, NCP에서 설정한 SSL VPN 계정으로 로그인한다.

로그인이 성공하면 내 PC에 172.16.x.x 대역의 IP가 부여되고,
이제부터는 VPC 내부(10.0.0.0/16)에 있는 서버들과 직접 통신할 수 있다.
3. WinSCP로 WAS(10.0.0.6)에 접속해 JAR 업로드
SSL VPN 연결이 된 상태에서 WinSCP를 실행한다.

- File protocol: SFTP
- Host name: 10.0.0.6 (WAS 비공인 IP)
- Port number: 22
- User name: root
- Password: 서버 생성 시 지정한 root 비밀번호
접속에 성공하면 왼쪽은 로컬 PC, 오른쪽은 WAS 서버 파일 시스템이 보인다.
처음에는 오른쪽이 /root 디렉터리로 열려 있다.

왼쪽에서 로컬 Spring Boot 프로젝트의 build/libs 폴더로 이동해
demo-0.0.1-SNAPSHOT.jar 파일을 선택하고, 오른쪽 /project 디렉터리로 드래그앤드롭하여 업로드했다.
(없다면 /project 폴더를 새로 만들어도 된다. 폴더 이름은 자유.)

이 시점에서 서버의 /project 안에는 다음과 같이 파일이 하나 존재한다.
- /project/demo-0.0.1-SNAPSHOT.jar
4. PuTTY로 WAS(10.0.0.6)에 SSH 접속
이제 같은 비공인 IP를 사용해 PuTTY로 SSH 접속을 한다.

- Host Name: 10.0.0.6
- Port: 22
- Connection type: SSH
로그인을 시도하면 login as : 프롬프트가 뜨고, root 계정과 비밀번호를 입력해 접속한다.

4-1. 업로드된 JAR 파일 확인
PuTTY에서 다음 명령으로 /project 폴더로 이동 후 내용을 확인했다.
cd /project
ls

여기까지가 WinSCP 업로드 → PuTTY에서 확인까지의 흐름이다.
5. WAS에 Java 17 설치
처음 java -version 을 확인했을 때 WAS에는 Java 8(1.8.0_xxx)만 설치되어 있었다.
로컬에서 빌드한 JAR는 Java 17 기준이므로, WAS에도 Java 17을 설치해 주어야 한다.
설치 명령:
yum install -y java-17-openjdk

이제 설치 후 "Complete!" 형태로 출력되면 준비 완료다.
6. Spring Boot JAR 백그라운드 실행
6-1. nohup으로 실행
서버에서 애플리케이션을 돌릴 때는 터미널을 점유하지 않도록
nohup 과 & 를 이용해 백그라운드로 실행하는 것이 일반적이다.
nohup java -jar demo-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
- nohup : 터미널을 끊어도 프로세스가 계속 돌도록
- > app.log 2>&1 : 표준 출력과 에러를 app.log 파일로 리다이렉트
- & : 백그라운드 실행
명령 실행 후 [1] 43399 와 같이 PID가 출력된다.

7. curl 로 백엔드 서버 동작 확인
WAS는 비공인 IP만 가지고 있으므로,
내 노트북 브라우저에서 http://10.0.0.6:8080/hello 로 접속할 수 없다.
대신 서버 내부에서 자기 자신에게 HTTP 요청을 보내 확인한다.
curl http://10.0.0.6:8080/hello
또는
curl http://localhost:8080/hello
정상적으로 애플리케이션이 동작하고 있다면 응답으로 다음 문자열이 출력된다.
Hello from NCP server!

이 한 줄이, 실제로는 내부에서 다음 흐름이 모두 잘 돌아가고 있다는 증거다.
- Java 17 설치 및 스프링부트 JAR 실행 성공
- 내 애플리케이션의 /hello 컨트롤러가 정상 동작
- 8080 포트에서 HTTP 서버(Tomcat)가 잘 떠 있음
8. 정리: 비공인 IP WAS에 백엔드 올리기 흐름
이번 실습을 통해 다음 개념들을 몸으로 체험했다.
- 비공인 IP 서버(WAS)는 인터넷에서 바로 보이지 않는다.
- 대신 SSL VPN을 통해 VPC 내부로 들어간 뒤,
내부 IP(10.0.0.6)를 이용해 WinSCP와 PuTTY로 접근할 수 있다. - 로컬에서 빌드한 Spring Boot JAR를 WinSCP로 /project 에 업로드하고,
PuTTY에서 Java 17 설치 → nohup java -jar 로 백그라운드 실행한다. - 외부 브라우저 대신 서버 내부에서 curl 로 /hello 를 호출해
백엔드 서버가 제대로 동작하는지 확인한다.
앞으로는 이 WAS를 3-Tier 아키텍처의 중간 레이어로 두고,
WEB 서버(Nginx)에서 이 WAS로 프록시를 붙이면
브라우저에서도 /hello 응답을 확인할 수 있게 된다.