WEEK 5-1: Spring Framework 기본 개념

ensalada.de.pollo·2025년 5월 8일

be

목록 보기
15/44

Framework와 Library

Framework

소프트웨어 개발을 편하게 만들기 위한 개발 환경을 의미합니다. 쉽게 말하면 틀을 제공하는 것인데, 개발을 할 때에 이 틀에 맞추어 개발을 해야 합니다.

장점

  • 프로젝트에 일관된 구조를 제공하여 코드의 일관성과 가독성에 기여합니다.
  • 기본적으로 필요한 기능과 도구를 제공해주기 때문에 비즈니스 로직에 집중할 수 있게 해줍니다.
  • 보안과 관련된 기능 또한 기본적으로 제공하여 보안 취약점을 방지하는 데에 도움을 주기도 합니다.
  • 통합된 테스트 환경과 툴을 제공하여 테스트를 보다 쉽게 작성할 수 있습니다.
  • Spring 같이 큰 프레임 워크는 방대한 커뮤니티 지원을 받고 다양한 문서를 활용할 수 있습니다.

단점

  • 복잡한 구조를 가지기 때문에, 처음 배울 때 시간이 많이 소요됩니다.
  • 기존 코드와 새로운 버전이 호환되지 않을 수 있습니다.
  • 일관된 구조를 제공하기 때문에 자유롭게 변경하기 어려울 수 있습니다.

Library

application 개발에 필요한 클래스, 함수 등을 모아 놓은 모음집입니다. 소프트웨어를 만들 때 이 모음집에서 필요에 따라 원하는 기능을 가져다 쓸 수 있습니다.

장점

  • 복잡한 코드를 직접 작성하지 않아 개발 생산성이 높아집니다.
  • 검증된 라이브러리는 안정성과 품질이 보장됩니다.

단점

  • 라이브러리가 업데이트 되거나 중단될 경우 문제가 발생할 수 있습니다.
  • 버전 호환성 문제로 다른 라이브러리나 코드와 충돌이 발생할 수 있습니다.
  • 불필요한 라이브러리를 사용하다보면 비효율적일 수 있습니다.
  • 내부 구현을 수정하기 어려워 특정 요구 사항에 맞게 코드를 조정하기 어려울 수 있습니다.

Annotation

Annotation

코드에 메타데이터를 추가할 수 있는 기능을 제공합니다. 보통 특별한 의미를 부여하거나, 컴파일러와 런타임에 특정 동작을 트리거하기 위해 사용됩니다.

@ 기호로 시작되며, 클래스, 메서드, 변수, 매개변수, 패키지 등에 붙일 수 있습니다.

내장 어노테이션

  • @Override
    메서드가 상위 클래스나 인터페이스의 메서드를 오버라이드함을 나타냅니다.
    컴파일러는 실제로 오버라이드하고 있는지 확인합니다.
  • @Deprecated
    해당 요소가 더 이상 사용되지 않음을 나타냅니다.
    해당 어노테이션이 붙은 코드를 사용하면 컴파일러는 경고를 표시합니다.

사용자 정의 어노테이션

  • 개발자가 직접 어노테이션을 정의할 수 있습니다.
  • 특정 메타 데이터를 추가하거나, AOP(Aspect-Oriented Programming)같은 기술과 결합하여 다양한 기능을 구현할 수 있습니다.

Lombok

보일러 플레이트 코드(Boilerplate code)를 줄여주는 라이브러리입니다. 자동으로 보일러 플레이트 코드를 생성하여 가독성과 유지 보수성을 높여줍니다.

어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성해줍니다.

보일러 플레이트 코드(Boilerplate code)는 뭔가요?

getter, settter, constructor, toString 등과 같이 반복적으로 작성되는 코드를 의미합니다.

주요 Lombok Annotation

  • @Getter, @Setter

    • 클래스의 모든 필드에 대한 getter 메서드를 자동으로 생성합니다.
    • 클래스의 모든 필드에 대한 setter 메서드를 자동으로 생성합니다.
  • @ToString
    객체의 toString()메서드를 자동으로 생성합니다.
    기본적으로 모든 필드를 포함하며, 특정 필드를 제외하거나 포맷을 지정하는 것도 가능합니다.

  • @EqualsAndHashCode
    equals()와 hashCode() 메서드를 자동으로 생성합니다.
    객체의 동일성과 해시 코드를 정의하는데 사용됩니다.

  • @NoArgsConstructor, @AllArgsConstructor, @RequiredArgsConstructor

    • 기본 생성자를 생성합니다.
    • 모든 필드를 매개변수로 하는 생성자를 생성합니다.
    • 필수 필드만을 매개변수로 하는 생성자를 자동으로 생성합니다. 여기서 필수 필드란, final 키워드가 붙은 필드를 의미합니다.
  • @Data
    @Getter, @Setter, @ToString, @EqualsAndHashCode, @RequiredArgsConstructor를 한꺼번에 적용하는 어노테이션입니다. 주로 테스트 용도로 사용이 됩니다.

  • @Builder
    빌더 패턴을 적용하여 객체를 생성할 수 있게 해줍니다. 보통 복잡한 객체 생성에 사용이 됩니다.

  • @Slf4j
    해당 어노테이션이 붙은 클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성합니다.

