본문 바로가기

Java/[패스트캠퍼스] 50일 포트폴리오 챌린지

[2일차] 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring)

수강 강의명

개발 환경 구축을 완료 했다면, 이번에는 웹 프로젝트 환경을 구축할 차례이다.

오늘은 몇 가지 IntelliJ 설정과 웹 서버(tomcat)를 실행하는 애플리케이션 실습, 도커를 이용한 개발 환경을 구성하는 방법에 대해 배웠다.

1. 웹 프로젝트 환경을 구축하는데 필요한 IntelliJ 설정
2. IntelliJ에서 웹 서버(tomcat)를 실행하는 애플리케이션 실습
3. 도커란? 도커를 이용한 개발 환경 구성

 

프로젝트 생성

IntelliJ를 실행한 후 New Project를 선택하면 새로운 프로젝트가 생성된다.

이전에 프로젝트를 생성한 적이 있다면 해당 프로젝트의 화면이 보여지게 된다.

IntelliJ 초기 화면
IntelliJ 초기 화면

 

Name : 프로젝트명
Location : 프로젝트를 저장할 위치
Language : 프로젝트를 개발하는데 사용하는 언어
Build system : 프로젝트를 빌드하기 위한 도구
JDK : 자바 애플리케이션을 개발하기 위한 도구

New Project 화면

 

몇 가지 사항을 확인한 후 Create 버튼을 선택하면 새로운 프로젝트가 생성된다.

Add sample code 체크 박스를 선택하면, 프로젝트가 생성될 때 sample code도 같이 생성된다.

Language : Java
Build system : Gradle
JDK : 설치한 JDK
Add sample code : sample code 생성 여부(선택 사항)

New Project 화면 : 설정 완료
New Project 화면 : 설정 완료

 

프로젝트를 다른 경로에 저장하는 방법

프로젝트를 다른 경로에 저장하려면, Location 입력 칸 우측의 폴더 아이콘을 선택하여 경로를 설정해야 한다.

개인적으로 코드와 개발 관련 파일은 D드라이브에 저장하고 있다.

C드라이브는 기본적인 폴더도 많고, 개발 외 다른 목적으로 사용하는 프로그램들이 많이 설치되어 있기 때문이다.

Shift + Enter : New Project 화면에서 프로젝트를 다른 경로에 저장하기 위한 화면으로 진입하는 단축키

 

Select project File Directory 화면으로 진입하게 되는데, 새 폴더를 생성하려면 +가 붙은 폴더 아이콘을 선택하면 된다.

Alt + Insert : 새로운 파일(폴더 포함)를 생성하는 단축키

step01. New Directory를 선택한다.step02. 폴더명을 지정한다.step03. 폴더가 생성된 모습
새 폴더를 생성하는 방법

 

파일명을 변경하는 방법

Shift + F6 : 파일명을 변경하는 단축키(파일을 클릭한 상태에서 단축키를 입력해야 함)

step01. 이름을 변경할 파일을 선택한다.step02. 마우스 오른쪽 버튼을 클릭하여 Refactor → Rename을 선택한다.step03. 파일명을 입력한다.
파일명 변경

 

Gradle : dependencies 설정

코드를 작성하기 전 프로젝트에 필요한 dependencies를 먼저 추가해줘야 한다.

mvnrepository 홈페이지에서는 라이브러리를 검색한 후 원하는 버전을 선택하면 해당 라이브러리를 프로젝트에 추가하는 방법을 알려준다.

https://mvnrepository.com/

mvnrepository : 라이브러리를 정의한 원격 저장소
dependencies : 프로젝트에 필요한 라이브러리를 정의하는 공간(Gradle(빌드 도구)가 이를 자동으로 관리한다.)

mvnrepository 홈페이지
mvnrepository 홈페이지

 

5개의 라이브러리(tomcat-embed-core, tomcat-embed-jasper, javax.servlet-api, jstl, logback-classic)가 필요하다.

대표적으로 tomcat-embed-core 라이브러리를 추가하는 방법에 대해 알아보자.

