본문 바로가기

Spring Boot

스프링 시작 Ioc, DI - @AutoWired

1. 스프링부트  + MyBatis(쿼리 맵핑) + MySQL

수업과 프로젝트는 이걸로 할 예정

 

 

2. 스프링 레거시 + MyBatis + MySQL => CRUD

세팅할 일없지만 이거 하루 정도 잡아서 수업할 예정

회사 들어가기 직전이라던지..

 

3. spring Boot + JPA + MyAQL

=> 가장 최신 트렌드! 아직까지는 1.번을 더 쓰고 있어서 같이 인스타그램 만든다거나 해볼 예정

 

스프링은 오픈 소스 제단에서 만든 프레임워크에요. main문이 없어요. = 주도권을 내가 들고 있는게 아니라서 이 틀을 공부해야한다.

 

아래와 같이 spring프로젝트로 만든다

 

 

 

 

Name : demo - 내 프로젝트 컨텍스트 루트

springwork : 워크플래이스

linda 내 별칭

 

 

배포할 때 

war는 웹 전용 배포 파일

jre은 자바 전용

 

 

yarn, gradle, maven, npm, pip...

라이브러리 관리도구, 버전 관리도구, 의존성 관리도구.

이 실행프로그램들로 라이브러리들을 다운 받을 수 있어요.

자바코드 + 라이브러리들을 packing할수 있어요. 이 말은 grandle이나 maven..이런 애들이 컴파일해준다는 말이에요 이클립스나 툴이 해주는게 아니라...

예)

mvn package

mvn complie

 

 

 

의존성이 트리대로 쭉 다 다운 받아주는데 중간에 문제가 생길 수 있어요. 깨지는 경우 다시 받으면 됩니다.

방법은 적은 거 지우고 다시 Sync하고 다시 다운 받으면 된다.

 

Next 눌리면

 

 

 

Spring Boot DevTools 체크 : 저장하면 자동으로 리로딩=컴파일 해줌.

Lombok도 체크

템플릿 엔진 : jsp파일 스프링에서 쓰지말라고 버렸어요..

Spring Web 체크 : 컨트롤러 만들려면 체크!!

 

여기 없는거는 maven으로 받으면 된다. 

 

이렇게 3개

 

 

이렇게 내가 필요한 것들 설정한거 쿼리로 달려가서 다운받아진다. 처음 하면 시간좀 걸림.

 

 


 

정적파일들 모아져있음 html, css, xml

 

 

JUnit같은거 

 

 

당연히 꼭 있어야하는거

 

 

 

무거워요. 그러니까 기본으로 다 있는 거 아니고 내가 maven 에서 받아요. 받은 것들이 여기에 있어요. 

 

어떻게 다운 받느냐하면 아래와 같이

pom.xml 에 적으세요. 구글해서 찾아서.

 


혹시 만약 안드로이드에 gradle에서 lombok을 다운받고 싶다면 lombok이라고 구글해서 아래와 같이 참고하여 어느 파일에 적어야 하는지 생각해서 할 수 있다! 

 

이제는 compileOnly아니고 imp~


 

 

 

메이븐에서 관리하는 라이브러리들 모아놓는 폴더이다.

내가 만드는 새로운 프로젝트들이 여기를 바라보면 되겠죠 따로 관리 할 필요없지.

 

 

아래와 같이 다운받아 가지고 있는 lombok을 볼 수 있어요.

 

 

 

 

문제 생겼을 때 방법 2가지

 

1. 

이걸 다 지웠다가 다시 다운받는다.

그러고 spring tool을 껏다 킴.

 


pom.xml

 

2. 문제 있으면 아래와 같이 Update해보기

clean하는 방법도 있다.

mvn clean : 빌드를 통해 생성된 target디렉터리 삭제

 

그리고 다시 빌드하기

 

우리가 작업한 거 다 들어가있는 Target

tool에서는 다 보여주지 않아요.

한번더 말하자면 maven clean하면 target 디렉토리 삭제

 

 


어노테이션

Anotation

주석+설명문

jvm이 돌면서 주석이랑 다른점은 컴파일러가 무시하지않고 읽고 스프링 컨텍스트라는 메모리에 띄워줌.

 

 Spring이 등록해둔 대표적인 어노테이션들이 있음

 

1. Controller

2. Service

3. Repository        Dao역할

4. Config             설정파일 역할

5. Component       그외 역할, 특별한 목적이 아닌 것들.

 

@Getmapping

이거랑 url주소랑 맞추기

 

@ResponseBody

return 해주는 "Hello" 가 데이터임. println같이 화면에 뿌려짐.

 

@ResponseBody가 없으면 Hello라는 파일을 찾아서 반환해줌. requestDispatcher처럼. - ViewResolver 기본값

 

retun에 " " 가 포인트다!

 

 

