드디어 spring 학습 1일차!
두근두근한 마음으로 시작!

들어가기에 앞서

  • build.gradle === React의 package.json
  • Web Server: 내 컴퓨터에 http 통신 접근 할 수 잇게 도와주는 것
  • Web Application Server(WAS): 내 컴퓨터에 http 통신 접근 할 수 있게 해주고, 코드를 돌리는 것
    like tomcat, node.js
  • Server Side Rendering(SSR): 서버를 거쳐서 html을 얻어오는 것
  • Client Side Rendering(CSR): 클라이언트의 JS를 거쳐서 html을 얻어오는 것

Spring framework vs Spring boot

차이점

  • Spring Framework는 main이 존재하지 않는다. 즉 Spring framework web을 만들면 tomcat을 실행한다.
  • Spring boot는 main이 존재한다. 즉 Java를 실행해 서버를 연다.
  • 이 외에도 Spring Framework는 xml 파일내 다뤄야하는게 많아 귀찮다. 주로 Spring Framework는 요즘 거의 안 쓰는 편이다.

Spring

Spring 구성요소 3가지

  • Portable Service Abstraction(PSA) 서비스 추상화
  • Dependency Injection(DI) 의존성 주입,
    Inversion of Control(IoC) 제어의 역전
  • Aspect Oriented Programming(AOP) 관점지향

Bean

  • bean 은 Spring 내부에서 관리하는 static 영역
  • IoC(Spring bean) container: bean들을 모아놓은 곳
  • DI 의존성 주입이란 bean을 꺼내 쓰는 것을 말함
  • 이름 -> 타입 순으로 일치하는 bean을 가져온다.
// e.g. bean 선언 예시
public class DemoApplication {
	@Bean
	public String test2(){
		return "asdf";
	}
	@Bean
	public Student student(){
		return new Student();
	}
    ...
}

+) @Component

  • componentbean과 같은 일반적인 객체가 아닌 클래스 자체를 외부에서 쓰고자 할 때 사용

+) Ioc Container 접근 방식

  1. @Autowired 어노테이션을 활용하는 방식
  2. Controller의 생성자의 인자로 삽입
    Controller의 생성자 인자에는 자동으로 IoC Container를 넘겨주기 때문에 별도의 @Autowired 사용 없이 가져다가 사용할 수 있다.
@Controller
public class TestController {
	// @Autowired를 활용한 IoC 접근 방식 
    @Autowired
    String test;
    @Autowired
    Student student;
    @Autowired
    Data data;
    
	// 생성자를 활용한 IoC 접근방식
    public TestController(String test, Student student, Data data){
        this.test = test;
        this.student = student;
        this.data = data;
    }
}

Annotation

  • @Controller : url 매핑 및 처리로직 메서드 필드를 가지는 클래스에 선언
  • @RequestMapping : url 매핑 메서드에 선언
  • @Bean : 타 클래스에서 쓰일 데이터에 선언(함수 형태)
  • @Autowired : Bean에서 쓰고 싶은 데이터를 꺼낼 때 선언
  • @RequestParam : request body 접근시 사용

💻 실습

URL 매핑

  • @RequestMapping 을 활용해 url 정보와 사용자 접근 메서드 정보를 넘긴다.
  • template/ 하위에 존재하는 html 파일을 연결해 렌더링한다.
@Controller
public class TestController {
  ...
  @RequestMapping(value = "/java", method = RequestMethod.GET)
  public String java(){
    return "java";
  }

  @RequestMapping(value="/test", method = RequestMethod.GET)
  public String test(){
    return "test";
  }
}

Post 요청 처리

String name, int age 속성을 가지는 Student 객체 추가 예제
1. HttpServeletRequest.getParameter() 활용

// ./TestController.java
@Controller
public class TestController {
  ...
  @RequestMapping(value="/", method=RequestMethod.POST)
      public String postStudent(HttpServletRequest request){
          String name = request.getParameter("name");
          int age = Integer.parseInt(request.getParameter("age"));
          Student student = new Student(name, age);
          data.list.add(student);
          return "redirect:/";	// '/'으로 리다이렉트
      }
}

2.@RequestParam 활용(추상화)

@Controller
public class TestController {
  ...
  @RequestMapping(value="/", method=RequestMethod.POST)
  public String postStudent(HttpServletRequest request, @RequestParam String name, @RequestParam Integer age){
          Student student = new Student(name, age);
          data.list.add(student);
          return "redirect:/";
      }
}

MVC

  • Model, View, Controller
  • 요즘엔 성능이 좋은 React 덕에 MVC 패턴으로 짜지 않음
profile
내 빈틈을, 조금씩 천천히!! ٩(•᎑•)✦

0개의 댓글