Web/SpringBootStudy 22

코드로 배우는 스프링부트 웹 프로젝트_ MVC/JPA/Thymeleaf (2)

Querydsl 테스트Querydsl을 사용해서 다음과 같은 작업을 처리하겠다.'제목/내용/작성자' 와 같이 단 하나의 항목으로 검색'제목+내용' / '내용+작성자' / '제목+작성자' 와 같이 2개의 항목으로 검색제목+내용+작성자와 같이 3개의 항목으로 검색Querydsl 사용법 Booleanbuilder 생성조건에 맞는 구문은 Querydsl에서 사용하는 Predicate 타입의 함수를  생성Booleanbuilder에 작성된 Predicate를 추가하고 실행단일 항목 검색 테스트@Test public void findByTitle() { QGuestbook qGuestbook = QGuestbook.guestbook; //1 String keyword = "1"; ..

Web/SpringBootStudy 2024.08.13

코드로 배우는 스프링부트 웹 프로젝트_ MVC/JPA/Thymeleaf (1)

앞서 학습한 내용을 바탕으로 전체적인 프로젝트의 구조를 실습하기 위해 방명록(Guestbook)을 구성해보고자 한다.이번 장에서 다음과 같은 내용을 학습한다.프로젝트의 계층별 구조와 객체들의 구성Querydsl을 이용해서 동적으로 검색 조건을 처리하는 방법Entity 객체와 DTO 구분화면에서의 페이징 처리화면 구성목록화면 - 전체 목록을 페이징 처리해서 조회, 제목/내용/작성자 항목으로 검색과 페이징 처리등록화면 - 새로운 글을 등록할 수 있고 등록 처리 후 목록화면으로 이동조회화면 - 목록 화면에서 특정글을 선택하면 상세조회화면으로 이동, 수정 버튼 클릭 시 수정/삭제가능 화면으로 이동수정/삭제화면 - 수정/삭제 가능, 삭제 후 목록페이지 이동, 수정 후 수정된 내용 확인 기능URLHTTP Metho..

Web/SpringBootStudy 2024.08.13

코드로 배우는 스프링부트 웹 프로젝트_ Thymeleaf(1)

이번 포스트에서는 화면을 구성하기 위한 스프링 MVC 설정과 Thymeleaf에 대해 기록해보고자 한다.//SampleController@Controller@RequestMapping("/sample")@Log4j2public class SampleController { @GetMapping("/ex1") public void ex1() { log.info("ex1............."); }}@RequestMapping 과 @GetMapping 어노테이션을 활용해서 URL을 /sample/ex1 로 설정해준다.호출 시 viewResolver 가 그에 맞는 뷰 템플릿을 찾아준다. //ex1.html 기존의 속성 앞에 'th: ' 붙여주고 속성값을 지정한다. JSP와 ..

Web/SpringBootStudy 2024.08.08

코드로 배우는 스프링부트 웹 프로젝트_ Spring Data JPA(2)

이번에는 페이징/정렬 처리하는 방법에 대해 기록해 보고자 한다. 오라클의 경우 inline view, MySQL은 limit으로 처리하지만 JPA는 Dialect라는 존재를 이용해서 처리한다.개발자는 SQL이 아닌 API의 객체와 매서드를 사용하여 페이징 처리를 할 수 있다. @Test public void pagination() { //JPA에서 페이징 처리 시 pageable 인터페이스를 만들어서 파라미터로 사용한다. //param(page, size, sort) Pageable pageable = PageRequest.of(0, 10); Page result = memoRepository.findAll(pageable); //총 페..

Web/SpringBootStudy 2024.08.08

코드로 배우는 스프링부트 웹 프로젝트_ Spring Data JPA(1)

영속성(Persistence)프로그램이 종료되도 데이터가 사라지지않고 저장되는 개념을 영속성이라고한다. Java 에서는 영속성을 위해 JDBC을 지원해주지만 일일이 매핑작업을 해야하는 번거로움이 있다. 그래서 SQL Mapper 와 ORM은 JDBC의 번거로움 없이 간단한 작업만으로 DB와 연동할 수 있게 해주는 Persistence FrameWork이다. SQL MapperSQL Mapper은 객체와 테이블간의 관계를 매핑하는 것이아니라 SQL문을 직접 작성하고 쿼리 결과를 어떤 객체에 매핑해줄지 바인딩하는 방법이다. iBatis, Mybatis가 존재한다.특정 DBMS에 종속적이다.비슷한 쿼리의 반복이 발생할 수 있다.SQL을 개발자가 직접 작성해야하는 문제ORM(Object Relational Ma..

Web/SpringBootStudy 2024.08.08

스프링 MVC - 웹 어플리케이션 이해

웹은 HTTP 를 기반으로 통신한다. 클라이언트가 인터넷에 접속하여 서버에 데이터를 요청할 때, 서버가 그에 맞는 데이터를 전달할 때 HTTP를 기반으로 동작한다. HTTP 메시지에 모든것을 담아 전송한다. HTML, TEXT 이미지, 음성, 영상, 파일 JSON, XML(API) 서버간 데이터 전송 웹서버(Web-Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, 이미지 예) NGIX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함(정적 리소스 제공 가능) 애플리케이션 로직 수행 동적 HTML, HTTP AIP(JSON) 서블릿, JSP, 스프링 MVC 자바는 서블릿 ..

Web/SpringBootStudy 2024.04.03

스프링 핵심 원리 - 빈 스코프

스프링 빈[*빈]은 스프링 컨테이너[*컨테이너]의 시작과 함께 생성되어 컨테이너가 종료될 때 까지 유지된다. 이것은 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 빈이 존재할 수 있는 범위를 뜻한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다. 프로토타입 : 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다 >> 초기화 메서드까지 웹관련 스코프 request : 웹 요청이 들어오고 나갈때 까지 유지되는 스코프이다. session : 웹 세션이 생성되고 종료될 때 까지 유지되는 스코피다. application : 웹의 서블릿 컨텍스트와 같은 범위로 유지되는 스코프이다. 싱..

Web/SpringBootStudy 2024.03.28

스프링 핵심 원리 - 웹 애플리케이션과 싱글톤 컨테이너

웹 애플리케이션의 특성 상 여러고객이 동시에 서비스를 요청할때마다 메모리에 객체들을 생성한다. 당연히 메모리 부하가 예상된다. 코드로 확인해보겠다. @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //1. 조회 : 호출할 때마다 객체를 생성 MemberService memberService = appConfig.memberService(); //1. 조회 : 호출할 때마다 객체를 생성 MemberService memberService2 = appConfig.memberService(); System.out.println("memberService = " + memberS..

Web/SpringBootStudy 2024.03.22

스프링 핵심 원리 - 스프링 컨테이너

지금까지 JAVA 코드로 객체들을 생성하고 주입하고 했었지만, 이를 스프링에게 역할을 넘겨보겠다. 먼저 그림으로 살펴보자 new AnnotationConfigApplicationContext 을 생성하고 클래스를 파라미터로 넘겨준다. 스프링 빈으로 등록 시 스프링 컨테이너내에 메서드이름 / 객체[값] 형태로 등록된다. 코드로 확인해보자 @Configuration public class AppConfig { //스프링 컨테이너에 등록 @Bean public MemberService memberService(){ return new MemberServiceImpl(memberRepository()); } } 수동으로 Bean을 등록하기 위해서 @Configuration 과 @Bean 어노테이션을 추가해준다...

Web/SpringBootStudy 2024.03.22

스프링 핵심 원리 - 기본편[스프링 정리]

제어의 역전 IoC(Inversion of Control) 기존에는 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행했다. 한마디로 구현객체가 프로그램의 제어 흐름을 스스로 조종했다. public class MemberServiceImpl implements MemberService { //개발자가 직접 연결 private final MemberRepository memberRepository = new MemoryMemberRepository(); } 반면에 AppConfig가 등장한 후에 구현 객체는 자신의 로직을 실행하는 역할만 담당한다. 제어의 흐름은 AppConfig가 가져간다. public class OrderServiceImpl implements OrderService..

Web/SpringBootStudy 2024.03.19