[SQL응용]Maven 사용법

예지성준·2024년 5월 11일
0

maven

  • 빌드, 의존성(필요한 라이브러리 jar(Java Archive))관리, 배포, 테스트 툴

1. 설치

maven 설치

  • 환경변수 편집
    PATH에 maven bin 폴더 경로 추가
    D:\폴더명\apache-maven-3.9.6\bin

깃에 올라가는거 방지 ~

cmd에 설치 잘 되었는지 확인해주기
mvn -v

2. 사용

maven 프로젝트 생성

mvn archetype:generate

다운중 ...
enter + enter

groupId : 소속된 그룹(도메인 방식)
예) org.project

D드라이브 이름 폴더에서 만들기

artifactId : 프로젝트 구분 명칭


프로젝트 디렉토리 구조

  • 클래스패스 : 클래스 파일을 인식할 수 있는 경로

🔽
src/main/java: 작성한 자바코드(.java)
src/main/resources: 정적 자원

  • 설정 파일(xml, properties)
  • css, js, 이미지
  • 바뀌지 않는 자원들
  • 테스트 자바 자원은 main 자원들에 접근 가능함, 테스트 환경에 접근 할 수는 없음

🔽
src/test/java : 테스트 자바 코드(.java)
src/test/resources : 테스트시 필요 정적 자원

  • 고립되어있는 자원들/ 테스트 환경 내 자원들은 테스트 환경끼리만 접근 가능

pom.xml : maven 설정 파일

👩‍🏫참고) node: package.json 파일과 동일한 역할

#자바 버전 수정

<?xml version="1.0" encoding="UTF-8"?>: xml 선언자 (xml파일로 인식하게끔 해준다.)

   <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> : 소스 인코딩, 3바이트 형태
    <maven.compiler.source>17</maven.compiler.source> : 소스 컴파일 자바 버전
    <maven.compiler.target>17</maven.compiler.target> : 배포 파일(jar) 생성시 자바 버전
  </properties>


의존성 설정

<dependencies>
#추가할 의존성
# 프로젝트에 필요한 라이브러리
</dependencies>	

dependency태그 안에 있는 라이브러리가 자동 추가된다.

🔽getter setter 자동생성해 줄 의존성 추가하기

두군데 다 가능

Repository lombok

#의존성 추가
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.32</version>
    <scope>provided</scope>
</dependency>

💥의존성 추가 완료 !!

C 드라이브
사용자/.m2 -> 메이븐 레포지토리 (공유)

메이븐에서 의존성 추가하면 없던 의존성은 m2 다운받아져서 관리한다.
동일한 의존성이 다운받아져있으면 m2에서 다 공유해서 가져다 쓴다.


scope

<scope>test</scope>
배포할때 포함시킬지 말지 여부를 설정

  • compile (기본값) : 빌드시(컴파일시) 포함, 배포시 포함

  • runtime : 빌드시 포함 X, 실행할때는 필요한 라이브러리(동적로딩 - Class.forName(...))

  • provided : 개발시에만 필요, 빌드 및 배포시에는 미포함 -> 플랫폼 내에서 제공되는 라이브러리
    예) servlet-api, servlet.jsp-api

  • test : 테스트 시에만 필요한 라이브러리

mvn compile : java 파일 -> class 컴파일 (target 폴더)

  • 일괄 컴파일 -> 하기 전 clean 먼저 하는게 좋음 -> 🔖mvn clean compile

mvn clean : 컴파일 소스 전체 지우기(target 폴더 삭제)

  • 기존 컴파일 소스가 있으면 충돌 발생
    예) 기존 컴파일 소스 삭제 후 다시 컴파일
    mvn clean compile

    mvn clean 후 target폴더 삭제

mvn test : 테스트 케이스를 실행(전체)

  • AppTest 파일

mvn package : 배포 파일 생성(jar)
1. compile -> 2. test -> 3. package(jar파일 만들어짐) -> 테스트 미통과시 배포 X
mvn) 기존 컴파일 소스 삭제 후 배포 실행
-> clean 먼저하기 mvn clean package

실행가능한 자바 아카이브 파일 생성
: jar 파일 실행 -> java -jar 파일명.jar


인텔리제이에 maven이 탑재되어있다. 아이콘 존재

명령기록되어있는 곳에서 명령어를 선택해서 cmd에서 한 것 처럼 실행시킬 수 있다.
앞으로 직접 생성 할 필요 없이 인텔리제이에서 실행시킬거임!!

인텔리제이로 maven 프로젝트생성

  • 📌인텔리제이에서 메이븐 프로젝트 생성하기

  • 📌 pom.xml 수정
    properties와 의존성추가(필요한 라이브러리) + 동기화하기 sync 버튼
    lombok 의존성 추가는 maven repository에서 코드 받아오기

