본문 바로가기

전체 글119

스프링MVC 입문24 AOP가 필요한 상황 모든 메소드의 호출 시간을 측정하고 싶다면? 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? MemberService package com.danny.learningspring.service; import com.danny.learningspring.domain.Member; import com.danny.learningspring.repository.MemberRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import .. 2022. 11. 14.
스프링MVC 입문23 스프링 데이터 JPA 스프링 부트와 JPA만 사용해도 개발 생산성이 정말 많이 증가하고, 개발해야할 코드도 확연히 줄어듬 여기에 스프링 데이터 JPA를 사용하면, 기존의 한계를 넘어, 리포지토리에 구현 클래스 없이 인터페이스 만으로 개발을 완료할 수 있음 반복 개발해온 기본 CRUD 기능도 스프링 데이터 JPA가 모두 제공 스프링 부트와 JPA라는 기반 위에, 스프링 데이터 JPA라는 환상적인 프레임워크를 더하면 개발이 정말 즐거워짐 지금까지 조금이라도 단순하고 반복이라 생각했던 개발 코드들이 확연하게 줄어듬 개발자는 핵심 비즈니스 로직을 개발하는데, 집중할 수 있음 실무에서 관계형 데이터베이스를 사용한다면 스프링 데이터 JPA는 이제 선택이 아니라 필수 SpringDataJpaMemberReposito.. 2022. 11. 14.
스프링MVC 입문22 JPA JPA는 기존의 반복 코드는 물론이고, 기본적인 SQL도 JPA가 직접 만들어서 실행해준다. JPA를 사용하면, SQL과 데이터 중심의 설계에서 객체 중심의 설계로 패러다임을 전환을 할 수 있다. JPA를 사용하면 개발 생산성을 크게 높일 수 있다. build.gradle / JPA 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' application.properties / JPA 설정 # Jpa spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=none spring.jpa.show-sql=true -- console창에 쿼리문 출력 spring.jpa.h.. 2022. 11. 14.
스프링MVC 입문21 스프링 JdbcTemplate 순수 Jdbc와 동일한 환경설정을 하면 됨 스프링 JdbcTemplate과 MyBatis 같은 라이브러리는 JDBC API에서 본 반복 코드를 대부분 제거해줌 SQL은 직접 작성해야 함 JdbcTemplateMemberRepository package com.danny.learningspring.repository; import com.danny.learningspring.domain.Member; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.MapSqlPar.. 2022. 11. 14.
04장. 머스테치로 화면 구성하기05 게시글 삭제 만들기 posts-update.mustache에 삭제버튼 추가 취소 수정 완료 삭제 btn-delete 수정 완료 버튼 밑에 삭제버튼 추가 해당 버튼 클릭 시 js에서 이벤트를 수신함 index.js에 삭제 이벤트 함수 추가 var main = { init : function () { .......... $('#btn-delete').on('click', function () { _this.delete(); }); }, ......... delete : function () { var id = $('#id').val(); $.ajax({ type: 'DELETE', url: '/api/v1/posts/'+id, dataType: 'json', contentType:'application/js.. 2022. 11. 14.
04장. 머스테치로 화면 구성하기04 게시글 수정 만들기 PostsApiController @PutMapping("/api/v1/posts/{id}") public Long update(@PathVariable Long id, @RequestBody PostsUpdateRequestDto requestDto) { return postsService.update(id, requestDto); } 게시글 수정 API는 이미 PostsApiController를 만들 때 만들었고 Test까지 끝냈음 ​ 게시글 수정을 위한 posts-update.mustache 만들기 {{>layout/header}} 게시글 수정 글 번호 제목 작성자 내용 {{post.content}} 취소 수정 완료 {{>layout/footer}} {{post.id}} 머스테치.. 2022. 11. 14.
04장. 머스테치로 화면 구성하기03 전체 조회 화면 만들기 전체 조회를 위해 index.mustache의 UI 변경 {{>layout/header}} 스프링부트로 시작하는 웹 서비스 Ver.2 글 등록 게시글번호 제목 작성자 최종수정일 {{#posts}} {{id}} {{title}} {{author}} {{modifiedDate}} {{/posts}} {{>layout/footer}} {{#posts}} posts라는 List를 순회 Java의 for문과 동일 {{id}} 등의 {{변수명}} List에서 뽑아낸 객체의 필드를 사용 PostsRepository 인터페이스에 쿼리 추가 public interface PostsRepository extends JpaRepository { @Query("SELECT p FROM Posts p O.. 2022. 11. 14.
04장. 머스테치로 화면 구성하기02 게시글 등록 화면 만들기 레이아웃 방식 공통 영역을 별도의 파일로 분리하여 필요한 곳에서 가져다 쓰는 방식 매번 해당 라이브러리를 머스테치 파일에 추가하는 것은 귀찮은 일이니, 레이아웃 파일들을 만들어 추가 주로 header와 footer에 해당 됨 header.mustache footer.mustache index.mustache {{>layout/header}} 스프링부트로 시작하는 웹 서비스 Ver.2 글 등록 {{>layout/footer}} layaout디렉토리에 공통 header와 footer를 만들어 놓았기에 코드가 위와 같이 간결해짐 IndexController @GetMapping("/posts/save") public String postsSava(){ return "posts-save.. 2022. 11. 14.
04장. 머스테치로 화면 구성하기01 템플릿 엔진이란? 지정된 템플릿 데이터를 합쳐서 HTML문서를 출력하는 소프트웨어 서버 템플릿 엔진과 클라이언트 템플릿 엔진으로 나뉘며 둘은 작동영역이 다름 ​서버 템플릿 엔진이란? 서버에서 구동되는 템플릿 엔진으로 JSP,Freemarker가 있음 서버에서 Java 코드로 문자열을 만든 후 서버에서 HTML로 변환하여 브라우저로 전달 클라이언트 템플릿 엔진이란? 브라우저 위에서 작동하며 React, Vue.js등이 있음 브라우저에서 화면을 생성하기에 서버에서는 Json, Xml 형식의 데이터만 전달하고 클라이언트에서 조립함 ​ 머스테치란? 머스테치는 수많은 언어를 지원하는 가장 심플한 템플릿 엔진 자바에서 사용될 때는 서버 템플릿 엔진으로, 자바스크립티에서 사용될 때는 클라이언트 템플릿 엔진으로 모두 .. 2022. 11. 14.