PostMan

 

① POST 확인하기 ( 게시글 생성 )

 

 

  • PostMan 어플을 실행한다.
  • 나는 편의를 위해 왼쪽 사이드바 New Collection 부분에 필요한 url을 미리 저장해 놓았다.
  • 위 사진의 순서대로 진행해 준다! 
  • 특히 주의할 점은 [Body] - [raw] - [JSON] 으로 설정해야 한다는 것 ! 

 

② GET 확인하기 ( 게시글 조회 )

 

 

  • 아래 부분에서 POST로 저장된 데이터들을 확인 할 수 있다.

 

 

③ PUT 확인 하기 ( 게시글 수정)

 

 

  • POST와 마찬가지로 중간 Body 부분에서 내용을 수정해서 입력하면 된다.

 

 

④ DELETE 확인하기 ( 게시글 삭제 )

 

 

  • 처음엔 비밀번호를 일부러 틀리게 설정하여 값을 확인해 보았다.
  • Service에서 설정한 대로 return값으로 false 를 반환한다.

 

  • 이번엔 제대로된 비밀번호를 입력해 보았다.
  • 비밀번호가 일치하기때문에 return 값으로 true를 반환하는 것을 확인 할 수 있다.

 

h2- console로  확인하기

  • url에 localhost8080/h2-console 을 입력하면 아래와 같은 화면이 뜬다.
  • JDBC URL은 개인마다 다른데, 인텔리제이에서 파일을 실행시키면 콘솔창에서 확인할 수 있다.

 

이런 화면이 떴다면 일단 시작준비 끝 !

 

① POST/GET 확인하기 ( 게시글 생성 + 조회 )

  • 왼쪽 사이드바에 POST를 클릭한 뒤 Run을 실행시켜 주면 PostMan을 통해 save된 데이터들을 조회할 수 있다.

 

 

② PUT 확인 하기 ( 게시글 수정)

 

  • PostMan을 통해 id넘버 3인 데이터를 수정했는데, 위와 같이 잘 수정된 것을 확인할 수 있다.

 

 

③ DELETE 확인하기 ( 게시글 삭제 )

  • PostMan으로 id3번인 데이터를 삭제하였고, 위와 같이 삭제된 것을 확인할 수 있다.

 


화면단이 없어서 이렇게 PostMan 어플과 h2-console을 이용하여 내가 짠 코드가 제대로 돌아가는지 확인할 수 있는게 너무 훙미로웠다. 

앞으로 자주 사용하게 될 것 같다 : ) 

스프링부트 이용해서 게시판 서버 CRUD 구현하기 !
API 설계 부분

 

Use Case 그려보기

 

 

이렇게 하는게 맞는지 모르겠지만, 일단 https://narup.tistory.com/70 링크를 참조해서 그려본 Use Case

 

 

API 명세서 만들기

 

  • 참고로 RESTful한 API가 되기 위한 규칙이 몇 가지 있는데, (게시글로 정리할 예정)
  • 그 중 URL주소는 복수형 명사로 적는 것이 규칙인 부분이 있다. 
  • 따라서 아래 내가 작성한 URL을 좀 더 RESTful 하게 하려면 '/api/posts'와 같은 형식으로 바꿔주는게 좋다.

 

 

 

과제 구현 순서

① 인텔리제이 설정 

 

 

  • 인텔리제이를 실행한다.
  • New Project 클릭!
  • 왼쪽 사이드바에서 Spring Initializr 선택
  • 프로젝트 이름 설정
  • 경로 설정
  • Language : [Java] 선택
  •  Type : [Gradle-Grooty] 선택
  •  Java version : 17 선택
  • next 클릭

 

 

 

  • 위와 같이 아래 6개 항목을 검색해서 선택해주고, Create 클릭!
  • Spring Web
  • Spring Data JPA
  • H2 Database
  • Thymeleaf
  • Spring Boot DevTools
  • Lombok

※ 참고

 

 

  • https://start.spring.io/ 에서 위와 같은 설정을 할 수도 있다.
  • 항해99 강의는 처음 방법을 사용하였지만, 인프런 김영한 선생님의 강의나 유튜버 홍팍 선생님은 두번째 방법으로 프로젝트 초기 설정을 하셨다.
  • 이 경우 오른쪽 상단의 ADD DEPENDENCIES 를 통해 필요한 것들을 검색하고 세팅할 수 있다.

 

② 패키지 및 클래스 파일 만들기

 

 

 

  • Entity - Controller - Dto -Servie - Repositoy 패키지를 만들어준다.
  • 그리고 그 안에 필요한 클래스와 인터페이스 파일 생성
  • 사실 위에서 Delete 값을 반환 할 ResponseDto 하나를 더 만들면 좋지만 일단 진행하였다.
  • 화면단은 필요 없는 과제이기 때문에 아래 resources 부분의 static과 templates는 비어있는 상태이다.

 

