목록전체 글 (518)
개발놀이터
*JPA에서 가장 중요한 2가지 1. 객체와 관계형 데이터베이스 매핑하기 2. 영속성 컨텍스트 *영속성 컨텍스트 정의 : 엔티티를 영구저장하는 환경 디비에 저장한다는 개념이 아니라 영속성 컨텍스트를 통해서 엔티티를 영속화를 한다는것 = 영속성 컨텍스트에 저장한다는 것 엔티티 매니저는 영속성컨텍스트를 1대1로 가지고 있다. 영속성컨텍스트는 눈에 보이지 않는 논리적인 개념이다. *비영속 member 객체를 생성하고 엔티티매니저에 아무것도 넣지않은 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 이렇게 JPA가 관여하지 않은 객체 생성의 상태 *영속 em.persist(member); 이런식으로 객체를 저장..
*JPA JPA 시작하기 1. META-INF/persistence.xml에 정보를 입력한다. (jdbc드라이버, user, password, jdbc url, dialect 이렇게 설정을 해준다음에 2. JPA를 시작하려는 클래스에 EntityManagerFactory emf = persistence.createEntityManagerFactory(persistence.xml에 있는 persistence-unit 을 적어준다) 3. EntityManager em = emf.createEntityManager(); 4. EntityTransaction tx = em.getTransaction(); 5. DTO를 만들어주고 @Entity를 적어서 jpa가 이 클래스를 관리하도록 어노테이션을 적는다. 6. ..
*RedirecAttribute 파라미터에 RedirectAttribute 를 추가해주면 기능을 사용할 수 있는데 public String item(RedirectAttributes, redirectAttributes) 이렇게 추가해주면 사용 가능하다 redirectAttributes.addAttribute(attributeName, attributeValue) 이렇게 사용 가능하다. redirectAttributes.addAttribute("itemId", itemId); 이렇게 쓰면 뷰 템플릿을 호출할 때 return "/basic/item/${itemId}" 이렇게 경로변수로 사용할 수 있다. 경로변수로 사용되지 못한 addAttribute는 쿼리 파라미터로 넘어가게 된다. redirectAttri..
*타임리프 간단한 문법 *타임리프 선언http://www.thymeleaf.org"> *속성 변경 th:href="@{/css/bootstrap.min.css}" -href="value1"를 th:href="value2"의 값으로 변경한다. -타임리프 뷰 템플릿을 거치게 되면 원래 값을 th:xxx값으로 변경한다. 만약 값이 없다면 새로 생성한다. -html을 그대로 볼 때는 href 속성이 사용되고, 뷰 템플릿을 거치면 th:href의 값이 href로 대체되면서 동적으로 변경할 수 있다. -대부분 html속성을 th:xxx로 변경할 수 있다. *타임리프 핵심 -핵심은 th:xxx가 붙은 부분은 서버사이드에서 렌더링되고, 기존 것을 대체한다. th:xxx이 없으면 기존 html의 xxx속성이 그대로 유지..
*로깅 롬복의 @Slf4j어노테이션 사용 or private final Logger log = LoggerFactory.getLogger(getClass()); 올바른 로그 사용법 log.info("username={}", username); *요청 매핑 @RequestMapping(value = "/hello-basic" method = "RequestMethod.GET") 이거 두개를 합친것이 바로 @GetMapping *@ResponseBody 이거 쓰면 return 값을 문자열로 반환했을 때 HTTP메시지 바디에 꽂혀서 전송됨 *@PathVariable 경로 변수 /username/{username} 이런식으로 URL을 템플릿화 시켜서 보냄 가져오는 방법 public String getPathVa..
*HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 -response.getWriter를 이용한 출력 @GetMapping("/response-body-string-v1") public void responseBodyV1(HttpServletResponse response) throws IOException { response.getWriter().write("ok"); } -ResponseEntity를 이용한 출력 (상태코드 같이 출력 가능) @GetMapping("/response-body-string-v2") public ResponseEntity responseBodyV2(HttpServletResponse response) { return new ResponseEntity("ok", ..
*HTTP 응답 - 정적 리소스, 뷰 템플릿 스프링에서 응답 데이터를 만드는 방법은 크게 3가지이다. 1. 정적 리소스 : ex) 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적리소스를 사용한다. 2. 뷰 템플릿 사용 : ex) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다. 3. HTTP 메시지 사용 : HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP메시지 바디에 JSON같은 형식으로 데이터를 실어 보낸다. 1. 정적 리소스 스프링 부트는 클래스패스의 다음 디렉토리에 있는 정적 리소스를 제공한다. /static, /public, /resources, /META-INF/resources src/main/resources는 리..
*HTTP 요청메시지 - JSON -InputStream으로 읽어오는 방식 @PostMapping("/request-body-json-v1") public void requestBodyJsonV1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletInputStream inputStream = request.getInputStream(); String messageBody = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8); log.info("messageBody={}", messageBody); HelloDa..
*HTTP 요청 메시지 - 단순 텍스트 HTTP message body에 데이터를 직접 담아서 요청 -HTTP API에서 주로 사용, JSON, XML, TEXT -데이터 형식은 주로 JSON 사용 -POST, PUT, PATCH 사용가능 요청 파라미터와 다르게, HTTP 메시지 바디를 통해 데이터가 직접 넘어오는 경우는 @RequestParam, @ModelAttribute를 사용할 수 없다. 이럴때는 InputStream으로 메시지 바디에 있는 내용을 읽어올 수 있다. @PostMapping("/request-body-string-v1") public void requestBodyString(HttpServletRequest request, HttpServletResponse response) thr..
*HTTP 요청 파라미터 - @RequestParam 스프링이 제공하는 @RequestParam을 사용하면 요청 파라미터를 매우 편리하게 사용할 수 있다. @RequestMapping("/request-param-v2") public String requestParamV2 (@RequestParam("username") String memberName, @RequestParam("age") int memberAge) { ... } 이런식으로 RequestParam을 이용하면 request.getParameter("username")과 같은 효과를 볼 수 있다. @RequestMapping("/request-param-v3) public String requestParamV3 (@RequestParam S..