멋사 Backend 43일차 🦁

신재원·2023년 6월 21일

🌳 트리 구조

Tree(트리) 란?

  • 사진에서 보시다시피 트리는 대표적인 비선형 구조이며, 상위 원소와 하위 원소를 구분하는 계층형 자료구조 입니다.
  • Stack, Queue와 같은 경우에는 데이터가 앞뒤로 하나씩 붙어서 나열되지만, 트리 같은 경우 하나의 원소가 다른 원소와 관계를 가질수 있습니다.

트리의 정의

  • 각각 데이터를 가지고 있는 원소 (A,B,C......) 를 노드라 합니다.
  • 노드중 최상위 노드를 루트 노드 (root)라고 합니다.
  • 각 노드는 0개이상의 자식 노드를 가질수 있습니다.
  • 자식노드를 가지고 있는 노드를 단말노드 또는 리프(leaf) 노드라 합니다.

🌳🌳 이진 트리(Tree)

  • 트리 중 모든 부모 노드가 최대 2개 (0 ~ 2)의 자식 노드를 가지는 트리를 이진 트리라 합니다.
  • 자식 노드가 0개 이여도 이진트리입니다.
  • 최대 2개의 자식노드를 가져야 함으로, 자식노드가 3개인 경우는
    이진 트리가 아닙니다.

이진 트리의 종류

  • 전 이진 트리(Full Binary Tree)

: 모든 노드가 0개 또는 2개의 자식노드를 갖는 경우 (1개의 자식 노드는 X)

  • 완전 이진 트리(Complete Binary Tree)


: 모든 레벨에 노드의 갯수가 최대로 차있으며,
마지막 레벨에 노드가 존재할 경우, 제일 왼쪽부터 차례대로 채워넣어진 이진 트리입니다.

💪 Spring

종속된 자원 표현하기

EX 게시판 서비스의 게시글에 댓글을 작성
❗ (댓글은 게시글에 종속 됩니다. URL도 거기에 맞춰서 작성해야 될것입니다.)

아직 엔티티와 엔티티 간의 연관관계를 배우지 않아서 일반적인 관계형 데이터 베이스 처럼 게시글의 PK를 나타내는 필드를 작성 합니다.
( 권장하지 않는 방법 )
(1:1 매핑, 1:N 매핑은 혼자 이전에 공부하며 작성한 블로그 복습)

  • 댓글 (comment) 엔티티
    (PK를 나타내는 필드를 작성)
@Data
@Entity
@Table(name = "comments")
public class CommentEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long articleId; // 게시판 PK
    private String writer;
    private String content;
}

비동기 통신 (API 통신)

  • @ResponseBody 는 이전 블로그를 참고하시면 될것같습니다.

@RequestBody 란 ?

클라이언트 ➡ 서버 요청이며,

  • 클라이언트에서 서버로 JSON 형태의 요청 데이터를 전송했을때, 해당 JSON 형식의 데이터를 받기 위해서 JSON -> Java Object로 변환 합니다.
    ( JSON 기반의 데이터를 자바 객체로 변환 )
  • 위의 CommentEntity 을 바탕으로

포스트맨에서 POST 요청을 보낼경우

{
    "id": 1,
    "writer": "user1"
}
@PostMapping("api")
    public void create(@RequestBody CommentEntity entity) {
    System.out.println("id = " + entity.id);
    System.out.println("writer = " + entity.writer);
    System.out.println("content = " + entity.content);
}
  • @RequestBody 에 의해 JSON 데이터를 매핑하여
    entity.id == 1
    entity.writer == "user1"
    entity.content == "null"
    값을 출력합니다.

@PutMapping vs @PostMapping 차이

  • 차이점은 멱등성이라고 하며 뒤에서 다룰 예정이라고 합니다.

HTTP 요청에서 멱등성이란 여러 번 연속해서 호출해도 클라이언트가 받는 응답은 동일하다는 것
(Put은 대부분 update, Post는 대부분 추가)

0개의 댓글