동석쿠
프로그래밍 공부
동석쿠
전체 방문자
오늘
어제
  • 공부 (80)
    • 공부기록 (64)
      • 웹개발 (6)
      • Java (7)
      • cs 공부 (3)
      • http 웹 기본 지식 (8)
      • 자바 스프링 (20)
      • 개인 미니프로젝트 (3)
      • 알고리즘 공부 (6)
      • 면접준비 (2)
      • 프론트공부 (8)
      • 파이썬 플라스크 (1)
    • 항해99 기록 (14)
      • 회고록 (10)
      • 팀프로젝트 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Post
  • Java
  • 항해99
  • 상속
  • 자바스크립트
  • 스프링부트
  • 리프레쉬토큰
  • JPA
  • 알고리즘
  • Get
  • 프로그래머스
  • 리스트
  • 자바
  • API
  • 리프레시토큰
  • 문법
  • 스프링
  • lombok
  • 파이썬
  • 리액트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
동석쿠

프로그래밍 공부

2-1. 서버 설계 (API),(Repository),(Service),(Controller),
공부기록/자바 스프링

2-1. 서버 설계 (API),(Repository),(Service),(Controller),

2022. 1. 23. 22:57

API 설계하기

각각 상황에 맞게 먼저 API를 설계해주었다. 메모 변경과 삭제에는 id가 필요하므로 URL뒤에 추가로 {id}가 붙는다

Repository 만들기

Memo클래스 만들기

  • 메모는 1) 익명의 작성자 이름(username), 2) 메모 내용(contents) 으로 이루어져 있습니다.
  • domain 패키지를 만듭니다.

Memo.java

@NoArgsConstructor // 기본생성자를 만듭니다.
@Getter
@Entity // 테이블과 연계됨을 스프링에게 알려줍니다.
public class Memo extends Timestamped { // 생성,수정 시간을 자동으로 만들어줍니다.
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Id
    private Long id;

    @Column(nullable = false)
    private String username;

    @Column(nullable = false)
    private String contents;

    public Memo(String username, String contents) {
        this.username = username;
        this.contents = contents;
    }

    public Memo(MemoRequestDto requestDto) {
        this.username = requestDto.getUsername();
        this.contents = requestDto.getContents();
    }
}

Timestamped.java

@MappedSuperclass // Entity가 자동으로 컬럼으로 인식합니다.
@EntityListeners(AuditingEntityListener.class) // 생성/변경 시간을 자동으로 업데이트합니다.
public class Timestamped {

    @CreatedDate
    private LocalDateTime createdAt;

    @LastModifiedDate
    private LocalDateTime modifiedAt;
}

MemoRepository 인터페이스 만들기

MemoRepository.java

public interface MemoRepository extends JpaRepository<Memo, Long> {
	List<Memo> findAllByOrderByModifiedAtDesc();
}

MemoRequestDto

@Getter
public class MemoRequestDto {
    private String username;
    private String contents;
}

 

Service 만들기

  1. src > main > java > com.sparta.week03 에 service 패키지를 만든다.
  2. 해당 패키지 아래에 MemoService.java 파일을 만든다.

MemoService.java

@RequiredArgsConstructor
@Service
public class MemoService {

    private final MemoRepository memoRepository;

    @Transactional
    public Long update(Long id, MemoRequestDto requestDto) {
        Memo memo = memoRepository.findById(id).orElseThrow(
                () -> new IllegalArgumentException("아이디가 존재하지 않습니다.")
        );
        memo.update(requestDto);
        return memo.getId();
    }
}

Memo.java에 update 메소드 추가하기

public void update(MemoRequestDto requestDto) {
    this.username = requestDto.getUsername();
    this.contents = requestDto.getContents();
}

 

Controller 만들기

src > main > java > com.sparta.week03 에 controller 패키지 만들기

MemoController.java 시작

@RequiredArgsConstructor
@RestController
public class MemoController {

    private final MemoRepository memoRepository;
    private final MemoService memoService;
}

Create

MemoController.java

@PostMapping("/api/memos")
public Memo createMemo(@RequestBody MemoRequestDto requestDto) {
    Memo memo = new Memo(requestDto);
    return memoRepository.save(memo);
}

Read

MemoController.java

@GetMapping("/api/memos")
public List<Memo> getMemos() {
    return memoRepository.findAllByOrderByModifiedAtDesc();
}

Delete

MemoController.java

@DeleteMapping("/api/memos/{id}")
public Long deleteMemo(@PathVariable Long id) {
    memoRepository.deleteById(id);
    return id;
}

Update API 만들기

@PutMapping("/api/memos/{id}")
public Long updateMemo(@PathVariable Long id, @RequestBody MemoRequestDto requestDto) {
    memoService.update(id, requestDto);
    return id;
}

 

 

'공부기록 > 자바 스프링' 카테고리의 다른 글

3-0. 키워드  (0) 2022.01.24
2-2. 클라이언트 설계  (0) 2022.01.24
2-0. 키워드  (0) 2022.01.22
1-2. (상속),(JPA심화)  (0) 2022.01.22
1-1. (RDBMS) (H2) (SQL) (JPA)  (0) 2022.01.21
    '공부기록/자바 스프링' 카테고리의 다른 글
    • 3-0. 키워드
    • 2-2. 클라이언트 설계
    • 2-0. 키워드
    • 1-2. (상속),(JPA심화)
    동석쿠
    동석쿠

    티스토리툴바