③ Entity - Controller - Dto -Servie - Repositoy 코드 짜기

  • 이 부분은 과제 3 게시글 참조 

 

 PostMan  + h2-console  로 서버가 반환하는 값 확인하기

  • 이 부분은 과제 2 게시글로 참조

 

 

⑤ Github 업로드

 

GitHub - leejincha/hanghaeboard: spring homework

spring homework. Contribute to leejincha/hanghaeboard development by creating an account on GitHub.

github.com

 

[IntelliJ] IntelliJ + Github 연동하기

[IntelliJ] IntelliJ + Github 연동하기 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ IntelliJ 로컬 프로젝트 Github 연동하기 ] 입니다. : ) 인텔리 제이를 통해 개발중인 로컬 프로젝트를 Github이랑 연동하는

goddaehee.tistory.com

 

 


https://velog.io/@seungho1216/

 

Spring Boot

스프링 부트(Spring Boot)는 스프링(Spring)을 더 쉽게 이용하기 위한 도구이다. 스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많은데, Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여 Spring 개발을 조금 더 쉽게 만들어주는 역할을 한다.

User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점이 있다. 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요되는데, 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행하고 있다.

 

참고 : https://melonicedlatte.com/2021/07/11/174700.html


Controller 

Spring Framework의 Controller는 사용자가 화면(View)단에서 입력이나 어떤 이벤트를 했을 경우, 그 이벤트에 맞는 화면(View)이나 비지니스 로직(Model)을 실행할 수 있도록 업데이트 해주는 역할을 한다. 즉, Model과 View를 연결해주는 다리 역할이라고 할 수 있다. 서버에서 기능별 URL이라는 API를 개설해 놓았고, 클라이언트는 필요한 정보를 얻기 위해 적절한 API에 요청한다. 즉 Controller는 이런 창구 역할을 하는 API들을 모아놓은 클래스라고 할 수 있다.

  • Front-end에서 들어오는 클라이언트 측의 요청이 가장 먼저 서버 측과 맞닿는 부분
  • Client의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 Service를 호출
  • 클라이언트가 보낸 데이터가 있다면 Service를 호출할 때 전달하기 쉽게 데이터의 가공
  • 모델의 업무 수행이 완료되면 그 결과를 바탕으로 화면을 구성하도록 View에 전달
  • @Controller 어노테이션을 사용하여 만들어진 컨트롤러 클래스에 라우팅(Routing)할 수 있도록 요청 URL에 대해 해당하는 메소드를 매핑해줄 수 있도록 하기 위해 @RequestMapping 어노테이션을 사용한다.

참고 : https://yongku.tistory.com/2348


Service

  • Service : Controller의 요청을 받아 알맞은 정보를 가공 Controller에게 재전달한다.
  • Service는 위에서 언급했듯이 Repository에서 얻어온 정보를 바탕으로 자바 문법을 이용하여 가공 후 다시 Controller에게 정보를 보내는 곳이다.
  • 클라이언트 즉 controller 쪽에서 바로 데이터베이스에 접근하여 정보를 얻고 가공해서 가져가는 것은 위험하다.
  • 정보를 직접 CRUD하고 가공하는 과정에서 테이블에 저장된 원본의 정보가 손상될 우려가 크기 때문이다.
  • 따라서 정보 변동의 위험이 큰 로직은 Service에서 진행한다.
  • 추가로 이때 원본의 데이터를 사용하는 것이 아니라 데이터베이스에서 추출한 정보의 복사본인 DTO를 만들어서 로직을 조작한다.

 

참고 : https://velog.io/@seungho1216/Spring-BootController-Service-Repository%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

 


Repository

  • Repository는 직역해도 '저장소'로 데이터베이스와 깊은 연관이 있음을 알 수 있다.
  • 데이터단에 직접 매칭되는 Entity라는 것이 있는데, 이 Entity를 통해 데이터 테이블이 생성이 되면, 받아온 정보를 데이터베이스(ex. MySQL, mariaDB)에 저장하고 조회하는 기능을 수행한다.
  • Repository : Entity에 의해 생성된 DB에 접근하는 메서드를 사용하기위한 interface이다.
  • JPA를 상속받음으로써 기본적인 CRUD의 동작(함수 사용)이 가능해진다.
  • JpaRepository<대상 엔티티, Entity에 접근할 객체의 Type>

< 중간 정리 >

 

