본문 바로가기

개발자 취업 프로젝트[일지]

💻개발자가 되기 위한 프로젝트(97)💻

06.22.2023 - 학습 일지
[국비] 백엔드 과정
※ 오전 활동 ※
T : AM 09:00 - 11:50
Algorithms
※ [학습 내용] ※

Algorithms - Binary Search Tree
  1. 이진 탐색 트리의 속성과 특징에 대해서 이론으로 학습함
    - [속성]
    • 노드의 왼쪽 하위 트리에는 노드의 키보다 작은 키가있는 노드 만 포함됨
    • 노드의 오른쪽 하위 트리에는 노드의 키보다 큰 키가있는 노드 만 포함됨
    • 왼쪽 및 오른쪽 하위 트리도 각각 이진 검색 트리 여야합니다.
    • 중복된 키를 허용하지 않습니다.
    - [삽입]
    • 삽입할 값을 루트 노드와 비교해 같다면 오류를 발생함( 중복 값 허용 X )
    • 삽입할 값이 루트 노드의 키보다 작다면 왼쪽 서브 트리를 탐색해서 비어있다면 추가하고, 비어있지 않다면 다시 값을 비교함
    • 삽입할 값이 루트노드의 키보다 크다면 오른쪽 서브트리를 탐색해서 비어있다면 추가하고, 비어있지 않다면 다시 값을 비교함
    - [삭제]
    • 삭제하려는 노드가 단말 노드(leaf node) 일 경우임
    • 삭제하려는 노드의 서브 트리가 하나인 경우임(왼쪽 혹은 오른쪽 서브 트리)
    • 삭제하려는 노드의 서브 트리가 두 개인 경우임
Algorithms (실습)

Algorithms - Binary Search Tree 내부코드와 결과물


[국비] 백엔드 과정
※ 오후 활동 ※
T : PM 13:00 - 18:00
SpringBoot - Query Parameter
※ [학습 내용] ※

SpringBoot - REST(Query Parameter)
  1. Controller
    - ArticleController에서는 pagination을 Test하기 위해서 Page interface를 이용하여 ArticleDto 타입을 받는 method를 생성해서 service에서 만들어놓은 readArticlePaged method의 값을 반환받도록 함[Pagination]
    - CommentController에서는 게시글 댓글 전체조회, 게시글 댓글 수정, 게시글 댓글 삭제를 해주는 메서드를 생성해줌[Comments]
    - QueryController에서는 Search를 Test하기 위해서 Page interface를 이용하여 ArticleDto타입을 이용한 search메서드를 생성하여 Clinet가 Request를 할시 query매개변수를 이용한 page요청까지 받아와주는 pageNumber 매개변수까지 생성하여 Client 요청이 있으면 해당 page는 pageNumber의 매개변수에게 선언되어 service에서 지정한 메서드를 이용하여 query, pageNumber의 값을 반환해주는 작업함
  2. Service
    - ArticleService에서는 Jpa Query Method를 이용한 Pagination 기능을 만들어보고, 또다른 방법으로 PagingAndSortingRepository method에 전달하는방식을 이용하여 페이징 정렬을 해주는 작업을 실시하였고, 마지막 방법으로 Page interface를 이용하여 ArticleDto를 받는 메서드를 생성해 id값을 기준으로 내림차순으로 정렬되도록 작업함[Pagination]
    - search method를 생성하여 검색시 결과물의 개수를 설정하고 id값을 기준으로 내림차순으로 정렬되도록 하고 타입은 ArticleDto의 Entity값을 받아오는 작업함[Search]
    - CommentService에서는 게시글 댓글 전체 조회, 게시글 댓글 수정, 게시글 댓글 삭제 메서드를 생성해 각 해당 Controller의 service 호출시 사용할 수 있도록 작업함[Comments] 

  3. Repository
    - ArticleRepository에서는 Pagination에서 기준값을 제공해주는 메서드를 ID가 큰 순서대로, 특정 값보다 작은 데이터 중 큰 순서대로 받아오는 메서드를 생성해줬고, Search를 위한 메서드의 기준을 title이 들어가는 article를 검사해 표현되도록 작업
    - CommentRepository에서는 CommentEntity 중 articleId가 id인 CommentEntity만 반환해주는 메서드를 생성함
  4. PostMan
    - HTTP 통신을 하면서 각 Pagination, Search, Comments기능이 잘 표현이 되는가를 Test함
