728x90

Programming/Spring 86

Spring - 스프링 컨테이너와 스프링 빈

- 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); 1. ApplicationContext 를 스프링 컨테이너라 한다. 2. ApplicationContext 는 인터페이스이다. 3. 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 4. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 5. 자바 설정 클래스를 기반으로 스프링 컨테이너( ApplicationContext )를 만들어보자. new AnnotationConfigApplicati..

Programming/Spring 2023.06.10

Spring - 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

- 객체 지향 원리를 그림과 코드를 통해 분석해보려 한다. @Test @DisplayName("VIP는 10% 할인이 적용되어야 한다.") void vip_o() { //given Member member = new Member(1L, "memberVIP", Grade.VIP); //when int discount = discountPolicy.discount(member, 10000); //then assertThat(discount).isEqualTo(1000); } - Test 코드 작성 시 1. given 2. when 3. then 구조를 맞춰서 작성하는 것이 좋다. public class OrderServiceImpl implements OrderService { // private final..

Programming/Spring 2023.06.09

Spring - 스프링 핵심 원리 이해1 - 예제 만들기

- 회원 도메인 설계 - 회원 도메인 요구사항 1. 회원을 가입하고 조회할 수 있다. 2. 회원은 일반과 VIP 두 가지 등급이 있다. 3. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) - 항상 역할과 구현을 분리하여 작성해야 한다. - 모든 클래스는 인터페이스를 바라보게 코드를 작성해야 한다. - 위의 그림에서와 같이 회원 저장소의 역할을 생성하고, 구현 클래스가 해당 인터페이스를 바라보도록 설정한다. 1. 주문 생성: 클라이언트는 주문 서비스에 주문 생성을 요청한다. 2. 회원 조회: 할인을 위해서는 회원 등급이 필요하다. 그래서 주문 서비스는 회원 저장소에서 회원을 조회한다. 3. 할인 적용: 주문 서비스는 회원 등급에 따른 할인 여부를 할인 정책에 위임한..

Programming/Spring 2023.06.09

Spring - Data JPA

- JPA를 이용할 때는 테이블과 SQL을 다루는 것이 아니라 데이터에 해당하는 개체를 엔티티 객체라는 것으로 다루고 JPA로 이를 데이터베이스와 연동해서 관리한다. - 엔티티 객체는 쉽게 말해서 PK(기본키)를 가지는 자바의 객체이다. 엔티티 객체는 고유의 식별을 위해 @Id를 이용해서 객체를 구분하고 관리한다. - Spring Data JPA는 자동으로 객체를 생성하고 이를 통해서 예외 처리 등을 자동으로 처리하는데 이를 위해서 제공되는 인터페이스가 JpaRepository이다. - 엔티티 클래스는 반드시 @Entity가 존재하고, 해당 엔티티 객체의 구분을 위한 @Id가 필요하다. @MappedSuperclass @EntityListeners(value = { AuditingEntityListene..

Programming/Spring 2023.06.07

Spring - MVC 기본 동작 원리

1. 컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 화면을 찾아서 처리한다 2. 스프링 부트 템플릿엔진 기본 viewName 매핑 3. resources:templates/ + (viewName) + .html 1. 웹 브라우저에 요청이 들어오면 톰켓은 스프링 컨테이너에 해당 컨트롤러를 우선 찾아보고 없으면 resources에 있는 정적 파일을 찾아서 요청에 대한 응답을 보낸다. - Controller @Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute(..

Programming/Spring 2023.06.05

Spring - @RequestParam, @ModelAtttribute, WebDataBinder

1. 사용법과 예제 우선 각각의 어노테이션의 사용법과 예제를 다루어보고, 각각을 언제 사용하면 좋을지에 대해 알아보도록 하겠습니다. @RequestParam @RequestParam 어노테이션은 사용자가 요청시 전달하는 값을 Handler(Controller)의 매개변수로 1:1 맵핑할때 사용되는 어노테이션입니다. @Controller public class TestController { @GetMapping("/") public String getTestPage(@RequestParam("name") String name) { System.out.println("이름 : " + name); return "test"; } } 예를 들어 사용자가 /?name=test 로 요청한다면, 위 핸들러의 매개변수인..

Programming/Spring 2023.06.02

Spring - 스프링 MVC 구현하기(Mapper, @Valid, 등...)

- 등록 작업의 경우 1. TodoMapper -> TodoService -> TodoController -> JSP의 순서로 처리하도록 한다. - ModelMapper는 DTO를 VO로 변환하거나 VO를 DTO로 변환해야 하는 작업에 사용된다. - @Configuration은 해당 클래스가 스프링 빈(Bean)에 대한 설정을 하는 클래스임을 명시한다. - @Bean은 해당 메소드의 실행 결과로 반환된 객체를 스프링의 빈(Bean)으로 등록시키는 역할을 한다. package org.zerock.springex.config; import org.modelmapper.ModelMapper; import org.modelmapper.convention.MatchingStrategies; import org.s..

Programming/Spring 2023.05.30

Spring - bean, root-context, servlet-context,

- Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부른다. - 일반적으로 자바 프로그램에서는 1. 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했다. 즉, 모든 작업을 사용자가 제어하는 구조였다. ex) A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출했다. - 하지만 IoC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡긴다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤러하는 주체는 다른 주체가 된다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IoC(제어의 역전)라고 한다. - 우리가 알던 기존의 자..

Programming/Spring 2023.05.29
728x90