본문 바로가기

분류 전체보기

(16)
스프링 오라클 연동 하는 법 공부용 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..
스프링부트 조회수 기능 추가하기 @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..
스프링부트 검색, 페이징처리 하기 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..
스프링부트 검색, 페이징처리 하기 Pageable 오늘은 검색 기능과 페이징 처리에 대해서 포스팅해보겠다 90프로 정도 완성했는데 완성 못한 게 있다 각 페이지에 대한 부분을 동적으로 바꾸고 싶은데 어떻게 해야 할지 모르겠다ㅜㅜ 이건 천천히 다시 찾아보고, 오늘은 일단 구현한 기능들을 얘기해보겠다 까먹기 전에 기록! 1. 검색 2. 페이징 처리 3. 검색 페이지에서 페이징 이 세 가지를 다룰 예정이다 3번의 같은 경우는 검색을 하면 검색 결과가 많을 경우에 대한 페이징 처리이다 그럼 바로 시작 1. 검색 1-1 Repository public interface BoardRepository extends JpaRepository { List findByTitleContaining(String keyword); } JpaRepository에서 메서드명의 B..
스프링부트에서 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..
게시판 게시글 정렬 하는법 까먹기 전에 언능 기록해야지 코드들은 현재 공부 중인 프로젝트에서 가져왔음 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..
[스프링부트 JPA] 연관관계 매핑 연관관계 매핑 엔티티들은 대부분 서로 관계를 맺고 있다 예를 들어 게시글 엔티티와 댓글 엔티티가 있을 때, 게시글은 여러 개의 댓글을 가질 수 있다 이렇게 엔티티들이 서로 어떤 연관관계가 있는지 파악하는것은 매우 중요하다 연관관계 매핑이란 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미한다 JPA에서는 JDBC(Mybatis)를 사용했을 때와 달리 연관관계에 있는 상대 테이블의 PK를 멤버변수로 갖지 않고, 엔티티 객체 자체를 통째로 참조한다 JPA와 Mybatis의 차이 // Mybatis private Integer post; // JPA private Post post; 위에 예제는 댓글 엔티티가 게시글 엔티티를 참조하는 모습이다 Mybatis는 관계에 있는 테이블의 PK를 멤버 변수로 갖지만,..
Java 자바 인터페이스란, 추상클래스 VS 인터페이스 추상 클래스와 인터페이스의 차이점은 뭘까? 추상 클래스를 사용할지 인터페이스를 사용하지 어떻게 정할까? 일단 기본적으로 추상 클래스와 인터페이스가 무엇인지 알아보자 추상 클래스란? 추상 클래스는 일반 클래스와 별 다를 것이 없다 단지, 추상 메서드를 선언하여 상속을 통해서 자손 클래스에서 완성하도록 유도하는 클래스이다 그래서 미완성 설계도라고도 표현한다. 상속을 위한 클래스이기 때문에 따로 객체를 생성할 수 없다 class 앞에 "abstract" 키워드를 사용하여, 상속을 통해서 구현해야 한다는 것을 알려주고 선언부만 작성하는 추상 메서드를 선언할 수 있다 abstract class 클래스이름 { ... public abstract void 메서드이름(); } 더 자세히 알고 싶으면 여기를 보면 좋을 ..
Java 자바 추상클래스란 추상 클래스의 문법적인 특징이나, 객체 생성이 되고 안되고 이런 특징들이 중요한 게 아니다. 추상 클래스가 무엇이고 왜 사용하는지, 본질적인 개념부터 알아야 연쇄적으로 자연스럽게 추상 클래스를 이해할 수 있다 그 이유는, 추상 클래스의 본질을 이해하는 순간 문법적인 부분은 외우지 않아도 추상 클래스 철학에 맞게 녹아져 있다 1. 추상 클래스 개념 추상 클래스는 도대체 뭘까? 결론부터 말하면 A클래스, B클래스, C클래스가 있다고 가정을 해보자 여기서 각 클래스 안에는 각자의 필드와 메서드가 있을 것이다. 추상클래스는 A클래스, B클래스, C클래스들 간에 비슷한 필드와 메서드를 추출해 만들어진 클래스이다 예를 들어 '키보드'라는 클래스가 있다. '키보드'를 만드는 제조사는 여러 개다. A 제조사, B제조사..
자바 빌더 패턴에 대해서 + @Builder 빌더 패턴에는 크게 두가지가 있다 1. 이펙티브 자바의 빌더패턴 - GoF의 빌더 패턴보다 좀 더 코딩 위주의 활용법을 설명한다. - 코드 읽기/유지보수가 편해지므로 빌더 패턴을 쓰라고 한다. - GoF가 책을 썼을 때에는 상대적으로 덜 중요했던 객체 일관성, 변경 불가능성 등의 특징을 설명한다. 2. GoF의 빌더 패턴 - 객체의 생성 알고리즘과 조립 방법을 분리하는 것이 목적이다. 두 책의 관점이 다르고, 이펙티브 자바(2001년)가 GoF의 디자인 패턴(1994년)보다 나중에 나왔기 때문인 것 같다 나는 이펙티브 자바의 빌더 패턴만 다뤄 보겠다 Effective Java의 빌더 패턴 생성자가 많을 때는 Builder 패턴 적용을 고려하라 생성자에 매개변수가 많다면 빌더를 고려하라 이펙티브 자바에서 ..
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 게시판 만들기 [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에서 반복문을 사용하는 부분이다 - 컨트롤러가 넘겨주는 변수는 ${}..
Spring Boot 게시판 만들기 [2] 게시글 추가하기 이번 편을 시작하기 전에 현재 프로젝트를 깃허브에 연동해보자 이 글을 보고 오면 좋을 것 같다 이번 편에서는 이렇게 다룰 예정이다 1. 게시글 추가하기 2. TimeZone 설정하기 그럼 바로 시작하자 1. HTML 1-1 헤더와 푸터 templates/common/header.html 헤더 입니다. templates/common/footer.html 푸터입니다. 모든 페이지에 존재하는 헤더와 푸터 1-2 게시글 리스트 페이지 templates/board/list.html 글쓰기 Thymeleaf 문법을 볼 수 있다. xmls:th="http://www.w2.org/1999/xhtml" - XHTML 문서를 위한 XML 네임스페이스를 명시하는 것으로, 생략해도 정상작동한다 - 인텔리제이에서 Thymele..
IntelliJ에서 Git Hub연동하기 IntellJ에서 GitHub를 연동해서 간단하게 커밋, 푸시를 해보자 Settings에서 github 검색 -> Add account 클릭 본인의 깃허브 계정 로그인 사진과 같이 클릭 원하는 프로젝트 이름 입력 후 Share 클릭 최초 커밋 부분이다 Commit Message에 내용 입력 후 Add 클릭 Add버튼을 클릭하면 본인의 깃허브 계정에 프로젝트가 올라가 있을 것이다 맞나? 기억이 안 나네 자동으로 푸시가 됐던가...? 본인 계정으로 들어가서 확인해보자! ㅎㅎ.. 그 후에 커밋과 푸시는 어떻게 하나? CTRL + K을 누르면 커밋 창이 뜬다 마찬가지로 내용입력 후에 밑에 Commit을 누르면 된다 CTRL + SHIFT + K를 누르면 푸시 창이 뜬다 밑에 Push버튼 클릭 우측 하단에 푸시가..
Spring Boot 게시판 만들기 [1] 개발환경 구축하기 아직 공부한지도 얼마 되지 않았고, 혼자서 뭐를 만들 역량이 되지는 않는 거 같다 그래도 뭐든 만들어보는 게 중요하다 생각해서 다른 분들이 써준 훌륭한 글들을 참고하면서 게시판 만들기를 진행해 볼까 한다 나는 이 분의 글을 참고하며 공부를 할 생각이다 사실 그냥 따라 하기다 열심히 공부하겠습니당 나의 개발 환경 - IntelliJ - Java 8 - SpringBoot 2.1.8 - Gradle 6.4.1 - MySQL 5.7 라이브러리 - JPA - Thymeleaf - Lombok - LiveReload - DevTools 이번 편에서는 이렇게 다룰 예정이다 1. 프로젝트 생성 후 스프링 부트 버전 변경 2. Lombok 플러그인 설치 및 설정 3. MySQL 설치 4. HelloWorld 출력 5...
spring 웹계층 ■ Web Layer - 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역 - 이외에도 필터(@Filter), 인터셉터, 컨트롤러 어드바이스(@ControllerAdvice)등 외부 요청과 응답에 대한 전반적인 영 역을 이야기한다 ■ Service Layer - @Service에 사용되는 서비스 영역이다 - 일반적으로 Controller와 Dao의 중간 영역에서 사용된다 - @Transactional이 사용되어야 하는 영역이기도 하다 ■ Repository Layer - Database와 같이 데이터 저장소에 접근하는 영역 - 기존에 개발했던 사람들은 Dao영역으로 이해하면 쉽다 ■ Dtos - Dto(Data Transfer Object)는 계층 간에 데이..