REST API(Representational State Transfer API)는 웹 기반 애플리케이션 간의 통신을 위한 인터페이스이다. REST는 HTTP 프로토콜을 기반으로 하며, 클라이언트와 서버 간의 상호작용을 간단하고 효율적으로 만들어주는 아키텍처 스타일이다.
서버에 요청을 보낼 때 응답으로 HTML을 받는게 아니라 데이터만 받는다고 생각하면 된다.
다음과 같은 데이터베이스에서 멤버 데이터를 요청받는 REST API를 만들것이다.
프로젝트 구조
Member 엔티티
@Getter
@Setter
@Entity
public class Member {
@Id
private String id;
@Column
private String email;
@Column
private String password;
}
model/Member.java
Member 리포지터리
public interface MemberRepository extends JpaRepository<Member,String> {
}
repository/MemberRepository
먼저 컨트롤러를 만들었다. 컨트롤러는 요청에 대해 적절한 비즈니스 로직을 호출하는 역할을 한다.
@RestController
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@GetMapping("/AllMember")
public List<Member> AllMember(){
return memberService.getAllMember();
}
@GetMapping(path = "/oneMemberById/{Id}")
public Member oneMemberById(@PathVariable(name = "Id") String Id){
return memberService.getMemberById(Id);
}
}
controller/MemberController.java
간단하게 두가지 기능만 있는 컨트롤러이다. 모든 멤버를 리턴하거나 Id를 통해 멤버 한명을 리턴한다.
@RestController 어노테이션은 이 클래스가 컨트롤러임을 명시적으로 나타낸다. RestController는 반환 객체를 JSON이나 XML로 자동으로 변환하여 응답 본문에 포함시킨다.
@RequiredArgsConstructor는 Lombok에서 제공하는 어노테이션으로 생성자를 통한 의존성 주입을 자동으로 실행해준다. 이 어노테이션을 붙이면 생성자를 작성하지 않아도 자동으로 final이나 @Notnull이 붙은 속성에 생성자 주입이 실행된다. 여기서는 MemberService로의 의존성 주입을 위해 사용하였다.
@PathVariable은 파라미터를 받는 방법 중 하나이다. URL 경로에서 중괄호로 둘러쌓인 변수를 추출한다. @PathVariable(name = "URL 변수명") 타입 변수명 의 형식으로 사용한다.
Service는 인터페이스로 작성하여 비즈니스 로직의 명세를 나타낸다.
public interface MemberService {
List<Member> getAllMember();
Member getMemberById(String Id);
}
service/MemberService.java
서비스 인터페이스의 실제 구현은 ServiceImpl에서 한다.
@Service
@RequiredArgsConstructor
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
@Override
public List<Member> getAllMember() {
return memberRepository.findAll();
}
@Override
public Member getMemberById(String Id) {
Optional<Member> member = memberRepository.findById(Id);
if(member.isPresent()){
return member.get();
}
Member defaultMember = new Member();
defaultMember.setId("!no member");
defaultMember.setEmail("!no member");
defaultMember.setPassword("!no member");
return defaultMember;
}
}
service/impl/MemberServiceImpl.java
@Service는 이 클래스가 비즈니스 로직을 구현하는 클래스임을 나타낸다. 이 어노테이션에 의해 스프링이 Service 구현 클래스를 빈(Bean)으로 등록하여 의존성 주입을 실행할 수 있다.
Id로 멤버를 찾을때 멤버가 존재하면 해당 멤버를 리턴하고 만약 없다면 defaultMember를 리턴하도록 했다.
실행결과
AllMember
컨트롤러가 List를 반환했지만 JSON으로 변환되서 응답받은 걸 볼 수 있다.
oneMember
Id 없을 때
'스프링' 카테고리의 다른 글
[Springboot] 스프링부트 프로젝트 빌드하기 (0) | 2024.03.07 |
---|---|
JPA 리포지터리로 데이터 관리하기 (0) | 2024.02.27 |
스프링부트 jpa PostgreSQL 사용하기 (0) | 2024.02.26 |
스프링 부트 프로젝트 구조 알아보기 (0) | 2024.02.26 |
스프링부트 시작하기 (0) | 2024.02.26 |