게시글 전체적인 로직 구현

JEONG SUJIN·2023년 1월 19일
1

REST_API 

목록 보기
4/4

먼저 모델을 만들어준다. DB에 테이블을 만들어주고 내부에 선언된 변수들은 컬럼명이라고 생각하면된다.

Post 생성

데이터의 불변성을 보장해 주기 위해 Entity 내부 변수에 대한 Setter 함수는 정의 하지 않는게 좋지만,
여기선 @Data로 어노테이션으로 ...

Post.java

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Entity
@Table(name="posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"title"})})
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Post {

	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	private Long id;
	
	@Column(name="title", nullable=false)
	private String title;
	
	@Column(name="description", nullable=false)
	private String description;
	
	@Column(name="content", nullable=false)
	private String content;
}

@Table(name="posts", uniqueConstraints = {@UniqueConstraint(columnNames = {"title"})})

DB테이블의 이름 posts와 매핑됨, 유니크설정 열은 title(title은 중복방지)

생성자 모든 필드 변수 적용, 즉 모든 필드 값을 파라미터로 받는 생성자로 적용

@AllArgsConstructor

파라미터가 없는 기본 생성자를 생성

@NoArgsConstructor

열이름 "title"과 매핑 (이름 같음) , 널값 허용 안됨

@Column(name = "title", nullable = false)

테이블이 생성 된 걸 확인할 수 있다!!

PostRepository 생성

Spring JPA 에서 제공하는 Repository 라는 인터페이스를 정의해 해당 Entity 의 데이터를 사용 할 수 있다.
<>안에는 엔티티 클래스 이름과 ID 필드 타입이 지정해주면 된다.

public interface PostRepository extends JpaRepository<Post, Long>{
}

Entity는 Controller, Client단에서 쓰이면 직접 쓰이면 좋은 설계가 아니기 때문에
Entity는 실제 DB테이블과 매칭되기때문에 안전하게 Dto를 만들어서 Entity를 DTO(데이터 전송 객체)로 바꿔 사용해야한다.

PostDto생성

@Data
public class PostDto {
	private Long id;
	private String title;
	private String description;
	private String content; 
}

PostService 생성

이제 기능 구현을 하는 서비스단을 생성한다.
postRepository에 JpaRepository 상속했기 때문에 save() 메서드를 사용할수있다.

@Service
public class PostService {
	@Autowired
	private PostRepository postRepository;
	
	public PostDto createPost(PostDto postDto) {
		// PostDto => Post 변환
		Post post = new Post();

		post.setTitle(postDto.getTitle());
		post.setContent(postDto.getContent());
		post.setDescription(postDto.getDescription());
		// DB에 새 포스트 저장 (리턴 Post)
		Post newPost = postRepository.save(post);

		// Post => PostDto 변환
		PostDto postResponse = new PostDto();
		postResponse.setId(newPost.getId());
		postResponse.setTitle(newPost.getTitle());

		postResponse.setContent(newPost.getContent());

		postResponse.setDescription(newPost.getDescription());
		return postResponse;
	}
}

PostController 생성

@RestController
@RequestMapping("/api/posts")
public class PostController {
	
	private PostService postService;

	public PostController(PostService postService) {
		this.postService = postService;
	}
	
	@PostMapping
	public ResponseEntity<PostDto> createPost(@RequestBody PostDto postDto){
		PostDto postResponse = postService.createPost(postDto);
		return new ResponseEntity<>(postResponse, HttpStatus.CREATED);
	}
}

포스트맨으로 설정해놓은 api주소를 입력하고 키값을 넣어주면 DB에 저장되는걸 확인 할 수 있다.

profile
기록하기

0개의 댓글