티스토리 뷰

728x90
반응형

 

1. RDBMS

 

RDBMS(Relational DataBase Management System)은 컴퓨터에 정보를 저장하고 관리하는 기술이다.

  • H2 : in-memory DB이다. 인메모리 DB란 서버가 작동하는 동안에만 내용을 저장하고 서버가 작동을 멈추면 데이터가 모두 삭제되는 데이터베이스를 말한다. (연습용으로 좋다.)
  • MySQL : 서비스를 배포할 때 사용할 데이터베이스 이다. AWS RDS라는 서비스를 사용해볼 예정, 스프링과 궁합이 좋아서 많은 회사에서 사용하고 있다.

 

2. JPA

 

JPA는, SQL을 쓰지않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기이다.

자바로 DB를 사용하도록 도와주는 녀석이 JPA인데 그럼 DB를 이용하는데 핵심이었던 테이블과 SQL과 동일한 개념의 자바용어가 있어야한다.

테이블은 Domain, SQL은 Repository이다.

 

JPA는 Repository를 통해서만 사용할 수 있다.

Repository는 클래스로 만들지 않고 인터페이스로 만드는데

인터페이스란 클래스에서 멤버가 빠진, 메서드 모음집이라고 보면 된다.

CRUD란?

  • 생성(Create)
  • 조회(Read)
  • 변경(Update)
  • 삭제(Delete)

스프링 구조

  • Controller : 가장 바깥 부분, 요청/응답을 처리함
  • Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분
  • Repository : 가장 안쪽 부분, DB와 맞닿아 있음

어노테이션 모음

@Entity

테이블 클래스임을 나타낸다.

 

@Id

ID값, Primary Key로 사용하겠다는 뜻이다.

 

@GeneratedValue(strategy = GenerationType.AUTO)

ID값 자동 증가 명령이다.

 

@Column(nullable = false)

컬럼값이고 반드시 값이 존재해야 함을 나타낸다.

 

@Service

스프링에게 이 클래스는 서비스임을 명시

 

@Transactional

SQL 쿼리가 일어나야 함을 스프링에게 알려줌

 

@NoArgsConstructor (Lombok)

기본생성자를 스프링에서 대신 생성해준다.

 

@RequiredArgsConstructor (Lombok)

반드시 필요한 생성자가 있으면 스프링에서 알아서 생성하도록 권한을 주는것이다. 따로 생성자를 안만들어줘도 된다.

반드시 필요한 것에 final을 붙여준다. (final이 붙은경우 이 어노테이션이 없고 생성자도 없으면 에러난다.)

 

@ResponseBody

자바 객체를 http 요청의 body 내용으로 매핑한다.

RestController가 선언되어 있을경우에는 안써줘도 된다.

RestController = Controller + ResponseBody

 

@RequestBody

클라이언트가 전송하는 http요청의 Body 내용을 Java Object로 변환시켜주는 역할을 한다. 그렇기 때문에 Body가 존재하지 않는 Get방식의 메서드에 @RequestBody를 활용하는 것은 적합하지 않다. Json요청을 변환시키는 것이기 때문에, 변수들의 Setter함수가 없어도 정상적으로 변수들이 저장된다.

 

@ModelAttribute

전달받은 파라미터들을 JavaObject로 매핑시키는 것이기 때문에, 변수들이 Setter함수가 없다면 변수들이 정상적으로 저장되지 않는다.

 

@RequestParam

RequestParam 주소 뒤에 붙는 파라미터의 값을 가져올때 사용한다. 여기서는 query에 들어있는 값을 가져온다.

@GetMapping("/api/search")
    public List<ItemDto> getItems(@RequestParam String query) {
        String resultString = naverShopSearch.search(query);
        return naverShopSearch.fromJSONtoItems(resultString);
    }

@PathVariable

PathVariable을 사용하면 url에 일부를 변수로 작성할 수 있다 변하는 값일 경우에 자주 사용한다.

url에는 /{변수} 이런식으로 사용한다. 

@PutMapping("/api/products/{id}")
    public Long updateProduct(@PathVariable Long id, @RequestBody ProductMypriceRequestDto requestDto){
        return productService.update(id, requestDto);
    }

 

@EnableJpaAuditing

Audit 기능은 엔티티에 발생하는 변경사항을 추적하는 기능을 구현하는데 도움을 준다.

데이터변동이 있으면 jpa가 알아서 반영하도록 한다.

 

@Scheduled(cron = "0 0 1 * * *") => 모든날 1시 0분0초에 실행한다.

시간이 딱 맞을때 Schecduled 어노테이션이 붙은 것을 실행하겠다는 의미이다.

(초, , , , , 주 순서) * 은 언제나 라는 뜻이다.

@PutMapping("/api/products/{id}")
public Long updateProduct(@PathVariable Long id, @RequestBody ProductMypriceRequestDto requestDto){
return productService.update(id, requestDto);
}

 

3. Lombok, DTO

 

Lombok은 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리이다.

 

DTO(Data Transfer Object)

데이터를 전달할때는 전달용 클래스를 만들어서 전달하는것이 좋기때문에 나온것이 DTO이다.

 

 

 

4. API

 

API란 클라이언트가 정한대로 서버에게 요청(Request)을 보내면, 서버가 요구사항을 처리하여 응답(Response)을 반환하는 것이다.

 

여기에서도 REST라는 것을 쓰는데 RestController와는 다른 것을 말한다.

REST란, 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러내는것을 의미한다.

여기에 쓰이는 동사는 우리가 JPA 시간에 배운 CRUD를 말한다.

 

예시)

  • GET/courses : 강의 전체 목록 조회요청
  • GET/courses/1 : ID가 1번인 녀석 조회요청
  • POST/courses : 강의 생성요청
  • PUT/courses/3 : ID가 3번인 녀석 수정요청
  • DELETE/courses/2 : ID가 2번인 녀석 삭제요청

주의사항 : 주소에 들어가는 명사들은 복수형을 사용하고 주소에 동사는 가급적 사용하지 않는것이 좋다.

 

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30