[데브코스] Spring 개요

Updated: Categories:

W3D1 - Spring 기초부터 탄탄히!

빌드과정

  • build tool로 컴파일(빌드) -> 테스트 실행 -> 패키징(jar,war,zip…)
  • 패키징된 파일은 artifacts라고 부름


Maven

  • XML 기반, pom.xml 파일로 의존성 관리 (project object module)
  • 플러그인과 외부 라이브러리를 분리해서 관리
  • archetypes라는 프로젝트 템플릿으로 재사용 가능

image

여기서 골라서 쓰면 된다

pom.xml

image

  • groupId : 프로젝트(모듈)를 식별하기 위해 작성 (그냥 알아보기 위한 것)
  • artifactId : 기본적으로 프로젝트명, 패키지(jar) 파일의 이름, 소문자로만 작성하자
  • version : 버전정보를 명시. ex) 1.0-release
  • dependency를 활용해 다수의 하위 프로젝트 생성 가능

Life cycle

image

  • 기본적으로 정의된 빌드 라이프 사이클이 존재함 ( 인텔리제이 우측 버튼 누르면 나옴)
  • clean : 빌드 결과물을 모두 지움
  • package : 빌드 결과물을 target 폴더에 저장
  • maven이 로컬에 깔려있다면 커맨드로도 가능


Gradle

// 기본 설정
plugins {
    java
}

group = "org.example"
version = "1.0-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.6.0")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
}

tasks.getByName<Test>("test") {
    useJUnitPlatform()
}
  • Groovy or Kotlin 언어로 build script 작성가능
  • 프로젝트에 플러그인을 추가하려면 plugins에 추가하면 된다.
  • 의존성(모듈) 추가는 dependencies 부분에 추가해주자.


Spring Boot CLI 설치하기

  • 여기에서 각자에게 맞는 설치 방법을 선택해 설치해주자.
    • 나는 아래와 같이 zip 파일로 다운받았다.

image

  1. 다운로드 폴더 압축 풀고 C or D 드라이브로 이동 (나는 D)
  2. 시스템 환경 변수 편집 검색 후 드가서 -> 환경변수 클릭 -> 시스템 변수에서 새로 만들기
    • 변수 이름 : SPRING_HOME
    • 변수 값 : D:\spring-2.5.3 (해당 폴더 경로)
  3. 시스템 변수에서 Path 선택 -> 편집 -> 새로 만들기 누르고 -> %SPRING_HOME%\bin 추가
  4. cmd 창에서 spring --version 입력해서 잘 설정되었는지 확인~

명령어로 Spring 프로젝트 생성

> spring init --build 툴선택 -j 자바버전 -g 그룹 -a 아티팩트 -n 프로젝트명 [-x 프로젝트명]
  • 이 명령어도 결국 스프링 이니셜라이저를 통해 실행되는 것..!
  • 옵션도 추가할 수 있다.
  • 하지만 우리에겐 IntelliJ가 있다 (후후…)


Spring

  • 기본을 Spring Framework 라고 부르고, 여러가지 모듈(프로젝트)이 있는데 Dependency를 추가하여 하나씩 붙일수 있다
  • Spring Boot는 이런 모듈을 붙이는 설정을 쉽게 해주는 것!!
  • 공식사이트 모듈 설명

도메인

  • 비즈니스 그 자체를 뜻함
  • EntityVO(Value Object)로 나누어진다.
    • Entity : 각 엔티티는 유일하기에 구분할 수 있는 식별자를 가지고 있다. 시간에 따라 상태가 변경됨
    • VO : 각 속성이 개별적으로 변하지 않고 값 그 자체로 고유 불변한 객체

의존성 주입 (DI)

  • 컴파일타임 의존성 : 코드를 작성하는 시점에서 발생하는 의존성 (클래스 사이의 의존성)
  • 런타임 의존성 : App 실행시 발생하는 의존성 (객체 사이의 의존성) => 뭐.. 행위의 의존성이라고 생각하면 될듯?


몰랐던 것들

  • 모놀리식 vs 마이크로서비스 아키텍처에 대해 더 알아보자
  • java 컬렉션 중 UUID는 고유한 식별자를 생성해준다.
  • enum은 ‘상수’를 열거해서 정의할 수 있는 키워드임.
  • record 클래스는 데이터를 ‘저장’하기 위한 특수한 클래스이다
public record 클래스명(
   타입 변수명,
   타입 변수명,
   ...
) {}
  • Assert는 스프링에서 지원하는 조건식임 Assert.isTrue(조건식, 거짓이라면실행)


📢 오늘의 한마디

  • 스프링 시작 첫 강의를 듣고나서…
    • 앞으로 험난한 길이 예상된다 😭😢
    • 절대 초보인 나를 배려하지 않는다. 알아서 쫓아가야 한다
  • 고수의 향기가 느껴지는 코딩… 난생 처음보는 문법들… 정신이 혼미하다 🤮
  • 강의 중 모르는게 나오면 구글링하면서 알아가며 하다보니 시간이 오래걸린다
  • 간단한 주문 도메인 구현하면서 공부했었던 디자인패턴의 향기가 느껴져서 반가웠다. (정리할거 20개 남음 ^^;)