[Spring] 기초 Spring 2주차

Yuri·2025년 1월 21일

Spring

목록 보기
3/21

✏️ Spring Framework를 사용하기 위한 기본 개념에 대해서 학습합니다.

Postman

개발자들이 HTTP 요청을 만들고, 서버로부터 응답을 확인하며, API의 기능을 테스트하고 디버깅할 수 있게 해주는 소프트웨어

💡 Postman은 RESTful API뿐만 아니라 GraphQL, SOAP 등 다양한 API 유형을 테스트할 수 있고 Postman 공유를 통한 팀 간의 협업도 가능하다.

프레임워크

📚 소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경. 프레임워크는 frame(틀) work(일하다)의 합성어로 일하기 위한 틀을 제공한다.

장점

  • 개발 프로젝트에 일관된 구조를 제공하여 코드의 일관성과 가독성을 높여주며 팀 협업이 편해진다.
  • 기본적으로 필요한 기능과 도구를 제공하여 개발자들이 핵심 비즈니스 로직에 집중할 수 있다.
  • 보안 관련 기능을 기본적으로 제공하여, 보안 취약점을 방지하는 데 도움을 준다.
  • 통합된 테스트 환경과 도구를 제공하여 테스트를 쉽게 작성하고 실행할 수 있다.
  • 인기 있는 프레임워크는 방대한 커뮤니티 지원을 받으며, 다양한 문서를 활용할 수 있다.

단점

  • 프레임워크는 굉장히 복잡한 구조를 가지기 때문에, 처음 익히는 데 시간이 많이 소요된다.
  • 프레임워크의 새로운 버전이 기존 코드와 호환되지 않을 수 있다.
  • 정해진 규칙과 구조를 따르게 강제하여 자유롭게 변경하기 어려울 수 있다.

라이브러리

📚 애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음을 의미한다. 마치 도서관에 있는 책처럼 개발자가 소프트웨어를 만들 때 필요에 따라 원하는 기능을 구현하기 위해 가져다 쓸 수 있는 일종의 도구 역할을 수행

장점

  • 개발자가 복잡한 코드를 직접 작성하지 않아서 개발 생산성이 높아진다.
  • 검증된 라이브러리는 테스트와 커뮤니티 지원을 통해 안정성과 품질이 보장된다.

단점

  • 라이브러리가 업데이트 되거나 지원이 중단될 경우 문제가 발생할 수 있다.
  • 버전 호환성 문제로 인해 다른 라이브러리나 기존 코드와 충돌이 발생할 수 있습니다.
    • 생각보다 빈번하게 발생하는 문제
  • 불필요한 기능을 포함한 라이브러리를 사용하면 비효율적이다.
  • 라이브러리의 내부 구현을 직접 수정하기 어려워, 특정 요구 사항에 맞게 조정하기 힘들 수 있다.

Annotation

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

💡 주석은 사람에게 정보를 제공하는 것이라면, 어노테이션은 특정 코드를 사용하는 프로그램에게 정보를 전달

정의

@ 기호로 시작하며, 클래스, 메서드, 변수, 매개변수, 패키지 등에 추가

  • 내장 어노테이션
    • @Override
    • @Deprecated: 더 이상 사용되지 않음
    • @SuppressWarnings: 컴파일러 경고 억제
  • 사용자 정의 어노테이션
    • 개발자가 필요에 따라 직접 어노테이션을 정의할 수 있다.
    • 사용자 정의 어노테이션은 특정 메타데이터를 추가하거나,
    • AOP(Aspect-Oriented Programming) 같은 기술과 결합하여 다양한 기능을 구현

Lombok

📚 보일러 플레이트 코드를 줄여주는 라이브러리로 자동으로 보일러 플레이트 코드를 생성하여 코드의 가독성과 유지보수성을 높여준다. Lombok은 어노테이션 기반으로 동작하며, 주로 컴파일 시점에 소스 코드를 변환하여 필요한 메서드를 자동으로 생성

💡 보일러 플레이트 코드(Boilerplate code)
getter/setter 메서드, 생성자, toString 메서드 등과 같이 반복적으로 작성되는 코드

주요 Lombok Annotation

  • @Getter, @Setter
    클래스의 모든 필드에 대한 getter와 setter 메서드를 자동으로 생성

  • @ToString

  • @EqualsAndHashCode

  • 생성자 관련

    • @NoArgsConstructor: 기본 생성자
    • @AllArgsConstructor: 모든 필드를 매개변수로 하는 생성자
    • @RequiredArgsConstructor: 필수 필드(final)만을 매개변수로 하는 생성자
  • @Data

    • @Getter, @Setter, @ToString, @EqualsAndHashCode,@RequiredArgsConstructor를 한꺼번에 적용하는 어노테이션이다.
    • 주로 테스트 용도로 사용
  • @Builder
    빌더 패턴을 적용해 객체를 생성할 수 있게 합니다. 복잡한 객체 생성에 유용하며, 필드 이름을 명시적으로 지정하면서 객체를 생성할 수 있다.

    @Builder
    public class User {
        private String name;
        private int age;
    }
    User user = User.builder()
                    .name("John")
                    .age(30)
                    .build();
  • @slf4j
    클래스에 로그를 남기기 위한 Logger 객체를 자동으로 생성한다.

    @Slf4j
    public class UserService {
        public void logMessage() {
            log.info("This is a log message");
        }
    }
    

Spring Framework

📚 Java Application Framework로 엔터프라이즈 애플리케이션 개발에 주로 사용된다.

