η Spring Boot

@Autowired·2022년 1월 5일
2

Spring Boot

목록 보기
1/11

Spring Boot 수업 내용 간단 정리!

Spring Boot 수업내용 정리입니다.
예제는 따로 정리하도록 하겠습니다.
나중에 알아보기 쉽게 하기위해 정리하는것이니 내용이 부실하다는 등 비난은 하지 말아주세요 :D
저는 맥 유저라 윈도우 환경과 약간 다를 수 있습니다.


Spring Boot 들어가기 전 간단 정리


  • 그동안 진행한 수업에서 사용한 언어 & IDE 정리
수업내용언어IDE(tool)프레임워크설치
JavaJavaEclipseOpen JDK 11 (Coretto)
fronthtml, css, javascript, jqueryVisual Studio Code
DBmysqlMySQL workbenchmysql server
SpringJavaSTS (Spring Tool suite) = Eclipse + Spring3Spring Framework 5.2.9
Spring BootJavaintelliJ IDEA UltimateSpring Boot 2.5.3

  • Spring Framework & Spring Boot 차이점
화면DB (ORM, Object Relation Mapping)dependency
Spring BootthymeleafSpring Data JPAgradle
Spring FrameworkJSPmybatispom.xml (maven)

IntelliJ

  • 이번 수업 때 사용하는 IDE (Intellij IDEA Ultimate)

    • 학원 교육용 버젼으로 무료로 사용

기본 프로젝트 생성 방법

  1. new → Spring Initializr → 프로젝트명 입력 → 경로 입력 → Java & Gradle 선택 → Group + Artifact = com.xxx.xxx → SDK (corretto-11) → java 11 → jar 선택 후 Next

  2. Lombok & Spring Web & Thymeleaf 체크 후 Finish 하면 기본 프로젝트 생성 완료.

Ultimate 버젼이 아닌 무료 버젼에서의 생성 방법

  • Spring 페이지 접속 후 필요한 Dependency 선택 후 GENERATE 및 압축 해제 후 프로젝트 폴더에 넣기

IntelliJ Dependency

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// implementation : 구현에 사용됨.
runtimeOnly 'mysql:mysql-connector-java'
// 위 코드는 MySQL 사용 시 사용하는 Dependency
compileOnly 'org.projectlombok:lombok'
// compileOnly : 컴파일에만 사용
annotationProcessor 'org.projectlombok:lombok'
// annotationProcessor : 어노테이션 지정
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// testImplementation : 테스트시 사용

각 폴더 & 파일이 하는 역할

  1. src/main/java/com.xxx.xxx

    • 스프링 프레임워크에서의 역할과 동일
  2. src/resources/

    • static

      • 정적자원 (css, js 등등)을 저장
    • templates

      • 스프링 프레임워크의 views 폴더 역할과 동일
    • *.yml

      • 포트번호 및 Project Run 설정을 하는 파일

      • 스프링 프레임워크의 xml과 비슷한 역할

  3. .gitignore

    • git에 올리기 싫은 파일이나 폴더를 정하는 공간.
  4. build.gradle

    • grale을 관리하는 파일, dependency도 이 파일에서 관리함.
  5. External Libraries

    • Spring Boot가 자동으로 설정(서버 & 기타 여러가지)한 파일들이 저장되는 폴더

REST API

  • 주소 요청만 가지고 작업 수행

    • 회원가입, 회원조회, 목록출력, 상세조회, 수정, 삭제 등
  • 사용하는 Http Request Method

    • 기존 주소 : get(R), post(C), put(덮어쓰기) patch(일부분만 수정)(U), delete(D)

    • REST API 주소 : GetMapping, PostMapping, PutMapping, DeleteMapping

기능기존방식기존방식 http methodrest api 방식rest 방식 http method
회원가입 페이지 요청/member/joinGET/member/joinGET
회원가입/member/joinPOST/member/joinPOST
로그인 페이지 요청/member/loginGET/member/loginGET
로그인/member/loginPOST/memberloginPOST
목록 조회/member/findAllGET/memberGET
상세 조회(2번회원)/member/detial?m_number=2GET/member/2GET
삭제 처리(2번회원)/member/delete?m_number=2GET/member/2 or /member/delete/2DELETE or GET
수정화면 요청(2번회원)/member/update?m_number=2GET/member/update/2GET
수정 처리(2번회원)/member/update?m_number=2POST/member/2PUT
로그아웃/member/logoutGET/member/logoutGET

Spring Boot에서 정보 전달

  • JPA를 사용

  • Entity Class가 새로 추가됨.

    • JPA와 Entity 사용 시

      • DB에서 직접 create table을 하지 않아도 Entity가 자동으로 생성해줌.

      • DB에서 CRUD를 직접 안해도 됨. 메서드 호출을 통해 할 수 있음.

      • 어떤 DB를 사용하던 전체적으로 내용을 바꿀 필요가 없음.

  • 과정

  1. Controller에서 Service 호출

  2. DTO에 정보를 담아 전달

  3. Service에서 Entity 호출 & Repository 호출

  4. DTO에 담긴 정보를 Entity 타입으로 변환 or Entity타입을 DTO 형태로 변환

  5. Repository (PK가 아닌 값을 사용할 때 Repository에 메서드 생성 & 사용)

  6. DB에서 정보 처리 후 역순


객체 주입

  1. 의존성 주입 (DI, Dependency Injection)

    • 스프링이 객체를 관리할 수 있도록 어노테이션 사용

      • @Controller, @Service, @Repository 등
  2. 일반적인 객체 생성 방식

MemberDTO member = new MemberDTO();
  1. 필드 주입 (기존 방식)
@Controller
public class MemberController {

	@Autowired
	private MemberService ms;

}

public interface MemberServiceInterface {

}
    
@Service
public class MemberService implements MemberServiceInterface {

}
  1. 생성자 주입
    • 엉뚱한 클래스를 호출할 가능성이 거의 없어지기 때문에 아래와 같은 방법 사용
// 정석 방식
@Controller
public class MemberController {

	private final MemberService ms;

	@Autowired
	public MemberController(MemberService ms) {
		this.ms = ms;
	}

}

-----------------------------------------------------

// 롬복 적용
@Controller
@RequiredArgsConstructor
// final이 붙은 애들은 자동으로 생성자를 주입.
public class MemberController {

	private final MemberSerivce ms;

}
    
public interface MemberServiceInterface {

}

@Service
public class MemberService implements MemberServiceInterface {

}

Entity Class

  • static 메서드를 작성하는 공간

    • 팩토리 메서드라고 표현하기도 함.
  • static 메서드를 사용하는 이유

    • Entity Class의 생성자를 노출하지 않도록 하기 위해서 사용

    • 가독성 있는 이름을 줄 수 있음 (생성자 이름 변경 가능)

    • 일반 생성자는 리턴을 줄 수 없지만 static 메서드는 리턴 가능


JPA

  • mybatis(mapper)와 비슷한 역할

  • select같은 쿼리문을 쓸 필요 없이 자동으로 쿼리문 역할을 수행하게 해줌.

  • Entity 타입만 받기 때문에 Service에서 DTO타입을 Entity타입으로 변환해줘야함.

  • 주의할점!

    • PK로 정한 값이 아닌 값을 사용해야 할 때 Repository에서 만들어야 함.
      ex) 로그인 체크 등

    • 메서드의 이름을 마음대로 바꾸면 인식을 못함.

    • 반드시 JPA에서 제공하는 메서드 양식 지켜서 사용!
      ex) findByNumber -> memberDetail (X)

profile
즐겁다!

0개의 댓글