티스토리 뷰
231017 TIL : [Spring-boot] 개발자 키우기 프로젝트: H2 데이터베이스, ENUM 클래스
개발중인 감자 2023. 10. 18. 00:43📌 231017 TIL : [Spring-boot] 개발자 키우기 프로젝트
H2 데이터베이스, ENUM 클래스
1. H2 Database?
스프링 부트가 지원하는 인메모리 관계형 데이터 베이스
즉 Mysql 같은 RDBMS.
메모리에 담는 DB라서, 끄면 데이터들도 같이 삭제된다.
그래서 과제나 테스트시 유용.
용량이 가볍고, 로컬 환경, 테스트 환경에서 많이 쓰임.
인메모리 데이터베이스 (In-Memory Database) : 디스크가 아닌 주 메모리에 모든 데이터를 보유하는 데이터 베이스. 디스크 검색보다 접근이 훨씬 빠르다는 장점이 있다. 단점은 휘발성으로, 서버 전원을 끄면자료들이 삭제된다. 그래서 보통 로그인 세션같은 서버가 꺼져도 상관없은 임시 데이터에 많이 사용된다.
📝 gradle 주입 방법
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
compileOnly 'org.projectlombok:lombok'
...
runtimeOnly 'com.h2database:h2'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
📝 Gradle에서 의존성 주입할 때의 키워드 차이
runtimeOnly ?
라이브러리가 런타임에만 필요하다는 것을 의미함.
프로젝트 빌드 시점에 해당 라이브러리를 추가하지 않고, 런타임시에만 라이브러리를 프로젝트에 포함함.
complieOnly ?
라이브러리가 컴파일 시점에만 필요함. 이 옵션을 사용하면 프로젝트 빌드 시점에서 해당 라이브러리를 사용하고, 빌드된 결과물에선 포함하지 않음. 즉 컴파일 시점에서만 라이브러리를 참조함.
예를 들어 프로젝트에서 테스트 코드를 작성할 때, junit 라이브러리를 compileOnly로 설정하여, 테스트코드 컴파일 시에만 참조할 수 있도록 함.
Implementation ?
라이브러리가 컴파일, 런타임 둘다 필요함. 프로젝트 빌드 시점에 해당 라이브러리를 컴파일에 사용하고, 빌드된 결과물에도 포함됨. 라이브러리와 관련된 클래스 및 메소드를 프로젝트에서 직접 참조도 가능함.
2. Enum 클래스?
Enumerated type의 줄임말로 열거형이라고도 불림.
열거형, 이넘(enum)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형
enum은 상수 그룹(final 변수처럼 바꿀 수 없는 변수)을 나타내는 특수한 클래스다.
대문자로 써서 쉼표로 구분하고 enum 키워드를 붙이면 된다.
📝 장점
- 문자열과 비교해, IDE의 적극적인 지원을 받을 수 있다.
- 허용 가능한 값들을 제한할 수 있다.
- 리팩토링시 변경 범위가 최소화 할 수 있다.
📝 특징
- 클래스를 상수처럼 사용 할 수 있다.
- Enum 클래스에서 선언한 상수들은 클래스가 로드될 때 하나의 인스턴스로 생성되어 싱글톤 형태로 어플리케이션 전체에서 사용된다.
- 서로 관련 있는 상수 값들을 모아 enum으로 구현하는 경우 유용하다.
- 클래스와 같은 문법 체계를 따른다.
- 상속을 지원하지 않는다.
📝 Enum의 내부 Api
1. values()
- values() 는 Enum 클래스가 가지고 있는 모든 상수 값을 배열의 형태로 리턴 한다. 참고로 단순히 String 의 형태로 단순 반환하는 것이 아니라 인스턴스를 반환하는 것이다. 즉 Enum 클래스가 가지고 있는 모든 인스턴스를 배열에 담아 반환하는 것이다.
2. valueOf()
- valueOf() 메서드는 String 을 파라미터로 받는데 인자로 들어온 String 과 일치하는 상수 인스턴스가 존재하면 그 인스턴스를 반환한다. 이 또한 마찬가지로 단순히 문자열을 반환하는 것이 아니라 인자로 들어온 문자열과 일치하는 인스턴스를 반환하는 것이다.
3. ordinal()
- Enum 클래스 내부에 있는 상수들의 Index 를 리턴하는 메소드이다. 배열과 마찬가지로 0부터 인덱스가 시작하며 인덱스의 length 는 상수의 수 - 1 이다.
📝 사용 예제
예시 1) 개발자 키우기 중 개발자 레벨 (주니어, 중니어, 시니어)를 정의하고 싶을 때.
@AllArgsConstructor
@Getter
public enum DeveloperLevel {
NEW("신입 개발자"),
JUNIOR("주니어 개발자"),
JUNGNIOR("중니어 개발자"),
SENIOR("시니어 개발자");
private final String description;
}
Entity 클래스에서 @Enumerated(EnumType.String) 을 통해 validataion을 진행한다.
@Entity
public class Developer {
@Enumerated(EnumType.STRING)
private DeveloperLevel developerLevel;
@Enumerated(EnumType.STRING)
private DeveloperSkillType developerSkillType;
}
예시 2) 사용자 커스텀 예외처리 클래스에서 예외 메세지를 eunm으로 처리하는 경우
@AllArgsConstructor
@Getter
public enum DMakerErrorCode {
NO_DEVELOPER("해당되는 개발자가 없습니다."),
DUPLICATED_MEMBER_ID("MemberId가 중복되는 개발자가 있습니다."),
LEVEL_EXPERIENCE_YEARS_NOT_MATCHED("개발자 레벨과 연차가 맞지 않습니다."),
INTERNAL_SERVER_ERROR("서버에 오류가 발생했습니다."),
INVALID_REQUEST("잘못된 요청입니다.")
;
private final String message;
}
비즈니스 로직을 처리하는 부분에서 유효처리를 진행할 때, 예외를 던질 때 예외메세지를 담아 보내기 유용하다.
예를 들어 개발자 레벨이 Senior인데, 개발 경력이 10년 미만이면 예외를 검증하고 싶다면,
LEVEL_EXPERIENCE_YEARS_NOT_MATCHED("개발자 레벨과 연차가 맞지 않습니다.") 메세지를 담아 보낸다.
if (developerLevel == DeveloperLevel.SENIOR && experienceYears < 10) {
throw new DMakerException(LEVEL_EXPERIENCE_YEARS_NOT_MATCHED);
}
출처-
https://techblog.woowahan.com/2527/
https://velog.io/@kyle/%EC%9E%90%EB%B0%94-Enum-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9
'백엔드 공부하기 > TIL' 카테고리의 다른 글
231018 TIL : [Spring-boot] 개발자 키우기 프로젝트 : 글로벌한 예외처리 방법들 (1) | 2023.10.18 |
---|---|
231017 TIL : [Spring-boot] 개발자 키우기 프로젝트 : 날짜 자동으로 테이블에 값 넣는 방법. (JPA) (0) | 2023.10.18 |
231005 TIL : [Spring] Bean, IoC, DI (0) | 2023.10.06 |
231002 TIL : 알고리즘 트라이 (Trie) (1) | 2023.10.02 |
230922 TIL : Spring boot로 게시판 만들기 - 2. 게시글 삽입, 조회, 삭제 구현 (0) | 2023.09.23 |
- Total
- Today
- Yesterday
- 데이터베이스
- 국비지원취업
- springboot
- #국비지원취업
- TiL
- 자료구조
- 자료구조 #스택 #큐 #덱 #선형자료구조
- Java
- 야놀자
- 국비지원캠프
- 스터디후기
- boj
- 프로젝트후기
- 국비지원
- 그룹스터디워크샵
- 채팅기능개발
- 카카오API
- 야놀자X패스트캠퍼스부트캠프
- 백엔드
- 부트캠프
- 커리어멘토링
- be
- 백준
- 백엔드부트캠프
- 백엔드개발자
- 과정중간회고
- 패스트캠퍼스
- 그룹스터디
- 패스트캠퍼스강의
- qjzl
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |