Spring Boot 수업 내용 간단 정리!
Spring Boot 수업내용 정리입니다.
예제는 따로 정리하도록 하겠습니다.
나중에 알아보기 쉽게 하기위해 정리하는것이니 내용이 부실하다는 등 비난은 하지 말아주세요 :D
저는 맥 유저라 윈도우 환경과 약간 다를 수 있습니다.
수업내용 | 언어 | IDE(tool) | 프레임워크 | 설치 |
---|---|---|---|---|
Java | Java | Eclipse | Open JDK 11 (Coretto) | |
front | html, css, javascript, jquery | Visual Studio Code | ||
DB | mysql | MySQL workbench | mysql server | |
Spring | Java | STS (Spring Tool suite) = Eclipse + Spring3 | Spring Framework 5.2.9 | |
Spring Boot | Java | intelliJ IDEA Ultimate | Spring Boot 2.5.3 |
화면 | DB (ORM, Object Relation Mapping) | dependency | |
---|---|---|---|
Spring Boot | thymeleaf | Spring Data JPA | gradle |
Spring Framework | JSP | mybatis | pom.xml (maven) |
이번 수업 때 사용하는 IDE (Intellij IDEA Ultimate)
new → Spring Initializr → 프로젝트명 입력 → 경로 입력 → Java & Gradle 선택 → Group + Artifact = com.xxx.xxx → SDK (corretto-11) → java 11 → jar 선택 후 Next
Lombok & Spring Web & Thymeleaf 체크 후 Finish 하면 기본 프로젝트 생성 완료.
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 : 테스트시 사용
src/main/java/com.xxx.xxx
src/resources/
static
templates
*.yml
포트번호 및 Project Run 설정을 하는 파일
스프링 프레임워크의 xml과 비슷한 역할
.gitignore
build.gradle
External Libraries
주소 요청만 가지고 작업 수행
사용하는 Http Request Method
기존 주소 : get(R), post(C), put(덮어쓰기) patch(일부분만 수정)(U), delete(D)
REST API 주소 : GetMapping, PostMapping, PutMapping, DeleteMapping
기능 | 기존방식 | 기존방식 http method | rest api 방식 | rest 방식 http method |
---|---|---|---|---|
회원가입 페이지 요청 | /member/join | GET | /member/join | GET |
회원가입 | /member/join | POST | /member/join | POST |
로그인 페이지 요청 | /member/login | GET | /member/login | GET |
로그인 | /member/login | POST | /memberlogin | POST |
목록 조회 | /member/findAll | GET | /member | GET |
상세 조회(2번회원) | /member/detial?m_number=2 | GET | /member/2 | GET |
삭제 처리(2번회원) | /member/delete?m_number=2 | GET | /member/2 or /member/delete/2 | DELETE or GET |
수정화면 요청(2번회원) | /member/update?m_number=2 | GET | /member/update/2 | GET |
수정 처리(2번회원) | /member/update?m_number=2 | POST | /member/2 | PUT |
로그아웃 | /member/logout | GET | /member/logout | GET |
JPA를 사용
Entity Class가 새로 추가됨.
JPA와 Entity 사용 시
DB에서 직접 create table을 하지 않아도 Entity가 자동으로 생성해줌.
DB에서 CRUD를 직접 안해도 됨. 메서드 호출을 통해 할 수 있음.
어떤 DB를 사용하던 전체적으로 내용을 바꿀 필요가 없음.
과정
Controller에서 Service 호출
DTO에 정보를 담아 전달
Service에서 Entity 호출 & Repository 호출
DTO에 담긴 정보를 Entity 타입으로 변환 or Entity타입을 DTO 형태로 변환
Repository (PK가 아닌 값을 사용할 때 Repository에 메서드 생성 & 사용)
DB에서 정보 처리 후 역순
의존성 주입 (DI, Dependency Injection)
스프링이 객체를 관리할 수 있도록 어노테이션 사용
일반적인 객체 생성 방식
MemberDTO member = new MemberDTO();
@Controller
public class MemberController {
@Autowired
private MemberService ms;
}
public interface MemberServiceInterface {
}
@Service
public class MemberService implements MemberServiceInterface {
}
// 정석 방식
@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 {
}
static 메서드를 작성하는 공간
static 메서드를 사용하는 이유
Entity Class의 생성자를 노출하지 않도록 하기 위해서 사용
가독성 있는 이름을 줄 수 있음 (생성자 이름 변경 가능)
일반 생성자는 리턴을 줄 수 없지만 static 메서드는 리턴 가능
mybatis(mapper)와 비슷한 역할
select같은 쿼리문을 쓸 필요 없이 자동으로 쿼리문 역할을 수행하게 해줌.
Entity 타입만 받기 때문에 Service에서 DTO타입을 Entity타입으로 변환해줘야함.
주의할점!
PK로 정한 값이 아닌 값을 사용해야 할 때 Repository에서 만들어야 함.
ex) 로그인 체크 등
메서드의 이름을 마음대로 바꾸면 인식을 못함.
반드시 JPA에서 제공하는 메서드 양식 지켜서 사용!
ex) findByNumber -> memberDetail (X)