맞는데 왜 틀릴까..?

분류 전체보기 306

[Spring Boot] 댓글 기능 Rest API

댓글 구조 ManyToOne ManyToMany.. 게시글의 id -> pk (primary key) 댓글에서 게시글의 id와 연결한 값 -> fk (foregin key).. DB DB에 질문글을 의미하는 article 데이터를 등록한 후, 각 질문의 id를 foregin key로 하는 댓글을 등록한다. Entity getter는 지양하는 게 좋지만 일단 편의상 @Getter 어노테이션을 사용했다. 각 게시글을 의미하는 Comment 엔티티를 생성하자. 질문 글 Article 엔티티에 대하여 ManyToOne 연결을 하고 article_id를 FK로 설정한다. @JoinColumn @JoinColumn 어노테이션은 연결될 외래키(FK)에 대한 정보를 지정한다. 여기서 name 속성은 외래키의 이름을 지..

Spring Boot 2023.03.18

[Spring Boot] 테스트 코드 작성

스프링 부트는 테스트 환경을 쉽게 구축하고 테스트를 실행하는데 필요한 다양한 기능을 제공한다. @Test 어노테이션을 사용하면 쉽게 테스트 환경을 활용할 수 있다. 다양한 입력값이나 예외 처리애 대한 테스트 케이스를 작성하고 실행하면서 버그를 빠르게 찾아내고 디버깅해 보자. 테스트하고 싶은 메서드에서 우클릭 후 Generate -> Test를 클릭하면 test 디렉토리의 service 파일에 해당 메서드가 생성된다. 본체의 ArticleService를 사용해야 하니 의존성 주입을 해주고, @SpringBootTest 어노테이션을 달아주자. 현재 DB에 있는 데이터들과 test에서 새로 작성한 데이터들을 비교하는 코드이다. DB에 저장되어 있는 데이터와 같게 입력했기 때문에 성공한 모습이다. 일부러 실패할..

Spring Boot 2023.03.18

[Spring Boot] Transaction

스프링 부트에서 Transaction은 데이터베이스 작업을 수행하는데 필요한 일련의 작업들을 하나의 논리적인 작업 단위로 묶어서 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)을 보장하는 것을 말한다. Transaction은 다수의 데이터베이스 작업을 하나의 논리적인 작업으로 묶어서, 모두 성공하면 DB에 반영하고, 하나라도 실패하면 모든 작업을 취소(롤백)하여 데이터 일관성을 유지한다. 스프링 부트에서 @Transactional 어노테이션을 사용해 Transaction을 설정할 수 있다. 이를 통해 데이터베이스의 일관성을 유지하고, 예외가 발생하는 경우 롤백하도록 설정할 수 있다. 예를 하나 들어보자. 사용자가 인터넷 쇼핑몰에서 5만..

Spring Boot 2023.03.17

[Spring Boot] Service

스프링 부트에서의 Service는 비즈니스 로직을 구현하는 클래스다. 이러한 Service는 Controller와 Repository 사이에서 데이터를 처리하고, 중개자 역할을 수행한다. Service는 Repository를 주입받아 DB와 상호작용을 처리하며 이를 바탕으로 비즈니스 로직을 수행한다. Controller와 달리 Service는 직접 HTTP 요청을 처리하지 않고 데이터를 처리하는 것에 초첨을 둔다. 따라서 Service에서 데이터를 처리하여 Controller에 리턴해주면 Controller가 HTTP 요청을 처리한다. 앞서 작성했던 RestAPI를 Service 클래스를 구성하여 변경해보자. Service 클래스 생성 service package를 생성한 후 ArticleService ..

Spring Boot 2023.03.17

[Spring Boot] Rest API

