이 글은 WSL2 가 설치된 상태고,
WSL2 Distro
를Ubuntu-22.04
를 사용한다고
가정하고 글을 작성했습니다. 먼저 2가지를 설치하신 상태에서 보시기 바랍니다.
설치법을 잘 모르시겠으면 제가 이전에 작성한 글을 참조하시기 바랍니다.
여기서 말하는 IntelliJ 는
IntelliJ Ultimate
을 의미합니다.
혹여IntelliJ Community
버전으로 실습하고자 하시는 분들은 댓글 부탁드립니다.
작은 이미지는 클릭하여 크게 볼 수 있도록 조치했습니다.
window 에서 cmd(또는 pwsh)을 실행하고 아래처럼 명령어를 입력하여
자신이 설치한 wsl 기반 linux distro 에 접속합니다.
# 저는 이미 설치한 Ubuntu-22.04 Distro 에 접속하겠습니다.
wsl -d Ubuntu-22.04
sdkman
은 java platform
에 사용되는 다양한 도구(ex: jdk
, gradle
, maven
, etc...
)들을 쉽게 설치하고, 필요 시에는 간편하게 버전을 변경할 수 있게 해주는 유틸리티입니다.
Linux 환경에서는 아주 유용하죠.
설친법은 https://sdkman.io/install 를 참조해주세요. 아주 쉽답니다.
참고로 아래와 같은 에러문구가 보이면서 설치가 실패할 수 있습니다.
이건 현재
zip
,unzip
유틸이 없어서 그렇습니다.
sudo apt update && sudo apt install zip unzip
을 입력해서 설치를 먼저하고,
다시 sdkman 설치법에 따라 설치를 진행해주세요.
sdkman
을 통해서 jdk 를 사용해보겠습니다.
먼저 설치할 수 있는 jdk 가 뭐가 있는지 확인하기 위해서 아래처럼 명령어를 입력합니다.
sdk list java
표출되는 목록 중에서 자신이 설치하고 싶은 jdk
를 먼저 선택합니다.
저는 나오는 목록 중에서 temurin jdk (v.21.0.3)
를 사용하겠습니다.
q
를 입력해서 list 화면에서 빠져나오고,
아래와 같이 명령어를 다시 입력합니다.
sdk install java 21.0.3-tem;
# "21.0.3-tem" 는 list 화면에서 가장 오른쪽에 있는 identifier 입니다.
설치가 모두 완료된 후에 jdk 가 제대로 설치되었는지 확인합니다.
java --version
: 앞서 설치한 Temurin JDK (v.21) 인 것을 확인할 수 있습니다.which java
: 환경변수에 노출된 java
명령어의 경로가 sdkman
이 관리하는 경로임을 확인합니다.git 은 intellij 가 버전 관리 default tool 로 사용하기 때문에 설치하는 것입니다.
필수적인 건 아닙니다.
sudo apt install git
이제 IntelliJ 로 프로젝트를 WSL 에 설치한 Ubuntu-22.04
의 File System
에 생성해야 합니다. 방법은 아래와 같습니다. (참고로 저는 Spring Boot
프로젝트를 생성해봤습니다)
Location
에서 폴더 아이콘을 클릭하여 경로를 탐색합니다.C:
, D:
같은 형태가 아닌,\\wsl$\<distro 명칭>
경로가 보입니다!/
) 에 접근할 수 있는 경로입니다.Ubuntu-22.04
환경에 /home/<사용자명>/java_project
라는 경로를Add Jdk...
클릭/home/<사용자명>/.sdkman/candidates/java/<설치한 jdk 명칭>
입니다.이후에는 우리가 일반적으로 프로젝트 생성하는 방법과 동일합니다.
참고:
첫 프로젝트 생성 시에는maven
이dependency
들을 Ubuntu 환경에 새로이
import
하기 때문에 프로젝트가 생성되기 까지 시간이 다소 걸립니다.
alt + f12
를 입력해서 콘솔창을 엽니다.
그리고 나서 아래 명령어들을 차례차례 입력해보시기 바랍니다.
ls -alF # 현재 프로젝트 디렉토리에 대한 정보가 표출된는지 확인
chmod u+x mvnw # maven wrapper 기능 테스트를 위한 file permission 변경
./mvnw --version # maven 이 sdkman 으로 설치한 jdk 와 정상 연동되는지 확인
./mvnw clean package # spring boot 실행 파일(jar) 생성
java -jar ./target/<생성된 스프링부트 jar파일명>.jar # java 를 통한 jar 정상 구동 확인
이후에 호스트 PC 환경에서 브라우저를 켜고 localhost:8080 접속합니다.
그러면 spring boot web 프로그램이 기본으로 제공하는 에러 페이지가 보입니다.
참고:
(제가 알기로는) Distro 와 Window Host PC 는 127.0.0.1 루프백 ip 를 공유합니다.
음... 이 부분은 제가 추후 더 공부해서 알아내면 따로 글을 작성해보겠습니다.
이번에는 intellij 자체적으로 프로젝트를 실행하고, localhost:8080 접근 테스트를 해봅니다.
Window Docker Desktop (WSL2 기반) 을 설치했다면,
설치된 Linux Distro 와 호환하여 사용이 가능합니다.
Docker Desktop 을 설치/실행한 후 Distro 에 접속하고 docker 명령어를 사용해보시기 바랍니다.
그러면 설치한 Docker dameon 이 명령어를 받아서 실행되는 것을 확인할 수 있습니다.
이렇게 연동이 되므로 여러분들이 Ubuntu 위에 새로이 Docker 를 설치할 필요가 없습니다!
굉장히 편리하죠?
이 장점은 고스란히 Intellij
프로젝트에서도 효력을 발휘합니다.
예를 들어서
Host PC
에서 docker engine
을 통해 postgresql database
를 하나 띄우고
Distro
환경에서 해당 database
에 곧바로 접근할 수 있습니다.
한번 테스트해볼까요?
1. 먼저 Host PC 에서 docker 명령어를 아래처럼 입력합니다.
docker run --name postgreDb -d -p 5555:5432 -e POSTGRES_PASSWORD=1234 postgres
2. distro 환경에 생성한 프로젝트의 pom.xml
에 postgresql dependency
를 하나 더 추가합니다.
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
3. 그 후에 아래처럼 Java 코드를 짜고 실행해봅시다.
package coding.toast.demo3;
import java.sql.*;
public class Demo3Application {
public static void main(String[] args) {
try (Connection connection
= DriverManager.getConnection(
"jdbc:postgresql://localhost:5555/postgres",
"postgres", "1234");
PreparedStatement preparedStatement
= connection.prepareStatement("select now()::text");
ResultSet rs = preparedStatement.executeQuery()){
while (rs.next()) {
String timestamp = rs.getString(1);
System.out.println("timestamp = " + timestamp);
}
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
정상 구동되는 것을 확인할 수 있습니다!
가끔 아래 화면이 잘 안 나오는 경우가 있습니다.
이건 Distro
에 생성한 프로젝트가 있는 상태인데 Distro 가 현재 Stopped 상태일 때
종종 발생합니다. Distro
가 현재 Running
상태인지 확인합니다.
그리고 만약 Stopped 상태면 wsl -d <distro 명칭>
을 입력하여 실행시킵니다.
(아래 그림 참고)
wsl -l -v
로 STATE 확인wsl -d <distro 명칭>
입력하여 접속(= distro 실행)exit
으로 그냥 나옴. 굳이 계속 접속할 필요 없음wsl -l -v
로 STATE 재확인이후 다시 IntelliJ 를 실행하면 정상 구동될 겁니다.