내장 톰켓이 있어요. 그래서 실행 시키는 방법!

 

 

 

 

컨트롤러 만들기

클래스 코드 윗줄에 @Controller적어서 컨텍스트에 등록시켜주면 된다. 그럼 jvm이 처음 만든 내 com.linda.demo 이하만 스캔할 때 이 클래스 파일을 스프링 컨텍스트 메모리에 띄워준다 = 등록해준다. (new해준다)

 

 

@Controller - 주소 요청시에 request하는 주소로 찾아

외부에 노출되어있는 오브젝트는 Controller밖에 없음.

 

com.linda.demo라는 처음 만든 패키지가 있어요.

이 패키지(처음 만든 패키지) 이하만을 스캔을 해요.

스프링 컨텍스트에 스캔해서 걸리는 해당 클래스를 등록 해진다. (Ioc)

IoC (Inversion Of Controll) 제어의 역전 : 내가 하는거 아니고 얘네가 등록해주는 것.

DI (Dependensy Injection) 의존적 : 객체 꺼내쓰기

 

IoC - 내가 만든 Test클래스를 내가 new하지 않고, 그러면 여러번 할 수 도 있고 그러니까, 어노테이션(여기서는 @Component)을 적으면 저 스프링 컨텍스트라는 메모리 공간에 다 띄워줍니다. 싱글톤으로 한번만 new해져 있음.

 

 

 

DI - @AutoWired쓰고 타입으로 객체를 찾을 수 있어요. 

 

여기서 @AutoWired 로 찾고 있다. 이렇게 찾아 쓰는 것을 DI라고 한다. 

타입으로 객체를 찾을 수 있어요.

 

요청할때! get, post, put, delete!

index

 

 

 

 

 

 

 

post인데 url 로 요청해서 안됨. post요청 해야 함.

포스트맨으로 테스트 해야한다.

 

 

메소드명은 중요하지 않아요. Mapping한거랑 url주소랑 중요!

 

 

 

post방식으로 그러니까 body에 data담아서 요청.

 

 

get방식으로 데이터 받기

 

 

 

 

json데이터  json => { "key" : value }

get은 안됨. 주소에 적어서 데이터보낼 수 없으니까 

post방식으로만 가능함.

 

@RequestBody -> json데이터구나하고 알고 

추상클래스 MessageConverter라는 메서드가 form으로 동작하고 있다가 @RequestBody를 만나면 jackson databind가 발동해서 json데이터를 받아서 파싱하려고 하고 있다.

(원래는 버퍼리더로 읽고 gson으로 해줬다.)

잭슨바인더가 return할때도 돌려줌 이럴거면은  ResponseBody가 필요하다.

 

 

jacksonbind 라이브러리

요청과 응답시에 이 jacksonbind가 특정조건에서 발동합니다. 함수 실행되기 직전에 버퍼로 읽어서 json파싱해서 오브젝트에 넣어준다. 

 

AOP(Aspect-Oriented Programming) : 관점지향 프로그래밍- 함수 안에 핵심로직만 두고 앞뒤로 로직(예를 들어null인지 검사한다던지 함수 끝에서 DBConn.close()를 한다던지 등등 을 따로 빼서 만들어 두고) 을 함수 직전과 끝에 실행하는 것.

AOP를 직접 만들 수도 있다. ex)null 처리하는것들

 

조건 : @ResponseBody가 안적혀있으면 return할때 파일로 인식한다.

스프링은 기본으로 return시 ViewResolver를 돌려준다.

이게 기본전략이며 @ResponseBody가 붙어있으면 ViewResolver가 작동안한다.

근데 잭슨이 무조건 발동되는게 아니라 파라미터를 객체로 받는게 맞다.

 

 

기본은 파일을 찾아서 html로 반환한다. => ViewResolver

 

요청할때 무조건 json타입으로, 요청응답 data를 body에 담으세요. get방식 빼고 나머지 요청방식들이 가능.

그래서 받을 때 request할때 get으로 select하려면 user 오브젝트를 DB에서 받아와서 return 할때 @ResponseBody 붙혀놓으면 json이 객체화 된 것을 리턴해줄수 있다. 그리고 문법은 " ". 다른 것도 리턴할 수 있다는 것...

 

안드로이드는 form(key=value)으로 요청을 못함, 그래서 data를 body에 담을때 json으로 받는다.

json이니까  @RequestBody해야한다.

 

특수한 경우에 key=value로 달라고 하면 리턴에다가 "username="+user.getUsername()+"&"...으로 가능

'Spring Boot' 카테고리의 다른 글

sts3  (0) 2020.07.17
blog만들기  (0) 2020.07.17
DB연결하기, MyBatis 프레임워크  (0) 2020.07.13
jsp템플릿 사용  (0) 2020.07.13
템플릿엔진 mustache  (0) 2020.07.13