[인프런 워밍업 스터디 클럽 1기] BE 4주차 회고록

[인프런 워밍업 스터디 클럽 1기] BE 4주차 회고록

네 번째 발자국


자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]를 수강하고

인프런 워밍업 클럽에 참여하여 쓰는 네 번째 회고록입니다.

학습 내용


build.gradle

  • 빌드 스크립트라고 불린다.

  • gradle을 이용하여 프로젝트를 빌드하고 의존성을 관리하기 위해 작성되었다.

  • 현재는 groovy 언어를 사용해 작성되어있고, kotlin 언어를 사용할 수도 있다.

 

플러그인

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

 

org.springframework.boot 플러그인

  • 스프링을 빌드했을 때 실행 가능한 jar 파일이 나오게 도와준다.

  • 스프링 애플리케이션의 실행을 도와준다.

  • 이 외의 플러그인들이 적용될 수 있도록 해준다.

io.spring.dependency-management 플러그인

  • 외부 라이브러리, 프레임워크의 버전 관리

  • 의존성 처리하는 데 사용

java 플러그인

  • java 프로젝트 개발 시 필요한 기능 추가

  • JVM 언어 Gradle 플러그인의 사용할 수 있는 기반 마련

 

그룹

group = 'sample'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

group

  • 프로젝트 그룹

  • 빌드 결과물에 프로젝트 그룹에 대한 정보가 들어있다.

version

  • 프로젝트 버전

sourceCompatibility

  • 프로젝트가 사용하고 있는 JDK 버전

 

레포지토리

repositories {
    mavenCentral()
}
  • 외부 라이브러리/ 프레임워크를 가져오는 장소 설정

 

의존성(dependencies)

dependencies {
    // Spring boot
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'

    // test
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

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

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

사용하는 라이브러리/프레임워크 표시

  1. implementation : 해당 의존성을 항시 사용한다.

  2. runtimeOnly : 코드를 실행할때에만 의존성을 사용한다.

  3. testImplementation : 테스트코드를 컴파일하거나 실행할 때 항시 사용한다.

Spring과 SpringBoot의 차이점

  1. 간편한 설정

    1. 스프링은 강력한 기능을 제공한다.

      ex) IoC/DI, AOP, PSA ..

    2. 기능을 사용하기 위해 xml 설정을 해야했는데 양이 많았다. -> 어노테이션 기반의 설정으로 변경하고 기본적으로 필요한 것들은 모두 자동 설정

  2. 간단한 의존성 관리

    1. Spring을 사용할 때는 개발에 필요한 라이브러리/프레임워크를 모두 기입해야했다.

    2. 의존성 관리가 힘들기에 starter로 묶어서 관리

  3. 강력한 확장성

    1. Springboot 내부에 tomcat이 있기에 따로 설정할 필요가 없다.

  4. MSA에 적합한 모니터링

application.yml 파일

  • YAML 문법

    • Yet Another Markup Language(또 다른 마크업 언어)

    • YMAL Ain't Markup Language(마크업 언어가 아니다)

    • 확장자 : .yaml 또는 .yml

    • key : value 형식으로 데이터를 정의한다.

    • 각 계층은 들여쓰기를 통해 구분하게 되며, 이를 통해 중복을 제거할 수 있다.

    • value에는 참/거짓, 숫자, 문자열이 들어갈 수 있다.

    • value에는 배열도 들어갈 수 있다. - 를 활용한다.

    • #을 이용하면 주석을 사용할 수 있다.

application.properties

Lombok

  • getter/setter, 생성자와 같은 반복되는 보일러 플레이트 코드(boiler plate code)를 제거할 수 있다.

  • dependencies 추가

    • compileOnly 'org.projectlombok:lombok'

  • annotationProcessor 추가

    • annotationProcessor 'org.projectlombok:lombok'

Spring Boot 2.7.x -> 3.0.x 변경점

  1. java 최소 버전이 17로 업그레이드

  2. 스프링 프로젝트, third-party library 버전 업그레이드

  3. AOT 기초 작업

    1. AOT(Ahead Of Time) : 빌드 시 스프링 애플리케이션을 분석하고 최적화하는 도구

      1. 애플리케이션 시작 시간과 메모리 사용량을 줄일 수 있게 해준다.

  4. javax -> jakarta 패키지로 변경

  5. 모니터링 기능 강화

     

과제 내용


이번 프로젝트에서는 출퇴근 사내 시스템으로써, 회사 내 팀과 직원 관리, 출퇴근 관리, 그리고 연차 관리 기능을 설계하였습니다. 기본적인 기술 스택으로는 Java 17 / Springboot 3.x.x으로 구성하여 팀 관리에서는 팀 이름을 필수로 등록하고 팀 정보를 조회할 수 있는 기능을 구현했습니다. 직원 관리에서는 직원의 이름, 매니저 여부, 입사 날짜, 생일을 등록하고, 직원 정보를 조회할 수 있게 했습니다.

출퇴근 관리에서는 직원의 출근 및 퇴근 기능을 구현하였으며, 직원의 근무 시간을 날짜별로 조회할 수 있도록 하였습니다. 연차 관리에서는 직원이 연차를 신청하고, 남아있는 연차를 조회할 수 있는 기능을 제공했습니다. 특히, 연차 신청 시 팀마다 다른 등록 기간을 적용하여 유연성을 높였습니다.

📋 미니 프로젝트 Github : commuting-system

회고


이번 프로젝트를 통해 팀, 직원, 출퇴근, 연차 관리를 통합적으로 설계하는 경험을 쌓았습니다. 팀 관리에서는 팀의 필수 정보를 명확히 정의하고, 팀 조회 기능을 통해 팀 운영의 투명성을 높였습니다. 직원 관리에서는 직원의 기본 정보를 체계적으로 관리할 수 있게 되었고, 매니저 여부와 같은 역할 분류를 통해 조직의 구조를 명확히 파악할 수 있었습니다. 출퇴근 관리에서는 출퇴근 예외 처리와 날짜별 근무 시간 조회 기능을 통해 직원들의 근태를 정확히 관리할 수 있었습니다. 연차 관리에서는 연차 신청과 조회 기능을 통해 직원들이 연차를 효율적으로 사용할 수 있도록 했습니다. 팀마다 다른 연차 등록 기간을 적용함으로써 조직의 유연성을 높였습니다. 이 프로젝트를 통해 데이터의 일관성을 유지하면서도 다양한 요구 사항을 충족시키는 설계의 중요성을 깨달았습니다. 또한, 시스템 통합의 복잡성을 이해하고, 사용자 편의성을 고려한 기능 설계의 필요성을 다시 한 번 느꼈습니다.

댓글을 작성해보세요.

채널톡 아이콘