본문 바로가기
자바과정/REST

REST API CRUD 따라하기(Spring)

by Parkej 2021. 9. 17.
본 글은 https://devkingdom.tistory.com/110?category=761188 블로그의 글을 참고하여 작성하였습니다.
- 설명과 이미지 몇개의 출처는 명시해놓은 블로그입니다. 
- 코드 실습 내용은 제가 직접한 코드로 첨부합니다. 
 
개발환경
- OS : Windows 10
- IDE : Eclipse 2021.03
- WAS : Tomcat 9.0
- JAVA : JDK 11
- Framework : 스프링 프레임워크 (스프링 부트 X)
- 프로젝트 설정 : Spring Lagacy Project -> Spring MVC Project
- Spring Version : 4.3.3.RELEASE (pom.xml에서 변경)

테스트
- 포스트맨

 

REST API 실습을 바탕으로 간단한 CRUD 구현하기 

 

controller
 - UserController : 유저와 관련된 매핑 url이 통하는 곳
dao
 - UserDao : 데이터 접근을 위한 곳
model
 - User : 유저가 가지고 있는 정보(모델)
service
 - UserService : CRUD 비즈니스 로직을 처리하는 곳

 

Controller

@RestController
@RequestMapping("/users") // 루트 url을 /users 로 매핑함. 보통 실무에서는 복수형으로 잡음.
public class UserController {
	/*
	 * 전체적인 restful 구조는 Uniform interface에 대한 개념이 적용됨. 
	 * 하나의 URL을 이용해서 여러 응답을 가져갈 수 있다는 뜻.
	   /users라는 url로 하나는 GET 하나는 POST로 요청을 보내고
	   또 /users/{userid}라는 url로 GET, PUT, DELETE 메서드 요청을 보내고 있다. 
	 */
	
	
	@Autowired
	private UserService userService;
	// Layered Architecture는 인접한 계층끼리만 통신이 가능하다. Controller랑 Service랑 통신을 위해 의존 관계를 설정해줘야 하는데 
	// @Autowired를 통해 자동으로 설정이 가능해진다. 
	
	// 코드들의 흐름을 보면 UserController에서는 요청을 받고 해당 요청을 UserSerivce로 전달해 최종 결과만을 리턴하고 있다.
	
	// 모든 유저 조회
	// uri : localhost:0000/users
	@GetMapping("")
	public List<User> getAllUsers(){
		return userService.getAllUsers();
	}
	
	// 유저 아이디 조회
	// uri : localhost:0000/users/{userid}
	@GetMapping("/{userid}")
	public User getUserByUserid(@PathVariable String userid) {
		return userService.getUserByUserId(userid);
	}
	
	// 유저 등록
	// uri : localhost:0000/users
	@PostMapping("")
	@ResponseBody
	public User registerUser(@RequestBody User user) {
		return userService.registerUser(user);
	}
	
	// 유저 수정
	// uri : localhost:0000/users/{userid}	
	@PutMapping("/{userid}")
	public void modifyUser(@PathVariable String userid, @RequestBody User user) {
		userService.modifyUser(userid, user);
	}

	// 유저 삭제
	// uri : localhost:0000/users
	@DeleteMapping("/{userid}")
	public void removeUser(@PathVariable String userid) {
		userService.removeUser(userid);
	}

}

 

 

Service

@Service
public class UserService {
	
	/*
	  실제 비즈니스 로직을 수행하는 클래스, Service라고 한다. 여기서 구현할 로직은 단순하다. 
	  해당 서비스에 맞는 유저 데이터를 불러오고, 유저를 생성하거나 수정하고 삭제하기 위해 Dao의 메서드를 호출하는 역할을 수행한다.
	  CRUD
	 */
	
	@Autowired
	UserDao userDao;
	// Dao와의 통신을 위해 의존설정을 해놓았다.
	
	// 모든 유저 검색
	public List<User> getAllUsers(){
		return userDao.getAllUsers();
	}
	