tomcat-embed-core

 

1. 필요한 라이브러리를 검색한다.

2. 검색 결과로 나온 라이브러리의 이름을 클릭하여 상세 화면으로 진입한다.

tomcat-embed-core : 검색 결과
tomcat-embed-core : 검색 결과
tomcat-embed-core : 상세 화면
tomcat-embed-core : 상세 화면

 

3. 프로젝트에 설치할 라이브러리의 버전을 선택한다.

tomcat-embed-core : 버전 선택
tomcat-embed-core : 버전 선택

 

4. 프로젝트에서 사용하는 빌드 도구(Maven, Gradle)에 맞는 코드를 복사하여 해당 파일에 넣는다.

Maven : pom.xml
Gradle : build.gradle

라이브러리를 프로젝트에 추가하는 코드
라이브러리를 프로젝트에 추가하는 코드

 

필요한 라이브러리를 모두 넣은 다음 상단의 코끼리 아이콘(Load Gradle Changes)을 선택하면 외부 라이브러리가 프로젝트에 설치된다.
설치된 외부 라이브러리는 External Libraries 폴더에서 확인 가능하다.

Ctrl + Shift + O : 빌드 파일에 추가한 라이브러리를 프로젝트에 설치하는 단축키
tomcat-embed-core/8.5.42
tomcat-embed-jasper/8.5.42
javax.servlet-api/4.0.1
javax.servlet/jstl/1.2
logback-classic/1.2.3

build.gradle : 기본 값
build.gradle : 기본 값
build.gradle : 외부 라이브러리 추가
build.gradle : 외부 라이브러리 추가

 

소스 코드

https://github.com/serverwizard/mvc-practice/blob/master/build.gradle

 

웹 서버 실습

코드를 붙여넣기 했을 때 발생하는 문제

import문(클래스의 위치)을 포함하지 않은 채 실습 코드를 붙여넣으면 존재하지 않는 클래스로 인식하기 때문에 에러가 발생하게 된다.

단축키를 사용하면 빠르고 쉽게 import문을 추가할 수 있다.

이때, 위치는 다르지만 같은 클래스명을 갖는 클래스를 import할 때는 주의해야 한다.

Logger(of org.slf4j)
File(of java.io)
F2 : 가장 근처에 위치한 import가 필요한 코드로 이동하는 단축키
Alt + Enter 코드에서 오류가 발견된 경우 문제에 대한 수정 제안 목록이 표시되는 단축키
 

가장 많이 사용되는 IntelliJ IDEA 단축키 15개 | Post

IntelliJ IDEA는 편집, 탐색, 리팩토링, 디버깅 등 일상적으로 수행하는 대부분의 작업에 대하여 해당 명령어의 키보드 단축키를 제공합니다. 이러한 단축키를 배우고 연습하여 기억해 두면 작업 흐

blog.jetbrains.com

Class to Import : Logger 클래스Class to Import : Logger 클래스
Class to Import : Logger 클래스
Class to Import : File클래스
Class to Import : File클래스

 

소스 코드

https://github.com/serverwizard/mvc-practice/blob/master/src/main/java/org/example/WebApplicationServer.java

 

Tomcat 루트 디렉토리(폴더) 생성

Tomcat 서버의 루트 경로로 지정한 폴더가 프로젝트에 존재하지 않으므로 생성해야 한다.

Developer's Guide에 의하면 자바 클래스는 /WEB-INF/classes 경로 안에 넣어야 한다고 명시되어 있다.

// Tomcat 루트 경로
String webappDirLocation = "webapps/";

https://tomcat.apache.org/tomcat-9.0-doc/appdev/deployment.html

 

Application Developer's Guide (9.0.78) - Deployment

Before describing how to organize your source code directories, it is useful to examine the runtime organization of a web application. Prior to the Servlet API Specification, version 2.2, there was little consistency between server platforms. However, serv

tomcat.apache.org

Standard Directory Layout
Standard Directory Layout
webapps 폴더 생성
webapps 폴더 생성

