개발자를 향해...

Spring 수업 정리 본문

spring boot 강의 따라하기

Spring 수업 정리

eugeneHwang1124 2021. 7. 20. 16:49
728x90
반응형

1. cmd에서 빌드하기

만약 배포할 때에는 jar 파일만 서버에 올리면 된다.

 

2. 

컨트롤러 +모델+ template 세가지를 합쳐 모델뷰컨트롤러MVC라 한다.(반대: 정적 컨텐츠)

정적 컨텐츠는 파일을 그대로 웹브라우저에 전달하는 것이고 MVC는  서버에서 변형을 해준 후 전달하는 방식이다.  api는 안드로이드, 아이폰의  경우 json 데이터 포멧으로 클라이언트에게 데이터를 전달하는 방식이다. api 는 리액트 쓸 때도 사용한다. 그리고 서버끼리 통신할 때도 사용한다. 

스프링부트는 정적 컨텐츠 기능을 제공한다. static에 기본 html만 넣으면 스프링 부트가 hello-static이라는 맵핑된 컨트롤러가 없으니resources:static/hello-static.html을 찾는다.

 

3. 파라미터 넘기기

public String helloMvc(@RequestParam(value = "name",required = true) String name, Model model){}

으로 컨트롤러에 설정하는 경우 주소에서 http://localhost:8080/hello-mvc?name=값으로 파라미터를 넘겨야한다.

넘기지 않으면 null이 name에 들어간다.

 

4.API

http의 head와 body중 body에 return 내용을 전달한다는 의미. 문자 그대로 내려간다는 의미

hello 객체를 넘기면 몇가지 조건이 있다.HttpMessageConverter가 동작한다. 넘겨진 hello가 단순 문자면 StringConverter가 동작한다. 그리고 json 스타일로 바꾼다.(name이라는 키와 ""이라는 value가 있으니깐) 그리고 json을 웹브라우저에 넘긴다.

근데 Json이면 mappingjackson2httpmessageconverter로 바꾼다. (json으로 바꿔주는 라이브러리)

 

5. 회원 정보 서버 생성하기

 

서비스: 회원은 중복 가입이 안된다는 내용

 

test 끝날 때마다 데이터를 클리어해주어야한다. 

 

TDD = test 먼저 만들고 테스트대로 구현하는것.

 

Service는 회원가입 등 비즈니스 로직 느낌

Repository는 단순 넣다 뺐다의 느낌

 

Test 자동 생성 단축키 => cmd+shift+t

 

 

 

6. Controller에 등록

 

단순히 MemberService를 new를 사용하여 쓰면 안된다. 그러면 어떤 Controller도 마찬가지로 new 로 쓸 수 있다.

따라서 spring container에 등록을 해야한다. -> @Autowired 사용

근데 MemberService는 단순한 자바 클래스이다. 이걸 스프링에서 인식할 수 없다. 그래서 이 MemberService를  스프링 컨테이너에 서비스라고 등록해주어야한다. -> @Service 사용

MemberRepository도 마찬가지로 스프링 컨테이너에 리포지토리라고 등록해야한다. -> @Repository

 

여기서 위의 방식은 컴포넌트 스캔방식이다. Autowired는 이 controller, service, repository를 연결시켜준다. 

 

처음 public class DemoApplication 을 실행할 때 이 하위에 있는 컴포넌트를 스캔하여 spring 컨테이너에 등록하기 때문에 하위에 없는 컴포넌트는 다른 설정 없이는 그냥 사용할 수 없다. 

 

 

7. Controller - 자바 코드로 직접 등록하기

memberService와 memberRepository를 Spring Bean에 등록한다. 그리고 Spring Bean에 등록되어있는 memberRepository를 memberService에 넣어준다.

Controller는 기존과 동일하다.

Controller - 생성자로 등록

 

 

장단점

위에 Controller 코드를 보면 memberService 생성자를 통해 컨트롤러에 등록된다. 이런 생성자를 통해 등록되는것(생성자 주입이라 한다) 이외에도 필드를 통해 등록하는 방식도 있다.

이 방식 외에도 setter를 통해 등록하는 방법도 있다.

근데 이 방법은 memberService가 public하게 노출된다는 단점이 있다. 아무나 이걸 접근해서 바꿀수 있기 때문에 이를 막기위해 최초로 한번만 연결시키고 이후 바꿀수 없도록 생성자로 등록(생성자 주입이라고 함)하는 방식이 가장 많이 쓰인다.

configure을 사용하면 나중에 다른 코드를 건드리지 않고 MemoryMemberService만 데베를 연결하는 거로 바꾸고 연결할 수 있다.

 

컨테이너에 올라간 것들만 Autowired에 연결가능하다.

 

 

반응형