Goal 1. JPA / Hibernate / Spring Data Jpa 의 관계 2. Spring Data Jpa를 이용하여 관계형 데이터베이스를 객체지향적으로 관리하는 방법 3. JPA의 더티 체킹을 이용하여 Update쿼리 없이 테이블 수정 4. JPA Auditing을 이용하여 등록/수정 시간을 자동화하는 방법 JPA 란? 객체지향적으로 프로그래밍을 하고 SQL에 종속적인 개발을 하지 않도록 중간에서 패러다임 일치를 시켜주기 위한 기술 기존의 개발 문제점 RDB(관계형 데이터베이스가) 중심이 되면서 코드가 SQL 중심이 되어감 각 테이블마다 기본적인 CRUD SQL 매번 생성해야하는 번거러움 관계형 데이터베이스와 객체지향 프로그래밍 언어의 패러다임의 불일치 문제 예제1. 프로젝트에 Spring ..
과정이 아름다운 당신
Goal : 스프링부트 환경에서 테스트 코드를 작성해본다. 단위테스트 란? TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 이야기한다. TDD와는 다른 이야기! 기존의 개발 진행 방식 코드 작성 프로그램(Tomcat) 실행 Postman과 같은 api 테스트 도구로 http요청 요청 결과를 system.out.println()으로 눈으로 검증 결과가 다르면 다시 프로그램(Tomcat)을 중지하고 코드 수정 -> 테스트 코드가 없다보니 수정된 코드를 확인할 수 없어 2~5의 단계를 반복해야하는 문제 -> 톰캣 재시작은 많은 시간 소요 -> 눈으로 확인하는 수동 검증 필요 -> 기존에 잘 되던 기능의 문제 (사이드 이펙트) 백문이 불여일타. 코드로 개념을 이해해보자! 예제1. Hello C..
Goal : 뷰 리졸버가 어떻게 사용되는지 알아본다. OldController hello/servlet/web/springmvc/old/OldController.java @Component("/springmvc/old-controller") public class OldController implements Controller { // @Component("/springmvc/old-controller")를 해주면 스프링빈의 이름이 /springmvc/old-controller가 된다 @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { Sys..
Goal : 핸들러 매핑과 핸들러 어댑터가 어떻게 사용되는지 알아본다. 핸들러 매핑과 핸들러 어댑터 OldController hello/servlet/web/springmvc/old/OldController.java @Component("/springmvc/old-controller") public class OldController implements Controller { // @Component("/springmvc/old-controller")를 해주면 스프링빈의 이름이 /springmvc/old-controller가 된다 @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse respon..
getOrDefault 란? getOrDefault 는 hashMap클래스에 구현되어 있는 map 인터페이스의 메소드이다. 특정 키의 value를 뽑아내는데 사용되는데, 반환되는 값이 null이면, 세팅된 default value를 리턴한다. 사용방법 HashMap map = new HashMap(); map.put("a", 100); map.put("b", 200); map.put("c", 300); map.put("d", 400); System.out.println("HashMap: "+ map.toString()); int k = map.getOrDefault("b", 500); int z = map.getOrDefault("y", 500); System.out.println("Returned Va..
살기 위해 정리하는 리눅스 명령어 구분 명령어 예시 이동 cd cd / 파일 복사 cp cp test1.html test2.html 첫번째 줄 이동 gg gg 비주얼 라인 모드 shift+v shift+v 현재 위치 이하 모두 선택 shift+g shift+g 복사 shift+y shift+y 삭제 d d ** 업뎃 필수
스프링 MVC 전체 구조 직접 만든 프레임워크 아키텍처 스프링 MVC 아키텍처 직접 만든 프레임워크와 스프링 MVC 비교 직접 만든 프레임워크 스프링 MVC FrontController DispatcherServlet handlerMappingMap HandlerMapping MyHandlerAdapter HandlerAdapter ModelView ModelAndView viewResolver ViewResolver MyView View DispatcherServlet 구조 살펴보기 org.springframework.web.servlet; 클래스 검색 : command+o 스프링 mvc도 프론트 컨트롤러 패턴으로 구현되어 있다. 스프링 mvc의 프론트 컨트롤러가 바로 디스패처 서블릿 Dispatche..
Goal : 인터페이스란 무엇인지 알아보고, 코드에서는 어떻게 구현되는지 알아본다. 인터페이스란? In Java, an interface is a blueprint or template of a class. It is much similar to the Java class but the only difference is that it has abstract methods and static constants. There can be only abstract methods in an interface, that is there is no method body inside these abstract methods. The class that implements the interface should be ab..
Goal : 추상화란 무엇인지 알아보고, 코드에서는 어떻게 구현되는지 알아본다. 추상화란? 객체 지향 프로그래밍 이론에서 추상화 는 작업을 수행하고 상태를 보고하며 시스템의 다른 객체와 "통신"할 수 있는 추상적인 "행위자"를 나타내는 객체를 정의하는 기능을 포함합니다. 캡슐화 라는 용어 는 상태 세부 정보 를 숨기는 것을 의미 하지만 이전 프로그래밍 언어에서 데이터 유형 의 개념을 확장하여 동작 을 데이터와 가장 강력하게 연관시키고 다양한 데이터 유형이 상호 작용하는 방식을 표준화하는 것이 추상화 의 시작입니다 . 추상화 클래스란? An Abstract class is a class that represents a concept and whose objects can’t be created. A cla..
Goal : 지금까지 v1~v5로 점진적으로 발전시킨 프레임워크를 정리해보자 ** 정리 v1 : 프론트 컨트롤러 도입 기존 구조를 최대한 유지하면서 프론트 컨트롤러를 도입 v2 : view 분류 단순 반복 되는 뷰 로직 분리 v3 : Model 추가 서블릿 종속성 제거 뷰 이름 중복 제거 v4 : 단순하고 실용적인 컨트롤러 v3와 거의 비슷 구현 입장에서 ModelView를 직접 생성해서 반환하지 않도록 편리한 인터페이스 제공 v5 : 유연한 컨트롤러 어댑터 도입 어댑터를 추가해서 프레임워크를 유연하고 확장성 있게 설계 스프링MVC 지금까지 작성한 코드는 스프링MVC 프레임워크의 핵심 코드의 축약 버전이며 구조도 거의 같다. @RequestMapping("/hello") RequestMappingHand..