Alt + Insert : 새로운 파일(폴더 포함)를 생성하는 단축키

 

Tomcat 루트 디렉토리(폴더)를 생성한 다음에는 class 파일이 저장되는 경로를 변경해줘야 한다.

Alt + \ : Main Menu를 표시하는 단축키
Ctrl + Alt + Shift + S : 프로젝트 설정(Project Structure...)에 진입하는 단축키

프로젝트 설정에 진입 : Main Menu
프로젝트 설정에 진입 : Main Menu
프로젝트 설정에 진입 : Project Structure...
프로젝트 설정에 진입 : File > Project Structure...

 

Project Structure : [Project Settings] > Modules > main > Paths

D:\mvc\mvc-practice\webapps\WEB-INF\classes

Project Settings : Modules > main > Paths
Project Settings : Modules > main > Paths

 

Project Structure : [Project Settings] > Modules > test > Paths

Apply 버튼으로 변경 사항을 적용한 다음 OK 버튼을 눌러 설정 창을 닫는다.

D:\mvc\mvc-practice\webapps\WEB-INF\classes\java\main

Project Settings : Modules > test > Paths
Project Settings : Modules > test > Paths

 

코드를 실행하면 프로젝트를 빌드할 때 생성되는 class 파일이 지정한 tomcat 루트 디렉토리(폴더)에 저장된다.

Ctrl + Shift + F10 : 자바 애플리케이션(main())을 실행하는 단축키

WebApplicationServer 실행 결과
WebApplicationServer 실행 결과

 

Error : unmappable characher를 해결하는 방법

웹 서버 애플리케이션 코드를 처음 실행했을 때 발생한 에러이다.

윈도우의 기본 인코딩이 MS949라 한글을 제대로 인식할 수 없기 때문에 발생하게 된다.

인코딩 문제 발생
인코딩 문제 발생

 

Settings... : [Editor] > File Encodings에 진입하여 인코딩을 설정하는 부분을 모두 UTF-8로 변경하면 된다.

Alt + \ : Main Menu를 표시하는 단축키
Ctrl + Alt + S : Settings...(IntelliJ 설정)에 진입하는 단축키

Settings...에 진입 : Main Menu
Settings...에 진입 : Main Menu
Settings...에 진입 : File > Setting...
Settings...에 진입 : File > Setting...

 

Apply 버튼을 눌러 변경 사항을 적용한 후 OK 버튼을 눌러 설정 창을 닫는다.

Global Encoding : UTF-8
Project Encoding : UTF-8
Default encoding for properties files : UTF-8

Settings : [Editor] > File Encodings
Settings : [Editor] > File Encodings

 

도커

컨테이너 기반의 가상화 플랫폼.

가상화는 크게 컨테이너 기반의 가상화하이퍼바이저 기반의 가상화(OS 가상화)로 나뉜다.

가상화의 종류
컨테이너 기반의 가상화 vs. 하이퍼바이저 기반의 가상화(OS 가상화)

 

컨테이너 기반의 가상화

격리된 환경에서 프로세스를 실행하는 기술이다.

애플리케이션은 도커 엔진을 통해 Host 자원을 사용할 수 있으며, Guest OS가 없기 때문에 용량이 가볍다.

 

하이퍼바이저 기반의 가상화

격리된 환경에서 또 하나의 가상화 서버를 실행하는 기술이다.

각각의 Guest는 Hypervisor에 의해 관리되며, 시스템 자원을 할당받는다.

Guest OS에서 실행되는 애플리케이션이 Host 자원을 사용하려면 Guest OS를 거쳐야 한다.(속도 저하)

Guest OS : 가상 서버(다양한 OS 사용 가능)
Host Operating System : 물리 서버
Hypervisor : Host와 Guest를 나누는 역할을 하며 이들을 연결하는 중간 역할을 한다.
                  : 서버 가상화 기술이며, Host 서버에 설치된다.

 

도커 컴포즈

여러 프로세스(MySQL, Web-server, Kafka 등)를 하나의 파일(다중 컨테이너)로 정의하여 동시에 실행하기 위한 도구이다.

