스프링시작

권도훈·2024년 1월 12일
0

스프링시작

  • 스프링
    • Java 기반의어플리케이션 개발을 위해 만들어진 프레임워크
      • Spring은 자바 기반의 애플리케이션을 개발하기 위한 다양한 기능과 라이브러리를 제공
    • Spring은 웹 개발에 필요한 많은 기능을 제공
      • 데이터베이스 연결, 보안(로그인관련), REST API 개발 등의 기능이 내장
      • 필요한 라이브러리를 쉽게 추가하고 관리
    • 순수자바로의 개발과 비교하여 많은 부분을 사전에 구현 및 단순화 시켜 웹개발 편의 증대
      • HTTP통신, reqeust data, response data 처리 편의증대
      • database연결 및 쿼리 실행 편의 증대
  • 스프링부트
    • Springboot는 기반의 어플리케이션을 쉽고 빠르게 구축할 수 있도록 도와주는 도구
    • Spring의 모든 기능을 포함하며, 추가적으로 더 쉽고 빠른 개발을 가능하게 하는 여러 도구와 기능을 제공
    • Spring 설정을 최소화하며 필요한 라이브러리 자동 구성(Auto-configuration, Starter 종속성 등)
    • SpringBoot는 환경세팅, 톰캣지원 등 개발자가 번거로운 설정 작업을 최소화하고, 애플리케이션의 구조를 간소화
    • spring에 비해 프로젝트 생성속도, 클라우드 환경에서의 유연성 등 많은 장점으로 인해 최신 프로젝트는 대부분 springboot기반의 프로젝트
  • 스프링부트 프로젝트 생성
    • https://start.spring.io에서 프로젝트 생성
      • 스프링 프레임워크와 Spring Boot 프로젝트를 생성하기 위한 공식적인 웹 서비스
    • 프로젝트 선택
      • Gradle Groovy 선택
      • Gradle
        • Gradle은 프로젝트 빌드, 종속성 관리, 배포 등을 위한 자동화 도구
          • Java 빌드에 필요한 플러그인 설정 ex)build.gradle의 plugins코드
          • 외부라이브러리 및 모듈 등의 관리 ex)build.gradle의 dependencies
            • 이를 의존성(종속성) 관리라 함
          • jar파일과 같은 배포를 위한 압축파일 생성
      • Groovy
        • XML이나 특수한 DSL(Domain Specific Language)을 사용하는 대신, 그루비(Groovy)라는 스크립트 언어를 사용하여 빌드 스크립트를 정의
          • 예시) build.gradle 파일 작성의 문법 형식
    • Language
      • Java 11
    • Spring Boot
      • 2.7.16
      • snapshot은 실험적인 버전을 의미
    • Project 구조
      • Group
        • naver등 그룹이나 조직을 나타내는 name
        • 일반적으로 도메인 이름을 역순으로 사용. 예를 들어, com.naver
      • artifact
        • 예를 들어, first-web app 등 프로젝트의 실질적인 name으로 사용
        • 그룹 내에서 프로젝트를 고유하게 식별하는 데 사용
        • 프로젝트가 생성하는 JAR 파일의 이름에 사용
      • name
        • 프로젝트의 전체 이름. ArtifactId보다 더 설명적이고 친숙한 형태로 표현
        • main application 파일이름 결정
    • Dependecies
      • 사용할 외부 라이브러리 목록 정의
      • spring web
        • 웹 서비스를 위한 라이브러리로서 기본이 되는 라이브러리
      • Thymeleaf
        • spring에서 java코드가 더해진 html을 만들어주는 템플릿 엔진
      • 그외에는 프로젝트 작업 과정에서 지속적으로 추가할 예정
      • Dependencies 섹션
        • implementation
          • implementation 의존성은 컴파일 시점과 런타임 시점 모두에 필요한 라이브러리에 사용
          • 프로젝트 코드 내에서 직접 사용되는 라이브러리에 주로 사용
        • compileOnly
          • 컴파일 시에만 필요하고, 런타임 시에는 필요하지 않은 의존성을 선언
            예를 들어)컴파일 시 Lombok 어노테이션들(@Getter, @Setter 등)을 컴파일러가 인식알리는것
        • gradle5이후로는 annotationprocessor 추가
          • annotationProcessor는 컴파일 시점에 어노테이션 프로세싱하는데 사용
            예시) Lombok 어노테이션 프로세서가 실제로 코드를 생성
        • runtimeOnly
          • 런타임 시에만 필요하고, 컴파일 시에는 필요하지 않은 의존성을 선언
            대표적으로 DB관련 의존성과 로그의존성
        • 컴파일 타임 의존성
          • 컴파일 타임 의존성은 소스 코드를 컴파일하는 데 필요한 라이브러리를 의미
            이러한 의존성은 소스 코드 내에서 직접 참조. 예를 들어, 클래스를 상속하거나 인터페이스를 구현할 때 해당 클래스나 인터페이스가 컴파일 타임 의존성에 포함
        • 런타임 의존성
          • 런타임 의존성은 애플리케이션이 실행될 때 필요한 라이브러리를 의미
            런타임 의존성은 소스 코드 내에서 직접적으로 참조되지 않을 수 있음.
            예를 들어, JDBC 드라이버는 일반적으로 소스 코드에 직접적으로 참조되지 않지만, 런타임에 데이터베이스 연결을 위해 필요
            컴파일의존성과 런타임의존성의 구분하는이유와 차이
            컴파일의존성은 소스코드를 class로 빌드할때 참조용으로 사용
            런타임 의존성은 일반적으로 빌드된 아티팩트에 포함
            성능 최적화, 배포크기 최소화를 위해 구분
    • Packaging
      • jar는 주로 springboot에서 사용
      • war는 서블릿/JSP 기반의 웹 애플리케이션에 사용되고, 기존의 legacy 스프링 프로젝트에서 많이 사용되는 구성요소를 지님
        • 사전 정의된 구조를 사용함 (WEB-INF, META-INF)
        • 별도의 웹서버(WEB) or 웹 컨테이너(WAS) 필요
    • Generate시 다운로드 폴더에 zip파일 다운로드
    • zip파일 압축 해제 후 intellij에서 build.gradle 파일 open
      • 최초 open시 build.gradle에 설정된 dependencies 관련 라이브러리 관련파일을 자동으로 download
  • 스프링부트 프로젝트 구조
    • .idea : intelliJ 툴 관련 설정 파일
    • main, test 폴더
      • main 폴더
        • 프로젝트 실행을 위한 실질적인 소스코드가 위치한 폴더
        • main/java
          • 실제 구현을 위한 소스파일 위치
        • main/resources
          • xml, properties, yml 등의 확장자를 가진 설정파일 위치
          • main/resources/static내에는 html 등 정적파일 위치
      • test 폴더
        • 테스트를 위한 소스
        • 별도로 폴더를 기본으로 만들어 둘만큼 최근 개발 트렌드에서는 그만큼 테스트가 중요하다는 것을 의미
      • 설정에서 Tree appearance -> compact Middle packages 체크해제하면 폴더구조 보기 편함
    • build.gradle
      • 빌드환경, maven레파지토리, 필요한 라이브러리, 설정
      • 이와 같은 역할을 하는 pom.xml은 maven 빌드에서 사용 (참고만)
    • gitignore
      • git에서 무시할 대상 설정
      • git에는 소스코드만 올라가야하므로, 빌드결과물 등 불필요한 대상 제외
    • gradle관련
      • .gradle 폴더
        • Gradle의 빌드 과정에서 생성되는 각종 임시 파일들을 저장
        • 컴파일된 클래스를 캐시해 두어 재빌드 시간을 단축시키는 데 사용
      • gradle wrapper
        • Gradle의 특정 버전관리
        • gradle warrper를 통해 어떤 플랫폼에서든 문제없이 동작되게 하는 Cross-Platform 호환성
      • gradlew, gradlew.bat
        • 실행가능한 jar파일을 생성하는데 사용
        • linux mac의 경우 gradlew사용, window의 경우 gradlew.bat
          • ./gradlew build 명령을 사용하여 Gradle 빌드 스크립트를 실행
      • settings.gradle
        • 이 파일은 주로 멀티 프로젝트 빌드 구성에서 사용
        • 예시)
          // settings.gradle
          rootProject.name = 'multi-module-project'
          include 'app', 'library'
  • 스프링부트 프로젝트 실행
    • SpringApplication 파일을 run
    • 웹브라우저에서 localhost:8080 접속시 error페이지가 뜨면 성공

0개의 댓글