[인프런 워밍업 스터디 클럽 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'
}
사용하는 라이브러리/프레임워크 표시
implementation : 해당 의존성을 항시 사용한다.
runtimeOnly : 코드를 실행할때에만 의존성을 사용한다.
testImplementation : 테스트코드를 컴파일하거나 실행할 때 항시 사용한다.
Spring과 SpringBoot의 차이점
간편한 설정
스프링은 강력한 기능을 제공한다.
ex) IoC/DI, AOP, PSA ..
기능을 사용하기 위해
xml
설정을 해야했는데 양이 많았다. -> 어노테이션 기반의 설정으로 변경하고 기본적으로 필요한 것들은 모두 자동 설정
간단한 의존성 관리
Spring을 사용할 때는 개발에 필요한 라이브러리/프레임워크를 모두 기입해야했다.
의존성 관리가 힘들기에
starter
로 묶어서 관리
강력한 확장성
Springboot 내부에 tomcat이 있기에 따로 설정할 필요가 없다.
MSA에 적합한 모니터링
application.yml 파일
YAML 문법
Yet Another Markup Language(또 다른 마크업 언어)
YMAL Ain't Markup Language(마크업 언어가 아니다)
확장자 : .yaml 또는 .yml
key : value 형식으로 데이터를 정의한다.
각 계층은 들여쓰기를 통해 구분하게 되며, 이를 통해 중복을 제거할 수 있다.
value에는 참/거짓, 숫자, 문자열이 들어갈 수 있다.
value에는 배열도 들어갈 수 있다.
-
를 활용한다.#
을 이용하면 주석을 사용할 수 있다.
dev profile 사용
Lombok
getter/setter, 생성자와 같은 반복되는 보일러 플레이트 코드(boiler plate code)를 제거할 수 있다.
dependencies 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 추가
annotationProcessor 'org.projectlombok:lombok'
Spring Boot 2.7.x -> 3.0.x 변경점
java 최소 버전이
17
로 업그레이드스프링 프로젝트, third-party library 버전 업그레이드
AOT 기초 작업
AOT(Ahead Of Time) : 빌드 시 스프링 애플리케이션을 분석하고 최적화하는 도구
애플리케이션 시작 시간과 메모리 사용량을 줄일 수 있게 해준다.
javax -> jakarta 패키지로 변경
모니터링 기능 강화
과제 내용
이번 프로젝트에서는 출퇴근 사내 시스템으로써, 회사 내 팀과 직원 관리, 출퇴근 관리, 그리고 연차 관리 기능을 설계하였습니다. 기본적인 기술 스택으로는 Java 17 / Springboot 3.x.x으로 구성하여 팀 관리에서는 팀 이름을 필수로 등록하고 팀 정보를 조회할 수 있는 기능을 구현했습니다. 직원 관리에서는 직원의 이름, 매니저 여부, 입사 날짜, 생일을 등록하고, 직원 정보를 조회할 수 있게 했습니다.
출퇴근 관리에서는 직원의 출근 및 퇴근 기능을 구현하였으며, 직원의 근무 시간을 날짜별로 조회할 수 있도록 하였습니다. 연차 관리에서는 직원이 연차를 신청하고, 남아있는 연차를 조회할 수 있는 기능을 제공했습니다. 특히, 연차 신청 시 팀마다 다른 등록 기간을 적용하여 유연성을 높였습니다.
📋 미니 프로젝트 Github : commuting-system
회고
이번 프로젝트를 통해 팀, 직원, 출퇴근, 연차 관리를 통합적으로 설계하는 경험을 쌓았습니다. 팀 관리에서는 팀의 필수 정보를 명확히 정의하고, 팀 조회 기능을 통해 팀 운영의 투명성을 높였습니다. 직원 관리에서는 직원의 기본 정보를 체계적으로 관리할 수 있게 되었고, 매니저 여부와 같은 역할 분류를 통해 조직의 구조를 명확히 파악할 수 있었습니다. 출퇴근 관리에서는 출퇴근 예외 처리와 날짜별 근무 시간 조회 기능을 통해 직원들의 근태를 정확히 관리할 수 있었습니다. 연차 관리에서는 연차 신청과 조회 기능을 통해 직원들이 연차를 효율적으로 사용할 수 있도록 했습니다. 팀마다 다른 연차 등록 기간을 적용함으로써 조직의 유연성을 높였습니다. 이 프로젝트를 통해 데이터의 일관성을 유지하면서도 다양한 요구 사항을 충족시키는 설계의 중요성을 깨달았습니다. 또한, 시스템 통합의 복잡성을 이해하고, 사용자 편의성을 고려한 기능 설계의 필요성을 다시 한 번 느꼈습니다.
댓글을 작성해보세요.