각 계층은 서로 영향을 끼치지 못함
HTTP 요청을 받고 이 요청을 비즈니스 계층으로 전송
모든 비즈니스 로직 처리, 즉 서비스를 만들기 위한 로직 처리
ex) 주문 처리, 예외 처리, 주문 취소 등
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2' // 인메모리 DB
compileOnly 'org.projectlombok:lombok' // 롬복
annotationProcessor 'org.projectlombok:lombok
@RestController
public class TestController {
@Autowired // 빈 주입
TestService testService;
@GetMapping("/test")
public List<Member> getAllMembers() {
List<Member> members = testService.getAllMembers();
return members;
}
}
@Service
public class TestService {
@Autowired
MemberRepository memberRepository; // 빈 주입
public List<Member> getAllMembers() {
return memberRepository.findAll(); // 멤버 목록 얻기
}
}
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false)
private Long id;
@Column(name = "name", nullable = false)
private String name;
}
member 테이블과 Member 클래스 매핑
→ member
라는 이름의 테이블에 접근해서 member 클래스에 매핑하는 구현체
@Repository
public interface MemberRepository extends JpaRepository<Member, Long> {
}
INSERT INTO member (id, name) VALUES (1, '이름1')
INSERT INTO member (id, name) VALUES (2, '이름2')
INSERT INTO member (id, name) VALUES (3, '이름3')
spring:
jpa:
# 전송 쿼리 확인
show-sql: true
properties:
hibernate:
format_sql: true
# 테이블 생성 후에 data.sql 실행
defer-datasource-initialization: true
show-sql
, format_sql
: 애플리케이션 실행 과정에 DB에 쿼리를 할 때 실행 구문을 모두 보여줌defer-datasource-initialization: true
: 애플리케이션을 실행할 때 테이블을 생성하고 data.sql 파일에 있는 쿼리를 실행/test
GET 요청디스패처 서블릿
이 URL 분석, 요청을 처리할 수 있는 컨트롤러를 찾음/test
GET 요청을 처리할 수 있는 getAllMembers() 메서드를 가지고 있으므로 TestController에게 /test GET 요청 전달/test
GET 요청을 처리할 수 있는 getAllMembers()
메서드와 요청 매치뷰 리졸버
는 템플릿 엔진을 이용해 HTML 문서를 만들거나, JSON, XML 등의 데이터 생성