👩‍🏫참고
버전표기법
1.18.32
Major.Minor.Patch
Major- 기존 버전과 호환되지 않은 버전
Minor - 기존 버전과 호환에는 문제 x
Patch - 오류, 기능 개선

  • 📌plugin 설치하기

lombok

  • 데이터 전달용 클래스를 편하게 쓸 수 있게 해줌

1. 의존성설정

2. 사용💌

🔖@Getter : - getter 패턴 자동 생성
🔖@Setter : - setter 패턴을 자동 생성
🔖@ToString : - toString 패턴을 자동 생성
@ToString.Exclude - toString()에 배제할 항목
@ToSTring.Include - toString()에 추가

🔖@NoArgsConstructor : 기본 생성자(매개변수 X)

  • 기본값 public

🔖@AllArgsConstructor : 모든 매개변수를 초기화하는 생성자 패턴

  • @AllArgsConstructor를 해주는 경우 객체를 만들수있는 생성자? 가 생겼다고 판단하여 기본 생성자 자동 생성이 안되기 때문에 @NoArgsConstructor도 같이 해줘야 오류발생하지 않는다.

🔖@RequiredArgsConstructor : 초기화가 반드시 필요한 멤버 변수를 매개변수로 하는 생성자
특정 멤버변수만 매개변수로 할때 사용

1. 멤버 변수가 상수(final)일때

  • 멤버변수를 final(상수)로 정의한 경우, 값을 대입하지 않은 경우

🔼 해당 애노테이션에서 필수 인자 알아서 생성해줌

값 잘 들어가있다! final을 가지고도 생성자 매개변수에 들어가는 값을 지정해 줄 수 있다.

2. @NonNull이 붙어 있는 멤버 변수

  • 초기화가 반드시 필요한 멤버변수를 지정

  • 동등성 비교의 기준 추가 -> 값이 같으면 같은 객체로 만들기 위해 ...
    🔖@EqualsAndHashCode : equals, hashcode 메서드 자동 생성

🔖@Data : @Getter + @Setter + @ToString + @EqualsAndHashCode -> 한번에 추가

🔖@Log : log 멤버 변수 자동 추가
trace(), debug() .info(), warn() ...

🔖@Builder : builder 패턴 자동 완성

👩‍🏫참고)builder 패턴

  • 값을 설정 -> 객체를 내부에서 생성하는 패턴
    외부에서 객체 생성 X
  • 기본 생성자 접근제어자: private
  • setter를 대신 할수 있는 대안적인 패턴
  • 1) 정적 내부 클래스인 Builder
    • 객체를 생성
    • 멤버 변수 초기화(
      메서드 체이닝
      )
    • 멤버 변수명과 동일한 메서드명(setter를 대신)
  • 2) build()를 통해서 생성된 객체 반환
#Builder패턴 구조 알기
#하단 코드 대신 lombok을 통해서 사용하면 된다.
package member;

import java.awt.print.Book;
import java.time.LocalDateTime;

public class User {
    //내부에서 객체 생성 목적

    private String userId;
    private String userNm;
    private String email;
    private LocalDateTime regDt;

    private User(){

    } //기본 생성자 접근 통제

    @Override
    public String toString() {
        return "User{" +
                "userId='" + userId + '\'' +
                ", userNm='" + userNm + '\'' +
                ", email='" + email + '\'' +
                ", regDt=" + regDt +
                '}';
    }

    public static Builder builder(){

        return new Builder(); //Builder 클래스 객체 반환
    }

    //내부에 정적 클래스 정의 (객체 만들고 값 설정)
    public static class Builder{ //내부에서 빌더클래스를 통해서 객체 생성해서 반환해줄거임
        private User user = new User(); //객체생성
        public Builder userId(String userId){
            user.userId = userId; //값 설정
            return this; //builder는 메서드 체이닝방식 -> (this) 같은 객체를 연달아 반환
        }
        public Builder userNm(String userNm){
            user.userNm = userNm;
            return  this;
        }
        public Builder email(String email){
            user.email = email;
            return  this;
        }
        public Builder regDt(LocalDateTime regDt){
            user.regDt = regDt;
            return  this;
        }
        public User build(){ //완성된 객체 내보냄
            return user;
        }
    }
}
/builder 패턴은 기본 생성자가 private이다. 기본 생성자를 꼭 써야하는경우
//편법으로... @NoArgsConstructor, @AllArgsConstructor 사용

메서드 체이닝 방식으로 불러온다.


@Builder 사용하면 간단하게 만들수있다.

#user02클래스

#test클래스

profile
꽁꽁 얼어붙은 한강 위로 😺

0개의 댓글