본문 바로가기

Development/Spring Framework

인텔리제이로 스프링부트 시작하기 (IntelliJ, Spring Boot)

 

인텔리제이(IntelliJ)

인텔리제이가 이클립스에 비해 강점은 아래와 같습니다.

 

  • 스마트한 추천 기능(Smart Completion)
  • 다양한 리팩토링과 디버깅 기능
  • 이클립스의 깃(Git)에 비해 높은 자유도
  • 프로젝트 시작시 인덱싱을 하며 파일을 비롯한 자원들에 대한 빠른 검색 속도
  • HTML, CSS, JS, XML에 대한 강한 지원
  • 자바, 스프링 부트 버전업에 맞춘 빠른 업데이트

체감으로 가장 크게 느끼는 것은 추천 기능입니다. 자동완성이 너무 잘 되어 있어서 잠시 이클립스를 볼 일이 있을 때 답답하더라고요.

하지만 인텔리제이는 유료로 제공되고 있습니다만, 학생분들이시라면 인증을 받으시고 교육용으로 이용 가능하십니다. 혹은 인텔리제이 커뮤니티(무료)로 제공되는 버전도 있기에 이를 사용하시는 것을 권장드립니다.

 

스프링 부트에서 인텔리제이를 사용에 용이한 이유는 4가지가 존재합니다.

 

  • 자바 개발에 대한 모든 기능 지원
  • Maven, Gradle과 같은 빌드 도구 기능 지원
  • Git & Git Hub와 같은 버전 관리 시스템(VCS) 기능 지원
  • 스프링 부트의 경우 톰캣과 같은 별도 외장 서버 없이 실행 가능

 

인텔리제이 설치

www.jetbrains.com/toolbox-app/

 

JetBrains Toolbox App: Manage Your Tools with Ease

Open any of your projects in any of the IDEs with one click.

www.jetbrains.com

 

 

인텔리제이 프로젝트 생성하기

이클립스와 달리 인텔리제이는 워크스페이스의 개념이 존재하지 않습니다. 프로젝트모듈의 개념만 존재합니다. 그렇기에 프로젝트를 작업할 때, 한 화면에 하나의 프로젝트만 열립니다.

 

인텔리제이에서 WorkSpace == Project, Project == Module이라는 것을 알 수 있습니다. 만약 Multi Module을 구현하려 한다면 하나의 창에 하나의 프로젝트를 구현하는 것이 도움됩니다. 여기서 Multu Module은 하나의 도메인을 위한 프로젝트들의 모음이라 생각하면 편합니다.

 

내용 출처ㅣ jojoldu.tistory.com/334#ref=facebook

 

Eclipse의 Workspace와 IntelliJ의 Project

최근 인프런에 강의 영상을 올리고 여러 질문을 받았습니다. 그 중에서 자주 접하는 질문이 바로 Eclipse의 Workspace가 IntelliJ의 Project가 맞는건지에 대한 질문이였습니다. (질문) 그래서 이 부분에

jojoldu.tistory.com

 

 

[File 탭 -> Gradle -> JAVA 선택] 그 다음 Group ID와 Artifact ID를 등록합니다. Artifact ID는 프로젝트의 이름이 됩니다.

 

 

저는 GroupId를 [ com.study ]로 설정하였습니다.

 

생성된 Gradle 프로젝트는 위 이미지와 같습니다.

 

 

그레이들 프로젝트를 스프링 부트 프로젝트로 변경하기

 

 

해당 프로젝트의 경로에서 [ build.gradle ]을 엽니다. 그러면 왼쪽과 같은 코드를 확인할 수 있습니다.

이는 자바 개발에 가장 기초적인 설정만 되어있는 상황입니다. 여기에 스프링 부트에 필요한 설정을 추가하겠습니다.

 

 

스프링 부트 추가 설정

 

여기서 학습을 위해 스프링 이니셜라이저(https://start.spring.io/)를 통해 진행하지 않겠습니다.

 

 

buildscript{ ... }의 코드를 해당 파일 맨 위에 작성합니다. 이는 프로젝트의 플러그인 의존성 관리를 위한 설정입니다.

 

  • ext 키워드

    build.gradle에서 사용하는 전역변수를 사용한다는 의미입니다. 여기서 springBootVersion 전역변수를 생성해 그 값을 '2.1.7.RELEASE'로 한다는 의미입니다.

    즉, spring-boot-gradle-plugin이라는 스프링 부트 그레이들 플러그인의 2.1.7.RELEASE를 의존성으로 받겠다는 의미입니다.

 

[ io.spring.dependency-management ] 플러그인은 스프링 부트의 의존성들을 관리해주는 플러그인이라 꼭 추가해야 합니다. apply plugin들은 스프링 부트를 사용하기 위한 필수 플러그인으로 항상 꼭 추가해야만 합니다.

 

repositorities는 각종 의존성들을 어떤 원격 저장소에서 받을지 정하는 것입니다. 보통 mavenCentral을 많이 사용하지만, 최근 라이브러리 업로드 난이도때문에 jcenter도 많이 사용합니다.

 

이 두 가지를 한 번 비교해보겠습니다.

 

  • mavenCentral

    이전부터 많이 사용하는 저장소이나, 본인이 만든 라이브러리를 업로드하기 위해서는 많은 과정과 설정이 필요해, 개발자들이 직접 
    만든 라이브러리를 업로드하는 것이 힘들어 공유가 안되는 상황이 발생했었습니다.

  • jcenter

    이는 mavenCentral의 위와 같은 문제를 개선해 라이브러리 업로드를 간단하게 한 것입니다. 또한 jcenter에 라이브러리를 업로드하면 
    mavenCentral에도 업로드될 수 있도록 자동화를 할 수 있습니다.

학습을 위해 jeventer와 mavenCentral을 모두 사용하겠습니다.

 

dependencies는 프로젝트 개발에 필요한 의존성을 선언하는 곳입니다. 'org.springframework.boot:spring-boot-starter-web'와 'org.springframework.boot:spring-boot-starter-test'를 받도록 선언했습니다.

 

인텔리제이는 메이븐 저장소의 데이터를 인덱싱하여 관리하기에, 무료버전인 커뮤니티 버전을 사용해도 의존성 자동완성이 가능합니다.

compile 메서드 안에 라이브러리 이름의 앞부문만 추가한 뒤 자동완성을 사용하면 라이브러리 목록을 볼 수 있습니다.

 

 

 

메모장이 아닌 인텔리제이 내에서도 수정이 가능합니다. 위에서 언급하였듯 자동완성을 사용해 라이브러리 목록에서 선택할 수 있습니다. 중요한 사실은 절대 특정 버전을 명시하면 안됩니다.

 

버전을 명시하지 않아아만 상단에 작성한 ${springBootVersion} 전역변수의 버전을 따라갈 수 있습니다. 이렇게 관리할 경우 각 라이브러리들의 버전 관리가 한 곳에 집중되어 버전 충돌 문제도 해결돼 편하게 개발을 진행할 수 있습니다.

 

 

최종 코드는 위와 같습니다.

IntelliJ에서 변경된 내용을 반영하기 위해 오른쪽 하단에 뜨는 알람에서 [Enable Auto-import]를 클릭하여 변경이 있을 때마다 자동으로 반영하도록 합니다.