SpringBoot - Query Parameter (실습)

SpringBoot - Query Parameter (1번 - ArticleController / 2번 - ArticleService[Pagination 방법1,2] / 3번 - ArticleService[Pagination 방법3, Search method] / 4번 - ArticleRepository)
SpringBoot - Query Parameter (pagination)
SpringBoot - Query Parameter (CommentController)
SpringBoot - Query Parameter (CommentService)
SpringBoot - Query Parameter (CommentRepository)
SpringBoot - Query Parameter (1번 - CommentCreate / 2번 - CommentRead[Put전] / 3번 -  CommentPut / 4번 - CommentRead[Put후] / 5번 - CommentDelete / 6번 - CommentRead[Delete후])
SpringBoot - Query Parameter (왼 - QueryController / 오 - QuerySearch)


마무리
- 오전은 이진 탐색 트리에 대해서 속성과 특징 그리고 문제를 풀어봤는데, 처음엔 어제 풀이한 전위순회, 중위순회, 후위순회 보다 약간은 이해가 쉽게 다가왔고, 코드를 짜면서도 희안하게 왜 오른쪽으로 노드가 탐색하여 해당되는 노드를 찾아가는 작업과 삽입을 통해 만약 해당 노드가 없다면 그자리 노드를 생성해주는 것과 삭제는 해당 노드가 없다면 왼쪽 노드의 값을 비교하여 큰수를 채워넣고 해당 노드는 삭제되는 작업 또는 오른쪽 노드의 값을 비교하여 작은 수를 채워넣고 해당 노드가 삭제되는 것까지 코드를 짜고 Test한 결과까지 보니깐 이해가 조금은 쉽게 다가왔다. 물론 계속해서 BST문제를 풀어봐야지 더 깊게 이해를 할테지만, 어제 이진트리를 겪어보고 나니 조금은 이해가 되었다는게 신기하기도 했으며, 오후는 Restful api를 어제 못다한 작업을 진행했으며, Comments create만 하였고, read, put, delete를 이전 ArticleController에서 한 것처럼 진행했고, Pagination, Search까지 이번에는 과정을 추가하여 간단하게 이론과 실습을 통해서 어떻게 웹에서 이용되고 있는지와 직접 PostMan Tool을 이용하여 HTTP통신이 어떻게 결과값이 보여지는지를 Test해봤는데 특히 search부분은 크게 어렵다는 부분보다 Pagination 파트에서 Page interface에 대해서 잘몰라서 이떤 기능을 하는 것인지 찾아보고, 왜 두가지의 매개변수가 필요한지에 대해서도 이해를 하지 못하였는데, 검색을 통해서 Page interface는 페이징을 할때 필요한 역할을 하고, 그 페이징할 type을 불러와 객체를 생성하고 해당 매개변수를 넣어 그 기준점을 설정하여 정렬하는 형태로 만들어진다는 것을 이해하고 부터는 흐름에 대해서 이해를 하게 되었다. 물론 계속해서 만들어보고 또 부딪혀보면서 또 색다르고 깨달음을 얻고 검색하고를 반복하더라도 그 흐름을 알고 모르고의 차이도 크다고 생각하기 때문에 이번 수업에서는 되게 신기하고 스스로도 이제는 CRUD에 대해서는 작성하는데 흐름에 대한 큰 어려움은 없었고 오히려 강사님께서 문제를 내실수록 답변하고 재밌는 시간을 보냈다. :)