💡 엔터프라이즈 애플리케이션은 대규모로 복잡한 비즈니스 프로세스와 데이터를 처리하는 애플리케이션을 뜻한다.

  • Spring Framework는 서버 성능, 안정성, 보안 문제를 고도화된 수준으로 해결해준다.

  • 개발자들은 복잡한 문제를 해결하는 대신, 비즈니스 로직 개발에 집중할 수 있게 되었다.

  • Spring Framework 특징

    • 애플리케이션의 다양한 구성 요소를 유연하게 연결하고 관리할 수 있도록 해준다.
    • Spring Framework는 누구나 사용할 수 있는 오픈소스 이다.
    • 모듈화되어 있어 필요에 따라 특정 기능만 선택적으로 사용할 수 있다.
    • Java언어의 가장 큰 특징인 객체 지향 언어의 특징을 살려낸 프레임워크이다.
      • 캡슐화
      • 상속
      • 추상화
      • 다형성
  • Spring Framework로 만드는 Web Application
  • 라면 : Java
  • 냄비 : Spring

Spring Boot

📚 Spring Framework를 기반으로 하여 간편하고 신속하게 애플리케이션을 개발할 수 있도록 도와주는 도구이다.

등장배경

  • 스프링 프레임워크는 초기 설정과 구성 파일이 복잡하고 방대했다.
  • 스프링 애플리케이션을 개발하고 배포하기 위해서는 여러 가지 의존성 관리와 서버 설정이 필요하다.
  • 최소한의 노력으로 스프링 애플리케이션을 쉽게 개발하고 배포할 수 있는 방법이 필요했다.

Spring Boot의 특징

  • 자동 구성(Auto-configuration) 기능을 제공하여, 개발자가 복잡한 설정을 직접 처리할 필요 없이 기본 설정으로도 비즈니스 로직에 집중할 수 있게 해준다.
  • 내장 WAS(Tomcat)를 제공하여, 애플리케이션을 별도의 서버 설정 없이 바로 실행할 수 있다.
  • spring-boot-starter-web빌드 관리 도구에 추가하면 웹 애플리케이션에 필요한 모든 종속성(라이브러리)과 설정이 자동으로 구성된다.
  • 라이브러리들의 버전을 명시하지 않아도 호환 가능한 버전들을 찾아 자동으로 설정해준다.
    • 주의! 버전 관련 문제를 100% 해결해 주는 것은 아니다.
  • Spring Boot로 만드는 Web Application
  • 라면 : Java
  • 냄비 : Spring
  • 조리 도구 세트 : Spring Boot

빌드 관리 도구

Gradle

📚 Java와 유사한 문법 구조를 가진 Groovy기반의 스크립트 언어를 사용하며 다양한 소프트웨어를 빌드(Build)할 수 있는 유연한 빌드 자동화 도구이다.

빌드(Build)

소스 코드를 컴퓨터가 실행 가능한 파일로 변환해주는 작업

▶︎ 빌드 과정

Gradle 특징

  1. 유연성
    • 복잡한 빌드 시나리오를 처리할 수 있는 유연한 시스템을 제공한다.
    • 빌드 스크립트를 통해 다양한 빌드 작업을 정의하고, 필요한 경우 커스터마이징할 수 있다.
  2. 성능
    • Build Cache
      • 빌드 결과물을 캐싱하여 재사용한다.
      • 라이브러리 의존성을 캐싱하여 재사용한다.
    • 점진적 빌드
      • 마지막 빌드 호출 이후 변경된 부분만 빌드한다.
      • 변경되지 않은 부분은 캐시 결과를 검색해 재사용한다.
    • 데몬 프로세스
      • 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스
      • 초기 빌드 이후부터는 빌드 실행 시 초기화 작업을 거치지 않는다.
  3. 멀티 프로젝트 빌드 지원
    • 공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용할 수 있도록 한다.
  4. 설정 주입 방식
    • 필요한 설정을 직접 프로젝트에 주입하는 방식이다.
    • 공통되는 정보는 묶어서 한번에 주입이 가능하다.
    • 프로젝트별로 설정을 다르게 주입할 수 있다.

build.gradle

Groovy 기반 언어의 빌드 스크립트
소스 코드를 빌드하고, 라이브러리들의 의존성을 관리

  1. 플러그인(plugins)
    • 특정 작업을 위해 모아 놓은 task들의 모음집
  2. 의존성 관리(dependencies)
    • 프로젝트에서 사용하는 라이브러리나 패키지를 관리한다.
    • 의존성 설정
      • 라이브러리를 추가하는 시점을 설정할 수 있다.
      • Implementation: 컴파일, 런타임 시점 모두에서 사용한다.
      • compileOnly: 컴파일할 때만 사용되고 런타임 때에는 사용하지 않는다.
      • runtimeOnly: 런타임 때만 사용한다.
      • testImplementation: 테스트할 때만 사용한다.
  3. repositories
    • 라이브러리가 저장된 위치를 정의하고 저장소에서 라이브러리를 가져온다.
      repositories {
          mavenCentral()
      }

Java 웹 기술의 역사

🏁 Servlet의 등장 (1997)
→ JSP (JavaServer Pages) 도입 (1999)
→ Servlet, JSP 기반의 MVC 패턴 도입
→ MVC 프레임워크의 등장과 발전 (2000~2010)
Annotation 기반의 Spring MVC(2007~현재)
→ 🌱 Spring Boot의 등장(2014~현재)

최신 기술 동향

  1. Web Servlet
    • Spring MVC
      • 안정적이고 동기식 프로그래밍 모델을 기반으로 한 웹 애플리케이션 개발에 널리 사용된다.
  2. Web Reactive
    • Spring WebFlux
profile
안녕하세요 :)

0개의 댓글