YAML 파일을 사용하여 다중 컨테이너를 구성할 수 있다.

 

https://docs.docker.com/compose/

 

Overview of Docker Compose

 

docs.docker.com

https://docs.docker.com/compose/

https://docs.docker.com/compose/gettingstarted/

 

Try Docker Compose

 

docs.docker.com

https://docs.docker.com/compose/gettingstarted/
https://docs.docker.com/compose/gettingstarted/

services : 실행할 서비스를 정의하는 영역이다.(web, redis)

 

도커를 이용한 개발 환경 구축

Docker Desktop 설치

도커 홈페이지에 접속하여 컴퓨터 운영체제에 맞는 Docker Desktop을 설치한다.
https://www.docker.com/products/docker-desktop/

 

Download Docker Desktop | Docker

Docker Desktop is available to download for free on Mac, Windows, or Linux operating systems. Get started with Docker today!

www.docker.com

https://www.docker.com/products/docker-desktop/
https://www.docker.com/products/docker-desktop/

 

다운로드된 Docker Desktop Installer.exe 설치 파일을 실행한다.

Step01. 체크 박스 항목 모두 체크(기본값)Step02. 설치 중인 화면Step03. 설치 완료
Docker Desktop 설치 과정

 

명령 프롬프트를 실행하여 docker -v 명령어를 입력하면 설치된 Docker의 버전 정보가 출력된다.

docker -v

명령 프롬르트
명령 프롬르트

 

MySQL 도커 이미지 다운로드

도커 허브(도커 이미지 저장소) 홈페이지에 접속한다.(Github와 유사)

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Deliver your business through Docker Hub Package and publish apps and plugins as containers in Docker Hub for easy download and deployment by millions of Docker users worldwide.

hub.docker.com

https://hub.docker.com/

 

mysql를 검색한 결과에서 DOCKER OFFICIAL IMAGE가 표시된 mysql 이미지를 선택한다.

DOCKER OFFICIAL IMAGE : 도커에서 제공하는 공식 이미지를 의미한다.

mysql 검색 결과
mysql 검색 결과
mysql 이미지 다운로드(pull)
mysql 이미지 다운로드(pull)
mysql 이미지 버전 정보
mysql 이미지 버전 정보

 

명령 프롬프트를 실행하여 mysql 이미지를 다운로드 받는 명령어를 입력한다.

버전을 따로 입력하지 않으면 최신 버전(latest)으로 설치된다.

docker pull mysql:{version}
docker pull mysql

mysql 이미지를 다운로드 완료
mysql 이미지 다운로드 완료

 

Error : error during connect 해결 방법

명령 프롬프트에 mysql 이미지를 다운로드 받는 명령어를 입력할 때 발생한 에러이다.

error during connect : this error may indicate that the docker daemon is not running

 

Docker Desktop가 실행되지 않은 상태여서 발생한 에러이다.

윈도우의 시작 메뉴를 열어 설치한 Docker Desktop을 실행한다.

Docker Desktop 실행 : 시작 메뉴
Docker Desktop 실행 : 시작 메뉴
Docker Desktop 실행 : Accept
Docker Desktop 실행 : Accept

 

서비스 동의 화면에서 Accept 버튼을 눌렀더니, 이번에는 WSL kernel version too low 에러가 발생한다.

WSL kernel version too low 에러
WSL kernel version too low 에러

 

Windows PowerShell를 실행하여 WSL를 업데이트하는 명령어인 wsl --update를 입력하면 해결 된다.

wsl --update

Windows PowerShell
Windows PowerShell
Windows PowerShell : wsl --update
Windows PowerShell : wsl --update

 

다시 Docker Desktop를 실행하면 Restart Docker Desktop 창이 표시된다.

Restart 버튼을 눌러 Docker Desktop를 재실행하면 로딩 화면이 출력된다.

Restart Docker Desktop
Restart Docker Desktop
Docker Desktop : 로딩(실행중)
Docker Desktop : 로딩(실행중)
Docker Desktop : 로딩(실행중)
Docker Desktop : 로딩(실행중)

 

