최신 글
-
Spring
스프링 오라클 연동 하는 법
공부용 1. jdbc 파일 설정 오라클이랑 maven이랑 라이센스 문제로 pom.xml에 등록이 안된다고 한다 그래서 jdbc파일은 따로 설정해줘야 하는데 방법은 여러가지가 있다 본인 같은 경우엔 jar파일을 따로 추가해줬다 2. pom.xml org.mybatis mybatis 3.4.6 org.mybatis mybatis-spring 1.3.2 org.springframework spring-jdbc ${org.springframework-version} jdbc를 제외한 필요한 라이브러리 3개를 추가해준다 3. config 파일 생성 4. root-context.xml 그 외에도 설정한거 여러개 있었던거 같은데, 일단 기억나는 것만 적어봄 ※jdbc를 못찾는다고 하면 컴퓨터에 설치된 jdk폴더와 j..
-
Spring Boot
스프링부트 조회수 기능 추가하기 @Query
1. 조회수 기능 추가하기 1-1 Repository public interface BoardRepository extends JpaRepository { @Modifying @Query("update Board p set p.view = p.view + 1 where p.id = :id") int updateView(Long id); } 레파지토리에 쿼리문을 작성해주었다 여기서 눈에 띄는 건 @Modifying인데, 저 어노테이션을 왜 썼냐 하면.. @Query 어노테이션으로 작성된 변경, 삭제 쿼리 메서드를 사용할 때 필요하다 즉, 조회 쿼리를 제외하고, 데이터 변경이 일어나는 INSERT, UPDATE, DELETE에서 사용된다 예제 코드에서는 UPDATE를 사용했기에 붙여줬다 1-2 Service..
-
Spring Boot
스프링부트 검색, 페이징처리 하기 Pageable - 2 -
드디어 모든 기능 구현 끝났다 ㅜㅜㅜ gonyda.tistory.com/15 스프링부트 검색, 페이징처리 하기 Pageable 오늘은 검색 기능과 페이징 처리에 대해서 포스팅해보겠다 90프로 정도 완성했는데 완성 못한 게 있다 각 페이지에 대한 부분을 동적으로 바꾸고 싶은데 어떻게 해야 할지 모르겠다ㅜㅜ 이건 천 gonyda.tistory.com 저번 글에 이어서 구현한 기능들을 포스팅하겠다 이번 포스팅에서 설명할 기능들은 1. pagination에 따른 동적 URL (feat.Mustache) 2. 마지막 페이지 일시 'Next' 버튼 비활성화 번외. List와 Page 1. pagination에 따른 동적 URL (feat.Mustache) 먼저 코드부터 보자 1-1 Mustache {{>layout..
-
Spring Boot
스프링부트 검색, 페이징처리 하기 Pageable
오늘은 검색 기능과 페이징 처리에 대해서 포스팅해보겠다 90프로 정도 완성했는데 완성 못한 게 있다 각 페이지에 대한 부분을 동적으로 바꾸고 싶은데 어떻게 해야 할지 모르겠다ㅜㅜ 이건 천천히 다시 찾아보고, 오늘은 일단 구현한 기능들을 얘기해보겠다 까먹기 전에 기록! 1. 검색 2. 페이징 처리 3. 검색 페이지에서 페이징 이 세 가지를 다룰 예정이다 3번의 같은 경우는 검색을 하면 검색 결과가 많을 경우에 대한 페이징 처리이다 그럼 바로 시작 1. 검색 1-1 Repository public interface BoardRepository extends JpaRepository { List findByTitleContaining(String keyword); } JpaRepository에서 메서드명의 B..
-
Spring Boot
스프링부트에서 REST API 테스트코드 작성하기
오늘은 테스트 코드에 대해서 끄적여볼까 한다 이 역시 나를 위한 포스팅이다. 까먹기 전에 기록해놔야지 package com.example.study.api; import com.example.study.dto.BoardDto; import com.example.study.entity.Board; import com.example.study.repository.BoardRepository; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test..
-
Spring Boot
게시판 게시글 정렬 하는법
까먹기 전에 언능 기록해야지 코드들은 현재 공부 중인 프로젝트에서 가져왔음 1. Repository public interface ArticleRepository extends JpaRepository @Query("SELECT p FROM Article p ORDER BY p.id DESC") List findAllDesc(); } Repository에 해당 쿼리문을 작성한다 정렬하는데 OREDER BY를 사용했다 예제 코드에서는 Article이라는 테이블에서 id를 내림차순을 한걸 확인할 수 있다 그리고 메서드를 정의해준다 2. Service @Transactional public List findAllDesc(List articles) { return articleRepository.findAllD..
-
Spring Boot
[스프링부트 JPA] 연관관계 매핑
연관관계 매핑 엔티티들은 대부분 서로 관계를 맺고 있다 예를 들어 게시글 엔티티와 댓글 엔티티가 있을 때, 게시글은 여러 개의 댓글을 가질 수 있다 이렇게 엔티티들이 서로 어떤 연관관계가 있는지 파악하는것은 매우 중요하다 연관관계 매핑이란 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미한다 JPA에서는 JDBC(Mybatis)를 사용했을 때와 달리 연관관계에 있는 상대 테이블의 PK를 멤버변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조한다 JPA와 Mybatis의 차이 // Mybatis private Integer post; // JPA private Post post; 위에 예제는 댓글 엔티티가 게시글 엔티티를 참조하는 모습이다 Mybatis는 관계에 있는 테이블의 PK를 멤버 변수로 갖지만,..
-
Java
Java 자바 인터페이스란, 추상클래스 VS 인터페이스
추상 클래스와 인터페이스의 차이점은 뭘까? 추상 클래스를 사용할지 인터페이스를 사용하지 어떻게 정할까? 일단 기본적으로 추상 클래스와 인터페이스가 무엇인지 알아보자 추상 클래스란? 추상 클래스는 일반 클래스와 별 다를 것이 없다 단지, 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스이다 그래서 미완성 설계도라고도 표현한다. 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다 class 앞에 "abstract" 키워드를 사용하여, 상속을 통해서 구현해야 한다는 것을 알려주고 선언부만 작성하는 추상 메서드를 선언할 수 있다 abstract class 클래스이름 { ... public abstract void 메서드이름(); } 더 자세히 알고 싶으면 여기를 보면 좋을 ..
-
Java
Java 자바 추상클래스란
추상 클래스의 문법적인 특징이나, 객체 생성이 되고 안되고 이런 특징들이 중요한 게 아니다. 추상 클래스가 무엇이고 왜 사용하는지, 본질적인 개념부터 알아야 연쇄적으로 자연스럽게 추상 클래스를 이해할 수 있다 그 이유는, 추상 클래스의 본질을 이해하는 순간 문법적인 부분은 외우지 않아도 추상 클래스 철학에 맞게 녹아져 있다 1. 추상 클래스 개념 추상 클래스는 도대체 뭘까? 결론부터 말하면 A클래스, B클래스, C클래스가 있다고 가정을 해보자 여기서 각 클래스 안에는 각자의 필드와 메서드가 있을 것이다. 추상클래스는 A클래스, B클래스, C클래스들 간에 비슷한 필드와 메서드를 추출해 만들어진 클래스이다 예를 들어 '키보드'라는 클래스가 있다. '키보드'를 만드는 제조사는 여러 개다. A 제조사, B제조사..
-
Spring Boot
자바 빌더 패턴에 대해서 + @Builder
빌더 패턴에는 크게 두가지가 있다 1. 이펙티브 자바의 빌더패턴 - GoF의 빌더 패턴보다 좀 더 코딩 위주의 활용법을 설명한다. - 코드 읽기/유지보수가 편해지므로 빌더 패턴을 쓰라고 한다. - GoF가 책을 썼을 때에는 상대적으로 덜 중요했던 객체 일관성, 변경 불가능성 등의 특징을 설명한다. 2. GoF의 빌더 패턴 - 객체의 생성 알고리즘과 조립 방법을 분리하는 것이 목적이다. 두 책의 관점이 다르고, 이펙티브 자바(2001년)가 GoF의 디자인 패턴(1994년)보다 나중에 나왔기 때문인 것 같다 나는 이펙티브 자바의 빌더 패턴만 다뤄 보겠다 Effective Java의 빌더 패턴 생성자가 많을 때는 Builder 패턴 적용을 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 이펙티브 자바에서 ..
-
Spring Boot
JPA - Hibernate - Spring Data JPA 차이점
JPA JPA는 기술 명세이다 JPA는 Java Persistence API의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다 여기서 중요하기 여겨야 할 부분은, JPA는 말 그대로 인터페이스라는 점이다. JPA는 특정 기능을 하는 라이브러리가 아니다 마치 일반적인 백엔드 API가 클라이언트가 어떻게 서버를 사용해야 하는지를 정의한 것처럼, JPA 역시 자바 애플리케이션에서 관계형 데이터베이스를 어떻게 사용해야 하는지를 정의하는 한 방법일 뿐이다 JPA는 단순히 명세서 이기 때문에 구현이 없다. JPA를 정의한 javax.persistence패키지의 대부분은 interface, enum, Exception, 그리고 각종 어노테이션으로 이루어져 있다 예를 들어, J..
-
Spring Boot Project
Spring Boot 게시판 만들기 [3] 게시글 조회, 수정, 삭제
1. 게시글 목록 1-1 HTML src/main/resources/static/css/board.css table { border-collapse: collapse; } table, th, td { border: 1px solid black; } 게시글 목록의 테이블을 꾸며주는 css 다음은 게시글 리스트 페이지이다 src/main/resources/templates/board/list.html 글쓰기 번호 글제목 작성자 작성일 - 앞에서 작성한 board.css를 불러오는 코드 - css, js, img 같은 정적 자원들을 src/main/resourses/static 경로에 저장하면 스프링 부트가 인식하게 된다 - thymeleaf에서 반복문을 사용하는 부분이다 - 컨트롤러가 넘겨주는 변수는 ${}..