	// 유저 아이디 검색
	public User getUserByUserId(String userId) {
		return userDao.getUserByUserId(userId);
	}
	
	// 유저 등록
	public User registerUser(User user) {
		return userDao.InsertUser(user);
	}
	
	// 유저 수정
	public void modifyUser(String userId, User user) {
		userDao.updateUser(userId, user);
	}
	
	// 유저 삭제
	public void removeUser(String userId) {
		userDao.deleteUser(userId);
	}
}

 

 

Dao

@Repository
public class UserDao {
	/*
	 	Data Acess Object의 줄임말인데 말 그대로 데이터 접근을 위한 객체 
	 	즉, DB와의 접근을 위한 기능을 수행한다. 
	 	스프링에서는 @Repository 어노테이션을 이용해 구현한다. 
	 
	 */
	
	public static List<User> users;
	
	// 아직 DB를 사용하지 않아 임시로 만든 객체
	static {
		users = new ArrayList();
		users.add(new User(1,"test1","testId1","1234"));
		users.add(new User(2,"test2","testId2","1234"));
		users.add(new User(3,"test3","testId3","1234"));
		users.add(new User(4,"test4","testId4","1234"));
		users.add(new User(5,"test5","testId5","1234"));
	}
	
	// 모든 user 조회
	public List<User> getAllUsers(){
		return users;
	}
	
	// 유저 아이디 검색
	public User getUserByUserId(String userId) {
		return users
				.stream()
				.filter(user -> user.getUserId().equals(userId))
				.findAny()
				.orElse(new User(-1,"","",""));
	}
	
	// 유저 생성
	public User InsertUser(User user) {
		users.add(user);
		
		return user;
	}
	
	// 유저 수정
	public void updateUser(String userId, User user) {
		users.stream()
		.filter(curUser -> curUser.getUserId().equals(userId))
		.findAny()
		.orElse(new User(-1,"","",""))
		.setUserName(user.getUserName());
	}
	
	// 유저 삭제
	public void deleteUser(String userId) {
		users.removeIf(user->user.getUserId().equals(userId));
	}
	
}

 

 

Model

// Model, lombok 사용도 가능
public class User {
	/*
	 	스프링에서는 보통 데이터를 JSON으로 요청을 받고 응답을 한다. JSON은 Spring boot 내장 라이브러리인
	 	jackson에 의해서 위와 같은 클래스 타입의 객체가 만들어져 스프링 내부에서 로직이 처리된다.
	 	보통 VO 객체라고도 한다. (DTO, VO)
	 	
	 */
	
	private int userNo;
	private String userName;
	private String userId;
	private String userPassword;

	public User() {

	}

	public User(int userNo, String userName, String userId, String userPassword) {
		super();
		this.userNo = userNo;
		this.userName = userName;
		this.userId = userId;
		this.userPassword = userPassword;
	}

	public int getUserNo() {
		return userNo;
	}
	
	public void setUserNo(int userNo) {
		this.userNo = userNo;
	}
	
	public String getUserName() {
		return userName;
	}
	
	public void setUserName(String userName) {
		this.userName = userName;
	}
	
	public String getUserId() {
		return userId;
	}
	
	public void setUserId(String userId) {
		this.userId = userId;
	}
	
	public String getUserPassword() {
		return userPassword;
	}
	
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}


}

 


테스트 (Postman)

 

Get  모든 유저 조회

 

Get 특정 유저 조회

 

Post 유저 등록

 

Put 유저 수정

 

 

Delete 유저 삭제


이렇게 타 블로그의 글을 참고해 따라해봤다 확실히 구조를 알거같고 다음은 jsp나 스프링부트의 thymeleaf 엔진을 사용하여 실습해볼 예정이다. 

반응형

'자바과정 > REST' 카테고리의 다른 글

REST API 실습(Spring MVC) - 2  (4) 2021.09.13
REST API 실습(Spring MVC) - 1  (0) 2021.09.13
REST API  (0) 2021.09.10

댓글