본문 바로가기

🌱JAVA

(47)
<SpringBoot> 게시판에 검색 기능 구현하기 # 예제 게시판에 검색기능을 구현해보자. 아래와 같이 생긴 녀석인데, 여기에 검색 기능을 넣어보자. 게시판의 기본틀은 아래와 같다. 여기서 구현을 해야할것은 위에 검색창에서 제목과 관련된 아무내용이나 입력하고 Search를 클릭했을때 화면에 검색 조건에 해당한 내용만 표시해 준다. 그리고 해당 페이지에 게시판 리스트로 이동? 이정도의 아이콘만 넣어주면 될거 같다. 쿼리는 LIKE 문으로 처리를 해주면 될거 같고, 컨트롤러는 새로 만들던지 아니면 기존에 있는 클래스에 구현을 해주던지 하면 될거 같고, 뭐 그렇다. 그럼 개발을 해볼까. 1. 검색 결과 페이지 만들기 일안 결과 후 리턴되는 검색 결과 페이지를 만든다. 뭐 SPA다 뭐다 하는 기능들이 있지만 나는 그런거는 모르므로 새로 페이지를 만들어서 값을 ..
<SpringBoot> Swagger 적용해보기 # SpringBoot 프로젝트에 Swagger 스웨거 를 적용해보자. - 현재 예제로 개발하고 있는 게시판 프로젝트에 적용을 해보자. 1. 일단 build.gradle에 라이브러리를 추가한다. 일단 Swagger3.0은 스프링 부트 버전 때문인지 적용하면 에러가 발생, 트러블 슈팅 보다는 다른 라이브러리를 추가하는게 낫겠다 싶어서 open-api 라이브러리를 추가함. // Swagger implementation 'org.springdoc:springdoc-openapi-ui:1.6.6' 2. SwaggerConfig.java 파일을 생성하고 아래의 코드를 작성해준다. - 기본적인 설정 코드인거 같고, package com.example.firstproject; import io.swagger.v3.o..
<SpringBoot> insert2개 수행, 1개는 그냥 insert, 1개는 Admin 붙여서 insert # 시나리오는 아래와 같다. - 사용자가 insert 수행 시 제목과 내용을 입력하도록 되어 있다. ID는 자동으로 증가하는 방식이고 PK로 되어 있다. 여기서 사용자가 제목과 내용을 입력 시 1개가 INSERT 되는 것이 아닌 2개가 INSERT 되고 1개는 그냥 INSERT가 수행되고 나머지 1개에는 제목과 내용에 Admin이라는 문구가 추가되어 INSERT 하는 시나리오이다. - 실행 화면은 아래와 같다. MP4 버전 코드 설명 (매우 조잡한거 같음.) @Slf4j @Controller @Component public class HomeworkController { @Autowired ArticleRepository articleRepository; @PostMapping("/articles/cre..
<SpringBoot> 댓글이 있는 게시글 삭제 시 오류 메세지 출력 및 게시글 삭제하기 # 문제점 해결하기 일단 게시글 삭제 시 댓글이 있으면 오류를 내뿜는 문제가 있었다. 그도 그럴것이 게시글 DELETE를 하는데 아래의 정보만 가져온다. Article target = articleRepository.findById(id).orElse(null); 위 코드를 보면 id를 SELECT해서 가져오는 정보를 target에 담아둔다. SELECT * FROM ARTICLE WHERE ID = 1; ID CONTENT TITLE 1 may9noy email_name 근데 이게 뭐가 문제냐면 댓글이 달리면 해당 페이지를 삭제를 할때 댓글 내용까지 함께 삭제를 하던지, 아니면 오류 메시지를 보여주던지 해야하는 문제가 있었다. 나는 여기서 후자를 선택했다. 게시글에 댓글이 있으면 댓글을 삭제 후 게시글..
Dto와 Entity # Dto와 Entity - DTO 의 역할 DTO는 프로세스 간에 데이터를 전달하는 용도의 객체이다. 비즈니스 로직을 포함하지 않는 데이터를 전달하기 위한 단순한 객체 를 뜻하고 MVC 패턴에서는 주로 Client 와 Controller 사이에서 데이터를 전달하는 용도로 사용된다. (DTO는 주로 POST로 값을 전달할때 사용 되는거 같고 해당 값을 Entity로 넘기거나 할때 사용 되는거 같다.) - ENTITY의 역할 ENTITY는 JPA 의 실제 DB 의 테이블과 매핑되는 객체로서, 서비스에서 행하는 Business 로직 중 데이터의 변경에 대한 역할을 수행하는 객체라 할 수 있다.
DTO, VO, DAO에 대한 정리 # DTO와 VO에 대해 정리, DAO는 간단하게만 정리 1. DTO 란? - DTO(Data Transfer Object) 는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 별도의 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)이다. 유저가 입력한 데이터를 DB에 넣는 과정을 살펴보면 아래와 같다. 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송한다. 해당 DTO를 받은 메소드가 DTO 데이터를 DB로 INSERT 한다. 2. VO 란? - VO(Value Object)는 값을 위해 사용한다. read-Only 만 가능하다. 언뜻보면 DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변한다는 점이 ..
MVC 흐름 정리 # MVC 패턴 흐름정리 - 차근차근 1번 : 입력값이다. PostMapping으로 입력되는 입력값이다. 2번 : 입력값을 Dto 타입으로 변환환다. Dto 타입은 아래와 같다. @Data public class UserDto { private String email; private String name; private String pwd; private String userId; private Date createAtl; private String encryptedPwd; } 3번 : 변환된 Dto 타입의 값을 인풋파라미터로 userService.createUser 인터페이스로 전송한다. 4번 : UserService 인터페이스에서 UserServiceImpl을 호출한다. 5번 : 인풋 파라미터로 받아..
service를 impl로 사용해야 하는 이유? # service를 impl로 나누어서 사용해야 하는이유? 결국에는 어떤 컨트롤러가 호출을 하던 독립적인 작업이 수행되도록 하기 위해서이다. 예를들면 service라는 패키지안에 UserService와 UserServiceImpl이라는 인터페이스와 클래스를 만든다. - UserService public interface UserService { UserDto createUser(UserDto userDto); } - UserServiceImpl @Service public class UserServiceImpl implements UserService { UserRepository userRepository; BCryptPasswordEncoder passwordEncoder; @Autowired Use..