Spring Framework와 Spring Boot

Spring Framework

Java Application Framework입니다. 엔터프라이즈 application 개발에 주로 사용이 됩니다.

특징

  • application의 다양한 구성 요소를 유연하게 연결하고 관리할 수 있게 해줍니다.
  • 누구나 사용할 수 있는 오픈소스입니다.
  • 모듈화가 되어 있기 때문에 필요한 기능만 선택적으로 사용할 수 있습니다.
  • 객체 지향 언어의 특징을 살려낸 프레임워크입니다.

Spring Boot

Spring Framework를 기반으로 간편하고 빠르게 application을 개발할 수 있도록 도와주는 도구입니다.

Spring Framework는 초기 설정과 구성파일이 복잡하고 방대합니다. 그리고 이를 개발하고 배포하기 위해서는 여러 가지 의존성을 관리해야 하고 서버와 관련된 설정이 필요합니다.

이런 과정을 최소한의 노력으로 수행할 수 있는 방법이 필요해 등장한 것이 Spring Boot입니다.

특징

  • 자동 구성(Auto-Configuration) 기능을 제공합니다. 개발자가 직접 설정을 처리할 필요 없이 기본 설정만으로도 비즈니스 로직에 집중할 수 있게 해주는 역할을 합니다.
  • 내장 WAS(Tomcat)을 제공하여 별도 서버 설정 없이 바로 실행할 수 있습니다.
  • spring-boot-starter-web을 빌드 관리 도구에 추가하면 모든 종속성와 설정이 자동으로 구성됩니다.
  • 라이브러리들의 버전을 명시하지 않아도 호환 가능한 버전을 찾아 자동으로 설정해줍니다. 하지만 이러한 버전 관련 문제를 전부 해결해주는 것은 아니기 때문에, 유의해야 합니다.

Gradle

Java와 유사한 문법 구조를 가진 Groovy 기반 스크립트 언어를 사용합니다.
다양한 소프트웨어를 빌드할 수 있는 빌드 자동화 도구입니다.

빌드(Build)란?

소스 코드를 컴퓨터가 실행 가능한 파일로 변환해주는 작업을 의미합니다.
자바의 경우, 소스 코드를 컴파일해 나온 결과물인 자바 바이트 코드에 라이브러리와 같은 의존성을 추가하여 실행 가능한 파일(.jar, .war)을 만드는 것이 빌드 과정입니다.

빌드 자동화 도구

빌드와 더불어 라이브러리 관리, 테스트, 배포 등 까지 자동화하여 수행합니다.

특징

  • 유연성
    복잡한 빌드 시나리오를 처리할 수 있습니다.
    빌드 스크립트를 통해 다양한 빌드 작업을 정의하고, 필요한 경우 이 작업도 커스터마이징 할 수 있습니다.
  • 성능
    BuildCache: 빌드 결과물을 캐싱하여 재사용합니다.
    점진적 빌드: 마지막 빌드 호출 이후 변경된 부분만 빌드합니다.
    데몬 프로세스: 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스를 의미합니다.
  • 멀티프로젝트 빌드 지원
    공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용할 수 있게 해줍니다.
  • 설정 주입 방식
    필요한 설정을 직접 프로젝트에 주입하는 방식입니다.
    공통되는 정보는 묶어 한 번에 주입할 수 있습니다.
    프로젝트 별로 설정을 다르게 주입할 수 있습니다.

build.gradle

Groovy 기반 언어의 빌드 스크립트입니다. 소스 코드를 빌드하고, 라이브러리들의 의존성을 관리할 수 있습니다.

플러그인

특정 작업을 위해 모아 놓은 task들의 모음집입니다.

plugins {
	id 'java'
    id 'org.springframework.boot' version '3.1.5'
    id 'io.spring.dependency-management' version '1.1.3'
}

의존성 관리

프로젝트에서 사용하는 라이브러리나 패키지를 관리합니다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-security'
  	// ... 
}

라이브러리를 추가하는 시점을 설정할 수 있습니다.

  • Implementation: 컴파일, 런타임 시점 모두 사용
  • compileOnly: 컴파일할 때만 사용, 런타임에는 사용하지 않음
  • runtimeOnly: 런타임 때만 사용
  • testImplementation: 테스트 때만 사용

repositories

라이브러리가 저장된 위치를 정의하고 저장소에서 라이브러리를 가져옵니다.

repositories {
  	mavenCentral()
}

자료 및 코드 출처: 스파르타 코딩클럽

0개의 댓글