[Spring] Spring Boot, JPA로 Q&A 게시판 구현하기 - 반복주기 1

Let's TECH🧐·2020년 12월 10일
0
post-thumbnail

자바지기 박재성 강사님의 유튜브 강좌 'Spring Boot, JPA로 Q&A 게시판 구현하기'를 공부하며, 각 반복주기마다 추가 학습한 내용을 포스팅으로 남기려 한다.
첫번째 반복주기에서는 로컬 개발 환경을 세팅하고 간단한 회원가입 페이지 HTML을 개발한 후, Github를 통해 AWS 원격 서버에 소스 코드를 배포하는 과정을 다뤘다.

1. Spring Boot란?

Spring(Spring Framework)의 정의

자바 기반의 엔터프라이즈 애플리케이션 개발을 위한 포괄적인 인프라를 제공해주는 플랫폼

Spring Boot의 정의

  • 스프링 기반의 상용화가 가능한 애플리케이션을 쉽게 만들기 위해 단독 실행을 가능하게 해주는 스프링 프로젝트
  • 스프링을 쉽게 사용할 수 있게 대부분의 필요한 설정을 미리 해놓은 것
    👉 Spring Boot에 Tomcat이 내장되어있다고 하는데, 그래서 처음에 프로젝트 빌드 시 따로 설정을 해주지 않았어도 Tomcat 웹서버가 내장되어있었나 보다.

STS(Spring Tool Suite)에서 프로젝트 빌드 시 설정 항목

  1. Type(빌드 도구)
    • Maven
      • 라이브러리를 자동으로 추가 및 관리해주고, 라이브러리 버전을 자동으로 동기화해줌
      • 빌드 중인 프로젝트, 빌드 순서, 다양한 외부 라이브러리 종속성 관계를 pom.xml 파일에 명시
        👉 그래서 강사님이 부트스트랩 라이브러리를 추가하기 위해 Maven repository 사이트에서 부트스트랩 dependency 관련 코드를 찾은 후 pom.xml에 붙여넣기 해준 거구나!
    • Gradle
      Build라는 동적인 요소를 XML로 정의하기에는 한계가 있지만, Gradle은 동적인 빌드를 Groovy 스크립트를 통해 플러그인을 호출하거나 코드를 짜서 실행할 수 있다.
  2. Packaging
    • jar(Java Archive)
      여러 개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷
  3. Dependency
    • Mustache(Template Engine)
      • 값을 동적으로 전달할 수 있게 해줌
      • {{ }} 의 형태로 이루어진, 로직이 없는 템플릿
      • 로직이 없다고 하는 이유는 if문, for문 등이 존재하지 않고, tag들만 존재하기 때문
    • DevTools
      스프링 부트에서 제공하는 개발 편의를 위한 모듈이다. 주로 변경된 코드를 서버나 화면에 신속하게 반영해서 결과를 확인하기 위해 사용된다.
      👉 코드를 저장하면, 웹브라우저를 새로고침하지 않고도 바로 반영이 되게 하기 위해 LiveReload를 사용하였다. 강사님께서는 DevTools를 dependency에 추가하지 않으면 LiveReload가 정상 작동되지 않는다고 하셨다.

2. local 소스 코드를 Github에 올리기

.gitignore

  • 정의
    git에 올리지 않아도 되는 파일을 미리 등록하여, git add를 통해 staging area에 올라가지 않는 파일을 설정한 파일

  • .classpath, .project, .settings, bin, target
    👉 위 파일은 내가 STS를 사용해서 생성된 설정 파일들이다.
    만약 위의 설정 정보를 함께 넣어서 push하게 된다면, 개발자마다 PC 환경이 다르기 때문에 해당 내용을 받는 개발자들의 PC 환경에 덮어쓰기 되어서 툴이 제대로 동작하지 않는 문제가 발생할 수 있다. 그렇기 때문에 .gitignore 파일을 이용해 제외해주어야 한다


3. 원격 서버에 소스 코드 배포하기

UTF-8 인코딩 설정

  • Locale이란?
    세계 여라 나라들은 각자 다른 문화(언어, 날짜, 시간 등)를 가지고 있다. 프로그램 수행 시 이와 관련한 문제를 해결하기 위해, 프로그램의 국제화(Internationalization, 줄여서 i18n)는 사용자로 하여금 Locale에 의해 자신에게 맞는 환경을 선택할 수 있도록 한다.
  • Ubuntu의 Locale을 변경하기
    • locale-gen을 통해 한글 관련 Locale을 설치
      sudo locale-gen ko_KR.EUC-KR ko_KR.UTF-8
    • 패키지 설치 이후 패키지 재설정
      sudo dpkg-reconfigure locales

JDK 설치

  • OpenJDK란?
    시험적으로 만들어지는 프로토타입으로서, 오픈소스 기반의 무료 버전이다.
    OpenJDK를 가지고 각 회사들이 가져다가 업그레이드 시킨 것 중의 하나가 바로 Oracle JDK이다.
  • OpenJDK로 다운받은 버전을 기본으로 설정하기
    • 사용 가능한 자바 목록 확인하기
      sudo update-java-alternatives --list
    • 기본으로 사용할 자바 버전 선택하기
      sudo update-alternatives --config java
      sudo update-alternatives --config javac

git clone 후 빌드

  • mvnw
    • Maven Wrapper의 약자로, Maven이 설치되어 있지 않은 환경에서도 Maven을 실행시킬 수 있도록 해주는 유닉스 쉘 스크립트
    • Maven을 프로젝트에서 요구하는 버전으로 유지하기 위해 사용하는 도구
    • 프로젝트 빌드하기
      ./mvnw clean package
      mvnw가 설정된 프로젝트의 경우 위 명령어로 프로젝트를 빌드할 수 있다.

웹 서버 실행

  • ./mvnw clean package 를 통해 프로젝트를 빌드하면 빌드된 Jar 파일이 target 폴더 안에 만들어진다.
  • target 디렉토리로 이동
    cd target
  • 웹 서버 실행시키기
    java -jar [빌드된 Jar 파일]

느낀 점

첫번째 반복주기를 통해 로컬 환경에서 개발한 코드를 Github에 올리고 또 Github에 올린 코드를 원격 서버에 배포하는 과정까지 살펴볼 수 있었다.
유튜브 강의를 통해 강사님이 하시는 대로 따라했을 때는 제대로 작동이 되긴 해도 개념 상으로 이해가 안되는 부분이 많았다. 예를 들어 STS에서 프로젝트를 빌드할 때 왜 설정을 저렇게 해주는 건지, 특정 단어가 무엇을 의미하는 건지 등 모호한 부분들이 많았는데, 이렇게 정리를 하면서 공부하니까 머릿 속 개념들이 훨씬 더 깔끔하게 정돈되는 기분이었다.
Spring Boot, JPA로 Q&A 게시판 구현하기의 두번째 단계를 진행할 때도 첫번째 단계처럼 무수한 에러 그리고 어려운 개념들과 씨름을 하겠지만, 이 과정을 통해 크게 성장할 수 있을 것이라 믿는다. 화이팅!!!🙂


참고 사이트

인생의 로그캣
으나님의 잡다한 개발상식
지수의 콘텐츠 기록장
어쩌다, 블로그
Mustache 공식 문서
익스플로의 아카이브
DeMBi
linuxism
Beomi's Tech Blog
IT 내맘대로 끄적끄적

profile
Minju's Tech Blog

0개의 댓글