본문 바로가기
반응형

분류 전체보기337

[Spring Boot] Request method 'DELETE' not supported Request method 'DELETE' not supported @DeleteMapping을 이용해 게시글 삭제 기능을 구현하고 있었는데, 405 에러가 떴다. Spring boot에서 put, delete 요청에서 @DeleteMapping이나 @PutMapping을 사용할 경우에는 application.properties에 다음 설정을 추가해야한다. spring.mvc.hiddenmethod.filter.enabled=true 다만, 추가적인 이슈가 있다면 tomcat과 연동해 사용할 경우에는 request의 body 내용을 HTTP POST Method일 때만 파싱해올 수 있다 tomcat에서 설정을 바꿔주거나 스프링에서 제공하는 필터 등을 사용하면 된다. (방법은 참고2 링크) 참고 (1) p.. 2021. 1. 20.
[Mustache & Spring] 전체 조회 화면 만들기 UI 변경 index.mustache에 게시글 목록을 나타낼 테이블 코드를 추가 {{>layout/header}} 스프링 부트로 시작하는 웹 서비스 글 등록 게시글 번호 제목 작성자 최종 수정일 {{#posts}} {{id}} {{title}} {{author}} {{modifiedDate}} {{/posts}} {{>layout/footer}} Repostiory 수정 PostsRepository.interface 수정 public interface PostsRepository extends JpaRepository{ @Query("SELECT p FROM Posts p ORDER BY p.id DESC") List findAllDesc(); } @Query - SpringDataJpa에서 제공하지 않.. 2021. 1. 19.
[Mustache] 게시글 등록 화면 만들기 공통 코드 게시글 등록 화면에 앞서 부트스트랩과 제이쿼리 라이브러리를 추가하겠다. 이 라이브러리들은 mustache 화면 어디서나 들어가는 공통 코드들이니 별도로 레이아웃 파일을 추가하겠다. 본 프로젝트는 간단한 규모이니 외부 CDN을 사용한다. 하지만 실무에서는 이 방법을 사용하면 CDN 서비스하는 곳에 문제 생기면 CDN을 사용한 화면에서도 덩달아 문제가 생겨버리니 잘 쓰지 않고, 직접 라이브러리를 받아서 사용한다. src/main/resources/templates/layout에 header, footer를 만든다. header.mustache footer.mustache 위 코드를 보면 header에 css, footer에 js 파일이 추가되었다. html은 기본적으로 위에서 아래로 코드가 실행되.. 2021. 1. 19.
[eclipse] mustache 이용하기 intellij와는 다르게 eclipse에서는 mustache 플러그인이 존재하지 않는다. *.mustache 형식으로 파일을 생성할 수는 없지만 하이라이트, 기울기 등의 효과가 없어 코드를 작성, 수정이 힘들다. html 파일로 생성한 뒤에 파일 이름 수정을 통해 .mustache로 바꾸는 경우도 있지만, 매번 이렇게 하기는 힘들 것이다. 그래서 나는 아예 mustache 형식의 파일은 html 문법을 따르도록 설정해두었다. window - preferences - General - Content Types Add Root 버튼 클릭 후 Mustache 입력 (이름은 자유롭게 지정해도 된다.) File associations의 Add 버튼을 누르고 *.mustache 추가 Associated edito.. 2021. 1. 19.
정수 삼각형 위와 같은 삼각형의 꼭대기에서 바닥까지 이어지는 경로 중, 거쳐간 숫자의 합이 가장 큰 경우를 찾아보려고 합니다. 아래 칸으로 이동할 때는 대각선 방향으로 한 칸 오른쪽 또는 왼쪽으로만 이동 가능합니다. 예를 들어 3에서는 그 아래칸의 8 또는 1로만 이동이 가능합니다. 삼각형의 정보가 담긴 배열 triangle이 매개변수로 주어질 때, 거쳐간 숫자의 최댓값을 return 하도록 solution 함수를 완성하세요. 제한사항 삼각형의 높이는 1 이상 500 이하입니다. 삼각형을 이루고 있는 숫자는 0 이상 9,999 이하의 정수입니다. 내 코드 import java.lang.Math; class Solution { public int solution(int[][] triangle) { for(int i=1;i 2021. 1. 18.
[Mustache] 화면 구성 Mustache란? 머스테치는 다양한 언어를 지원하는 심플한 템플릿 엔진이다. (템플릿 엔진: 지정된 템플릿 양식과 데이터가 합쳐져 html 문서를 출력하는 소프트웨어.) java에서 이용할 때는 서버 템플릿 엔진, javascript에서 이용할 때는 클라이언트 템플릿 엔진으로 모두 사용 가능하다. 서버 템플릿 엔진의 종류 - JSP, Velocity: 스프링 부트에서 권장 x - Freemarker: 템플릿 엔진으로서 과한 기능 지원. 숙련도 낮으면 비즈니스 로직 추가의 확률 有 - Thymeleaf: 스프링에서 권장. 문법이 어려움 - Mustache: 심플. 하나의 문법으로 서버/클라 모두 사용 가능. Intellij를 기준으로, thymeleaf의 플러그인은 유료이므로 이 프로젝트에선 Mustac.. 2021. 1. 18.
[JPA Auditing] 생성/수정시간 자동화 보통 entity에는 언제 만들어졌는지, 언제 수정됐는지 등 유지보수를 위해 데이터의 생성/수정시간을 포함한다. DB에 삽입 전, 갱신 전 날짜 데이터를 등록/수정하는 코드가 여기저기 들어가게 되는 단순하고 반복적인 코드를 매번 작성하는게 번거롭고 코드가 지저분해진다. 이를 해결하기 위한 것이 JPA Auditing이다. 시간을 구하는데 Date, Calendar, LocalDate 등 여러가지가 있다. 이슈 - Date와 Calendar는 몇 가지 문제가 있었는데, Java 8에서는 이를 개선하며 LocalDate가 등장했다. ( yeonyeon.tistory.com/24?category=916856 참고) - LocalDate와 LocalDateTime이 db에 제대로 매핑되지 않는 이슈가 있었는데 .. 2021. 1. 18.
[JPA] 더티 체킹 (설명만 보려면 게시글 아래로) 게시글을 수정하는 코드를 작성하고 있다. 순서대로 Controller와 Service 코드의 일부이다. @PutMapping("/api/v1/posts/{id}") public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto) { return postsService.update(id, requestDto); } @Transactional public Long udpate(Long id, PostsUpdateRequestDto requestDto) { Posts posts = postsRepository.findById(id) .orElseThrow(() -> new Illega.. 2021. 1. 18.
[Spring] 등록 API 만들기 (+h2 웹 콘솔 이용하기) API 생성을 위한 클래스 1. Dto : Request 데이터 받기 2. Controller : API 요청 받기 3. Service : 트랜잭션, 도메인 기능 간의 순서 보장 Service에서 비즈니스 로직을 처리해야 한다고 오해하기 쉬운데, 트랜잭션과 도메인 간 순서만 보장하면 된다. Spring 웹 계층 Web Layer - Controller와 View Template 영역 - 필터, 인터셉터, @ControllerAdvice 등 외부 요청과 응답에 대한 전반적인 영역 Service Layer - @Service - 보통 Controller와 Dao의 중간 영역 - @Transactional이 사용되어야 하는 영역 Repository Layer - DB 같은 데이터 저장소에 접근하는 영역 - D.. 2021. 1. 15.
반응형