Spring legacy 18

Model, RedirectAttribute

Model Servlet은 request.setAttribute()로 데이터를 전달한다면, 스프링은 Model객체로 데이터를 전달한다. Controller @GetMapping("/testModel") public void model(SampleDTO sampleDTO,Model model) { SampleDTO dto = new SampleDTO(); dto.setName("cocokim"); dto.setAge(123); //dto객체를 Model객체에 바인딩 model.addAttribute("dto", dto); } view Model Test Model로 전달 받은 데이터 : ${dto } name : ${dto.name } age : ${dto.age } @ModelAttribute @Mode..

Spring legacy 2020.09.12

Spring MVC

스프링 MVC 이미지 출처 스프링의 목적은 웹이 아니다. 위에 보이는 것처럼 스프링 웹은 스프링의 기능 중 하나일 뿐이다. 스프링 MVC 프로젝트를 생성하면, 자바 영역(POJO)과 웹 영역을 연동해서 프로젝트를 구동하게 된다. 웹 영역이 MVC설정을 포함하고 있다. 스프링 MVC의 사상 스프링 MVC 이전까지는 Servlet/JSP API를 이용했다. HttpServletRequest/Response 같은 클래스를 이용해서 브라우저와 서버 간 데이터를 주고 받았다. 이런 부분을 내부적으로 처리하고, 개발자는 자바 코드로 개발에만 몰두할 수 있도록 하자는 생각에서 탄생한 것이 스프링 MVC다. 스프링 MVC 구조 이미지 출처 모든 요청은 DispatcherServlet(web.xml)으로 들어온다. Ha..

Spring legacy 2020.09.12

파라미터 수집Binding

자동 수집 DTO @Data public class SampleDTO { private String name; private int age; } 컨트롤러 @GetMapping("/autoCollect") public void parameterAutoCollect(SampleDTO dto) { SampleDTO parameters = dto; log.info(parameters); log.info(parameters.getAge() == 1); } 이렇게만 해두고 브라우저에 http://localhost:8080/sample/autoCollect?name=cocolee&age=20를 요청한다. INFO : com.coco.controller.SampleController - SampleDTO(name=co..

Spring legacy 2020.09.12

콘솔에서 쿼리 확인하는 log4jdbc-log4j2 라이브러리

log4jdbc-log4j2 해당 라이브러리를 이용하면 콘솔에서 SQL문과 결과를 가지런하게 확인할 수 있다. 우선 메이븐 설정을 추가한다. 링크 org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 RootConfig.java @Bean public DataSource dataSource() { HikariConfig config = new HikariConfig(); // config.setDriverClassName("com.mysql.cj.jdbc.Driver"); // config.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/springex?serverTimezone=Asia/Seoul"); config.setDriverCla..

Spring legacy 2020.09.12

MyBatis

💣 마이바티스는 무엇인가? 마이바티스는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. 마이바티스는 JDBC로 처리하는 상당부분의 코드와 파라미터 설정및 결과 매핑을 대신해준다. 마이바티스는 데이터베이스 레코드에 원시타입과 Map 인터페이스 그리고 자바 POJO 를 설정해서 매핑하기 위해 XML과 애노테이션을 사용할 수 있다 출처 퍼시스턴트? 객체가 생성되면 메모리에 올라간다. 객체를 이용해서 다루는 데이터들은 객체가 사라지면 함께 사라진다. 이렇게 일회용으로 버려지는 데이터들을 유지하려면, 객체가 사라지기 전에 어딘가에 저장해두어야 한다. 그러면 나중에 객체가 다시 생성되었을 때 이전에 사용했던 데이터를 재사용할 수 있다. 다시 말해, 객체가 사라지기..

Spring legacy 2020.09.12

의존성 주입(DI)

의존성 주입의 세 가지 방식 스프링 DI에는 세 가지 방식이 있다. set메서드 주입 필드 주입 생성자 주입 이 중에서 필드 주입이 사용하기 가장 간단하지만, 생성자 주입을 사용하라고 권장되고 있다. 참고 세 가지 모두 테스트 해 볼 것이다. 흐름 Market이라는 클래스를 만들고, 마켓에서 판매할 상품인 고기와 야채, 스낵 클래스를 주입하는 테스트를 해볼 것이다. Lombok과 spring-test 라이브러리를 이용할 것이다. 📖스프링 설정 참고 상품 마켓에서 판매할 고기와 야채를 클래스로 정의한다. @Component @ToString public class Vegetable { } @Component @ToString public class Snack { } @Component @ToString p..

Spring legacy 2020.09.12

Spring 5.0 Setting & Lombok

스프링 5.0 pom.xml 설정 🚥 XML설정 && 자바 설정 둘 중 하나를 골라서 설정해야 한다. 나는 java 클래스를 이용해 설정했다. 선택한 두 개의 root-context.xml과 web.xml을 삭제한다. 추가 해당 경로의 servlet.xml까지 삭제한다. 그 다음 삭제한 xml들을 대체할 자바 클래스를 생성한다 RootConfig.java package com.coco.config; @Configuration //참조할 패키지 @ComponentScan(basePackages = {"com.coco.sample"}) public class RootConfig { } ServletConfig.java @EnableWebMvc @ComponentScan(basePackages = {"com...

Spring legacy 2020.09.12

스프링이란?

스프링이라는 프레임 워크 image 🌍Wikipedia 프레임워크의 사전적 의미는 뼈대, 근간이다. 이까짓 뼈대가 왜 필요하나? a,b,c, ...z가 함께 일하는데 모두가 다른 방식으로 일한다면 어떨까? 뭐 그럭저럭 흘러는 가겠지만... 지금은 상상할 수 없는 어떤 무시무시한 일들이 벌어질지도 모르겠다. a와 w가 밤새 개발한 다음, 이제 우리 코드를 합쳐 보자! 했을 때, a의 방식과 w의 방식이 전혀 달라서 대략난감한 경우 말이다. 흠. 이렇게 하자고 했잖아! 난 이게 더 좋단 말이야! 이런이런. 프레임워크는 독재차처럼 흐름을 제어한다. 개발자는 프레임워크가 제어하는 흐름을 따라 개발할 수밖에 없다. 위에서 예로든 a부터 z로 이루어진 알파벳 팀 모두가 Spring을 쓴다고 해보자. 그럼 a와 w는..

Spring legacy 2020.09.12