Rest API 일반 Controller와 RestController의 차이? Controller는 view 템플릿 페이지를 return RestController는 데이터를 return (문자열, JSON) 일반 Controller에서도 @ResponseBody 어노테이션을 사용하여 JSON 형태의 데이터를 반환할 수 있다. Get 요청 ArticleApiController 클래스에서 ArticleRepository 객체를 직접 생성하지 않고, 외부에서 받아오는 의존성 주입을 사용하였다. 이를 통해 ArticleApiController 클래스와 ArticleRepository 클래스 간의 결합도를 낮추고, 후에 ArticleRepository 클래스의 구현체를 변경해도 ArticleApiControll..

Spring Boot 2023.03.17

[Spring Boot] 데이터 삭제하기

데이터베이스에 있는 정보를 삭제해 보자! 일단 show.mustache에서 삭제 버튼을 만든다. Controller 원래 게시글을 지워야 하므로 @DeleteMapping을 사용해야 하지만 delete 기능을 제공해 주지 않아 @Getmapping을 사용했다. url에서 삭제 대상의 id를 가져온 후 Entity에 담는다. 해당 Entity가 있다면 삭제 시켜주자. 삭제가 완료되면 delete complete라는 메시지를 띄워보자 리다이렉트 된 화면을 보여주는 index.mustache에 해당 msg 필드를 추가해 주면 된다 성공이다!! 딱히 더 공부할만한 내용이 없네요

Spring Boot 2023.03.15

[Spring Boot] 데이터 수정하기

Update인 Patch/Put이지만 form 태그는 patch를 제공하지 않아 실습에서는 post를 사용하였다. articles/show.mustache 먼저 저장된 데이터를 확인할 수 있는 show페이지에서 edit 버튼을 만들어 주자. articles/edit.mustache edit.mustache는 수정할 데이터를 보여준다. new.mustache를 조금 수정하여 작성했다. action = /articles/update로 하고 폼태그는 patch를 제공하지 않아서 post로 작성 id 값을 hidden으로 숨겨서 같이 전송. input 태그에 controller를 통해 가져올 title과 content를 보이게 해 주도록 작성하자. back버튼을 만들어 뒤로 돌아갈 수 있게 해주자. edit C..

Spring Boot 2023.03.14

[Spring Boot] 웹 페이지에서 데이터 조회하기

웹 페이지에서 데이터를 조회할 수 있는 기본적인 로직을 알아보자. 1. 클라이언트가 브라우저를 통해 데이터 요청 2. 요청 url을 Controller가 받음 3. 받아진 url에서 찾고자 하는 정보를 Repository에 전달 4. Repository는 DB에 요청 5. 해당 데이터를 Entity로 반환 6. Entity는 모델을 통해 View 템플릿으로 전달 7. 결과 페이지가 클라이언트에게 보임 실습에서는 articles/new를 통해 데이터를 등록한 데이터를 articles/id url에서 id 별로 데이터를 확인하는 방법이다. url에서 데이터 찾기 url의 요청을 받기 위해서는 웹 요청(Request)을 구현한 Controller가 필요하다. @GetMapping 어노테이션을 통해 url을 등..

Spring Boot 2023.03.12

[Spring Boot] Lombok 리팩토링과 로깅

대형 프로젝트나 실무에서도 Lombok은 매우 유용한 라이브러리이며, 개발자들은 Lombok을 사용하여 코드를 리팩토링 할 수 있고, 로깅 기능을 제공받는다. Lombok은 어떤 작업을 수행하기 위해 반복적으로 사용되는 코드를 줄여주고, 가독성을 높이며, 개발자가 작성해야 하는 코드 양을 줄여주는 훌륭한 라이브러리다. 대형 프로젝트나 실무에서는 보통 코드의 양이 많아지고, 가독성과 유지보수성이 매우 중요해지는데 Lombok은 이러한 문제를 해결할 수 있다. 예를 들어 Lombok의 @Getter 및 @Setter 어노테이션을 사용하면 간단하게 클래스의 Getter 및 Setter를 자동으로 생성할 수 있다. Lombok 라이브러리 추가하기 build.gradle에서 lombok 라이브러리를 추가해 주자...

Spring Boot 2023.03.11