내배캠 TIL 23일차

오병택·2025년 3월 20일

내배캠

목록 보기
45/73

학습 요약

Spring 입문 강의

Spring 입문 2주차

Postman

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

프레임워크

소프트웨어 개발을 간편하게 만들기 위한 소프트웨어 개발 환경

  • 애플리케이션을 개발할 때 전체적인 구조(frame)를 잡기 위해 사용
  • 기본적으로 프레임워크 내에서 사용하는 라이브러리들이 존재

라이브러리

애플리케이션 개발에 필요한 클래스, 함수 등을 모아 놓은 코드의 모음을 의미

  • 개발을 진행하는 과정에서 필요한 기능을 구현하기 위해 사용

Annotation

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

주석은 사람에게 정보 전달하는 것, annotation은 컴퓨터에게 정보 전달하는 것

어노테이션 정의

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

내장 어노테이션

@Override
@Deprecated : 해당 요소 더 이상 사용X
@SuppressWarnings : 컴파일러 경고 억제

사용자 정의 어노테이션

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

Lombok

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

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

주요 Lombok Annotation

@Getter, @Setter

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

@ToString

객체의 toString() 메서드를 자동으로 생성

@EqualsAndHashCode

equals()hashCode() 메서드를 자동으로 생성

@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는 누구나 사용할 수 있는 오픈소스.
  • 모듈화되어 있어 필요에 따라 특정 기능만 선택적으로 사용할 수 있음
  • Java언어의 가장 큰 특징인 객체 지향 언어의 특징을 살려낸 프레임워크
    캡슐화, 상속, 추상화, 다형성

Spring Boot

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

Spring Boot의 특징

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

정리하자면 라면은 Java, 냄비는 Spring, 조리도구는 Spring Boot

빌드 관리 도구

Gradle

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

빌드(Build)

  • 소스 코드를 컴퓨터가 실행 가능한 파일로 변환해주는 작업
  • 빌드에 필요한 과정

빌드 자동화 도구

빌드, 라이브러리 관리, 테스트, 배포 등을 자동화 하여 수행

Gradle 특징

  1. 유연성

    • 복잡한 빌드 시나리오를 처리할 수 있는 유연한 시스템을 제공
    • 빌드 스크립트를 통해 다양한 빌드 작업을 정의하고, 필요한 경우 커스터마이징할 수 있음
  2. 성능

    • Build Cache
      • 빌드 결과물을 캐싱하여 재사용
      • 라이브러리 의존성을 캐싱하여 재사용
    • 점진적 빌드
      • 마지막 빌드 호출 이후 변경된 부분만 빌드
      • 변경되지 않은 부분은 캐시 결과를 검색해 재사용
    • 데몬 프로세스
      • 다음 빌드 작업을 위해 백그라운드에서 대기하는 프로세스
      • 초기 빌드 이후부터는 빌드 실행 시 초기화 작업을 거치지 않음
  3. 멀티 프로젝트 빌드 지원

    • 공통으로 사용하는 클래스를 모듈로 만들어 독립적인 각 프로젝트에서 사용할 수 있도록 함
  4. 설정 주입 방식

    • 필요한 설정을 직접 프로젝트에 주입하는 방식
    • 공통되는 정보는 묶어서 한번에 주입이 가능
    • 프로젝트별로 설정을 다르게 주입할 수 있음

build.gradle

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

build.gradle 전체 구조

1. 플러그인

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

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

아래 task들이 추가되어 실행할 수 있게 됨

2. 의존성 관리

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

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

    // SECURITY
    implementation 'org.springframework.boot:spring-boot-starter-security'

    // WEB
    implementation 'org.springframework.boot:spring-boot-starter-web'

    // LOMBOK
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    // MySQL
    runtimeOnly 'com.mysql:mysql-connector-j'

    // Validation
    implementation 'org.springframework.boot:spring-boot-starter-validation'

    // JWT
    compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
    runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

    // DEV_TOOL
    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    // TEST
    testRuntimeOnly 'com.h2database:h2'
    testCompileOnly 'org.projectlombok:lombok'
    testCompileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

의존성 설정

  • 라이브러리를 추가하는 시점을 설정할 수 있음
  • Implementation
    - 컴파일, 런타임 시점 모두에서 사용
  • compileOnly
    • 컴파일할 때만 사용되고 런타임 때에는 사용X
  • 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~현재)

느낀 점

계속 하다보니까 나름 알아가는 맛이 있는 것 같기도 하고 조금씩 익숙해지는 느낌이 든다. 빠르게 빠르게 TIL 속도를 좀 올려야 겠다. 지금 5주차 강의 거의 끝나가는 데.. 화이팅!

profile
걱정하지 말고 일단 해봐!

0개의 댓글