잠시 기다리면 로딩이 완료되어 Docker Desktop이 실행된다.

Docker Desktop : 실행
Docker Desktop : 실행
Docker Desktop : 실행
Docker Desktop : 실행

 

MySQL 도커 컨테이너 생성 및 실행

MySQL 도커 컨테이너를 생성하기 위해 해당 명령어를 명령 프롬프트에 입력한다.

docker run --name {name} -e MYSQL_ROOT_PASSWORD={password} -d -p 3306:3306 mysql:{version}
docker run --name mysql-sample-container -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mysql
docker run : docker 실행 명령어
--name : 컨테이너명을 지정하는 명령어
MYSQL_ROOT_PASSWORD : MySQL ROOT 패스워드를 설정하는 명령어
3306:3306 : 연결할 포트를 지정하는 명령어
mysql : MySQL 이미지
mysql:{version} : 여러 버전의 MySQL 이미지를 다운로드 받았을 때 사용하려는 버전을 지정하는 명령어

MySQL 도커 컨테이너 생성
MySQL 도커 컨테이너 생성

 

현재 실행중인 도커 컨테이너 목록을 출력하는 명령어를 입력하면 방금 실행한 MySQL 도커 컨테이너가 목록에 표시된다.

docker ps -a: 도커 컨테이너 목록을 출력하는 명령어
docker ps : 현재 실행중인 도커 컨테이너 목록을 출력하는 명령어

도커 컨테이너 목록 출력
도커 컨테이너 목록 출력

 

MySQL 도커 컨테이너 접속

실행한 MySQL 도커 컨테이너에 접속하기 위해 해당 명령어를 명령 프롬프트에 입력한다.

docker exec -it {도커 컨테이너 이름} bash
docker exec -it mysql-sample-container bash

MySQL 도커 컨테이너 접속
MySQL 도커 컨테이너 접속

 

MySQL에 접속하기 위해 mysql -u root -p 명령어를 명령 프롬프트에 입력한다.

비밀번호는 MySQL 도커 컨테이너를 생성할 때 입력한 비밀번호를 입력하면 된다.

mysql -u root -p
docker run --name mysql-sample-container -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 mysql

MySQL 접속
MySQL 접속

 

수강 화면수강 화면
수강 화면

스프링을 학습할 때 등장하는 용어들은 추상적인 느낌이라 와닿지가 않는다.

컨테이너라는 단어는 느낌상 공간을 의미하는 걸까?

Spring을 처음 공부하는 상황이라면 설명하신 용어들이 낯설지 않을까 싶다.

 

키보드로 코드를 작성하다 설정이나 실행을 위해 마우스를 사용하려니 무척 번거롭다.
IDE(IntelliJ 등)는 생산성을 높이기 위한 단축키를 지원하기 때문에 실습하면서 사용한 단축키를 정리해놔야겠다.

[단축키]
F2 : 가장 근처에 위치한 import가 필요한 코드로 이동하는 단축키
Alt + \ : Main Menu를 표시하는 단축키
Alt + Insert : 새로운 파일(폴더 포함)를 생성하는 단축키
Alt + Enter : 코드에서 오류가 발견된 경우 문제에 대한 수정 제안 목록이 표시되는 단축키

Shift + F6 : 파일명을 변경하는 단축키(파일을 클릭한 상태에서 단축키를 입력해야 함)
Shift + Enter : New Project 화면에서 프로젝트를 다른 경로에 저장하기 위한 화면으로 진입하는 단축키

Ctrl + Shift + F10 : 자바 애플리케이션(main())을 실행하는 단축키
Ctrl + Shift + O : 빌드 파일에 추가한 라이브러리를 프로젝트에 설치하는 단축키
Ctrl + Alt + Shift + S : 프로젝트 설정(Project Structure...)에 진입하는 단축키
Ctrl + Alt + S : Settings...(IntelliJ 설정)에 진입하는 단축키

 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://bit.ly/43z0P6S

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 
#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완