본문 바로가기

Develop/Spring

Spring 웹 개발 기초

이 글은 인프런에 있는 스프링 입문 강의를 보기 좋게 요약한 것입니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

https://start.spring.io/

Spring Initializr를 이용해 Spring 기본 셋팅을 간편하게 할 수 있다.

 

Spring 기본 폴더 구성

  • main 안에 java, resources 존재
  • java 폴더 : java 소스 코드만 보관
  • resources 폴더 : java를 제외한 모든 소스 코드 보관
  • static 폴더 : html, css, js, img 등등.. 와 같은 정적인 파일 보관
  • templates 폴더 : thymeleaf와 같은 폴더 보관(thymeleaf도 확장자가 html이다)
  • test 폴더 : Unit test 같은걸 할 때 사용(JUnit과 같은 것)

 

 

@GetMapping("hello") : url 경로 상에서 /hello 경로로 들어갔을 때 아래 있는 method 호출 

 

동적 환경 그림

 

정적 환경 그림

 

MVC, 템플릿 엔진 그림

  1. localhost:8080/hello-mvc에 접속하면 내장 톰켓 서버로 간다.
  2. 내장 톰켓 서버에서 스프링으로 간다.
  3. 스프링 내에서 helloController를 찾아 return : hello-template, model(name:spring)으로 viewResolver에 전달
  4. viewResolver에서 Thymeleaf를 이용해 HTML을 변환 후 웹에 띄운다. 

 

@ResponseBody 사용 원리

  1. localhost:8080/hello-mvc에 접속하면 내장 톰켓 서버로 간다.
  2. 내장 톰켓 서버에서 스프링으로 간다
  3. 스프링에서 원래였으면 viewResolver에 전달 해주지만 "@ResponseBody"가 존재 하므로 그대로 HTTP응답에 그대로 데이터를 넘긴다.(문자의 경우 문자 그대로 넘긴다. 객체의 경우 json형식으로 넘긴다.)→HttpMessageConverter에 전달
  4. 웹에 띄운다.

스프링 빈을 등록하는 2가지 방법

  1. 컴포넌트 스캔과 자동 의존관계 설정
  2. 자바 코드로 직접 스프링 빈 등록

 

1. 컴포넌트 스캔과 자동 의존관계 설정 그림

 

위 그림과 같이 Controller, Service, Respository는 서로 연결이 되어 코드를 짜면 여러 이점이 존재한다. 이럴 때 사용 하는 방법이 @Service, @Respository,  @Controller, @Autowired를 이용한다. → 이것을 이용할 수 있는 범위는 저것을 입력한 컴포넌트와 바로 하위 컴포넌트 뿐이다.

 

 

2.자바 코드로 직접 스프링 빈 등록

 

따로 폴더를 만들어 아래와 같이 Bean을 이용해 스프링빈에 등록 할 수도 있다.

@Configuration
public class SpringConfig {
 @Bean
 public MemberService memberService() {
 return new MemberService(memberRepository());
 }
 @Bean
 public MemberRepository memberRepository() {
return new MemoryMemberRepository();
 }
}