출처 : 스파르타코딩클럽 스프링 입문 강의자료

 

  • 컨트롤러 : @Controller (프레젠테이션 레이어, 웹 요청과 응답을 처리함)
  • 로직 처리 : @Service (서비스 레이어, 내부에서 자바 로직을 처리함)
  • 외부I/O 처리 : @Repository (퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리함)

DAO, DTO, VO 란? 

 

DAO

  • DAO(Data Access Object) 는 데이터베이스의 data에 접근하기 위한 객체. DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용한다.

DTO

  • DTO(Data Transfer Object) 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)이다.
  • 유저가 입력한 데이터를 DB에 넣는 과정을 보면,
    • 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송한다.
    • 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣는다.

VO

  • VO(Value Object) 값 오브젝트로써 값을 위해 쓰인다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가진다.
  • DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있다.

참고 : https://melonicedlatte.com/2021/07/24/231500.html


Entitiy

 

데이터베이스는 엑셀처럼 2차원 테이블이라고 생각하면 되는데, 이 테이블에 서비스에서 필요한 정보를 다 저장하고 활용하게 된다.
엑셀의 세로의 열 부분이 Column 이고, 가로의 행 부분이 엔티티 객체가 된다. 이 테이블 전체가 엔티티 이고, 각 1개의 행들이 엔티티 객체가 되는 것이라고 생각하면 된다. 

 

  • 실제 DB에 저장되는 내용들을 구현하는 class이다.
  • 테이블에 대응하는 하나의 클래스라고 생각
  • 하나의 객체가 DB의 하나의 Column처럼 작용한다.

참고 : https://velog.io/@jayjay28/%EC%97%94%ED%8B%B0%ED%8B%B0Entity


Annotation

  • 사전적 의미로는 주석이라는 뜻이다.
  • 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
    - 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.
    - meta data : 데이터를 위한 데이터

참고(꼭 읽어보기) : https://velog.io/@ruinak_4127/Annotation%EC%9D%B4%EB%9E%80


JPA

  • Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함
  • 참고로, JPA는 수정 메소드를 제공하지 않는다. 하지만 당연히 수정은 필요하기 때문에 JPA는 데이터 수정시, 매핑된 객체(테이블 데이터)를 조회해서 값을 변경 후 커밋하면 DB 서버에 UPDATE 문을  전송하여 UPDATE를 실행한다.
  • 추가적으로 알아둬야 할 것은, 스프링에서 흔히 사용하는 것으로 알고있는 JPA는, JPA를 이용하는 spring-data-jpa 프레임워크이지 JPA는 아니다.

참고 : https://dbjh.tistory.com/77


@RequestParam, @PathVariable, @RequestBody

 

 

@RequestBody

  • 요청이 온 데이터(JSON이나 XML형식)를 바로 Class나 model로 매핑하기 위한 Annotation이다.
  • POST나 PUT, PATCH로 요청을 받을때에, 요청에서 넘어온 body 값들을 자바 타입으로 파싱해준다.
  • HTTP POST 요청에 대해 request body에 있는 request message에서 값을 얻어와 매핑한다.
  • RequestData를 바로 Model이나 클래스로 매핑한다.
  • 이를테면 JSON 이나 XML같은 데이터를 적절한 messageConverter로 읽을 때 사용하거나 POJO 형태의 데이터 전체로 받는 경우에 사용한다.

@RequestParam

  • @PathVariable과 비슷하다.
  • request의 parameter에서 가져오는 것이다. method의 파라미터에 사용된다.
  • ?moviename=thepurge 와 같은 쿼리 파라미터를 파싱해준다.
  • HTTP GET 요청에 대해 매칭되는 request parameter 값이 자동으로 들어간다.
  • url 뒤에 붙는 parameter 값을 가져올 때 사용한다.
  • @RequestParam 어노테이션의 괄호 안의 문자열이 전달 인자 이름(실제 값을 표시)이다.


@PathVariable

  • method parameter 앞에 사용하면서 해당 URL에서 {특정값}을 변수로 받아 올 수 있다.
  • HTTP 요청에 대해 매핑되는 request parameter 값이 자동으로 Binding 된다.
  • uri에서 각 구분자에 들어오는 값을 처리해야 할 때 사용한다.
  • REST API에서 값을 호출할 때 주로 많이 사용한다.

 

< 간단 정리 >

@RequestParam : GET 방식으로 넘어온 URI의 queryString을 받기 적절

@PathVariable : URI 경로의 일부를 파라미터로 사용할 때 이용

@RequestBody : xml이나 json 기반의 메시지를 사용하는 요청의 경우 유용

 

참고 :

https://velog.io/@ruinak_4127/Annotation%EC%9D%B4%EB%9E%80

https://u0hun.tistory.com/21

+ Recent posts