ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 우아한테크세미나 우아한 스프링 부트 -백기선 선생님
    SPRING-BOOT 2021. 2. 22. 14:29

    spring dev tools

    - applicaiton을 재기동해야하는 문제점이 있음.

    - 문제점 : 빌드를 해도안된다는것은 내부적 타입리프가 캐시되고 있는것

     

    -개발 중에 뷰 리소스 또는 템플릿에 적용되는 캐시는 오히려 불편

    개발중에 애플리케이션을 자주 재시작 한다.

    개발중에 웹 브라우저를 자주 리로딩한다.

     

    -오히려 캐시를 사용안하니깐 운영면에서 떨어진다.

    -그럼 자르로 배포할때 얘를 넣지 말아야하나? 얘를 뺴야하나?

    정답은? -> 기본적으로 패키징을한상태에서 실행하대 dev tools가 제공하는 설정들이 무시가 된다. 그냥 배포해도 된다.

    jar파일로 패키징한 상태에서 그상태에서 실행할때 조차도 dev-tols설정을 적용하고싶다하면 특정 파라미터를 입력해야한다.

    별다르느 파라미터 를안하면 jar는 개발용이 아니라고 인식하고 개발용이 적용이 안된다.

    dependencies { compileOnly("org.springframework.boot:spring-boot-devtools")}

     

    만약 인텔리제이를 쓰신다면, devtools를 의존성으로 가지고 있을 때, Run/Debug Configurations에서 On "Update' action: 에 Update resources 나 Update classes and resources 등으로 선택하면 저장하는 것 만으로 리프레시가 가능해집니다.

     

     

     

    <maven>

     

    org.springframework.boot

    spring-boot-devtools

     

     다시 application을 재기동시키면 ?

    안된다..

    그다음 빌드까지 다시하면 바뀌게 된다.

    빌드랑 .. apllicaiton다시띄우는것이랑 다르다.

     

    bulid - > ressource를 갱신하는것

     

    @GetMapping("/hello)

    @RwoponseBody

    public String hello(){

     

    }

    //이렇게 새로운 handler를 추가 햇을경우 빌드를 하게되면 코드 바뀌는것을 감지해서 application을 다시띄어야지 하는데

    완전히 다시띄우는것이아니라 최소한의경우만 application context를 띄운다.

     

     application 을 마치 다시띄우는것처럼 동작하는 것으로 볼 수 있다.

     

     

    application이 코드를 고칠때 가령 중복으로 mapping을 만드는 경우는?

    그상태에서 applicaiton을 다시띄우는 application에러가 난다.

    이런경우만 아니라면 dev -tools만 가지고 applicaiton이 깨지는 경우는 어렵다.

     

    변경이 되게 하려면 빌드를 해야한다. 다시 클래스 파일이 바꼇네 인식하고 재기동을 한다.

     

    live load라는 플러그인 설치하고 view바꾸면 브라우저에서 리플래쉬하느것도 자동으로할 수 이ㅏㅆ다.

     

    대략적으로 와쳐가 컨트롤러 변경이 없으면 재기동을 하지 않는다고 봐야한다.

     

     

    sprign boot의 꽃

    많이쓰는 기능이나 설정을 공통적으로 제공하고 싶을때

     

    이설정을 다른 파일에도 제공하고싶다.

    자동으로 제공하겠다고 설정하고

     

    local 저장소에 install 한다.(main 메소드가 있어야한다.)

     

    이설정파일이 필요한 프로젝트에서 가져다쓰고싶으면

    가져다쓰고싶은 프로젝트에 의존성 추가

    내가 직접설정하지 않았던 이설정이 적용되는 것이다.

     

    뭐때문에? spring.factoris안에 spring.autoconfiguration 키값안에 여러개를 정의할 수 있따

    이모든 것들이 어떤 조건에 한에서 적용될 수 있다.

     

    [질문] 설정이 겹치거나 중복된 컨트롤러가 정의된 경우에는 우선순위를 가지고 동작할 수 있도록 설정가능한가요 ?

     

    내가 사용하는 application 프로젝트의 빈이 우선순위이고 그다음 자동설정으로 제공하는 빈 등록이 다음순서이다.

    이때 등록되어있는 빈id와 뒤에정의된 빈이 중복되면 application이 뜨지 않는다.

     

    미리정의되어있는 overilding을 허용할수있지만 아이디가 중복된경우에는 overliding이 뜨지않는다.

    자동설정 bean 과의 충돌이 일어나서 applicaiton이 뜨지않는다.

     

     

    [질문] 여러 빈들을 정의했을 때 스프링 부트에서는 빈을 정의한 순서나 이름 같은 기준을 정해서 순서대로 빈을 등록하는지 아니면 JUnit 테스트처럼 일정 순서에 입각하지 않고 랜덤한 순서로 매번 실행할때마다 다른 순서로 빈을 등록하는지 궁금합니다.

     

    어려운 질문 의존성이 가장 관건이다. 순서는 만약 helloController라는게 있는데. 다른쪽도 helloController가 있으면 

    충돌난다.

    뭐가 먼저 등로고디는냐는 중요하지않다 둘간의 의존성이 전혀 없기 때문에 만약 의존성이 생긴다.

    Bean을 등록할땐 @DependsOn 어노테이션을 선언하면 순서를 지정할 수 있다.

     

     

     

    질문 @Repository, @Service, @Controller 는 Web 에서 주로 사용되는데 @Component 는 어떤 경우에 사용되는지알 수 있을까요...?

    이 세개 의외에 쓰거나 새로운 어노테이션을 정의한다음에 그 어노테이션으로 빈을 등록할 때 사용.

     

     

    [질문] DI 가 효율화를 위해 탄생했는데, 이다음으로 나아가는 진화하는 프로그래밍 철학은 무엇이 있을까요?

     

    효율성보다는 유연한 디자인이 있을가?를 통해서 나온것.

    결합도를 낮추고 응집도를 높히는 방향으로 applicaiton을 만들수 있을까? 를통해서 DI에 도달한것.

    SPRING은  DI와관련된 프레임웤을 제공

     

     

    restcontroller는 객체를 반환하고 controller는 뷰를 반환합니다

    Response body +Controller

     

     

    지금당장은 message에 한글로쓰면안된다 한글로 쓸려면?

     

     

    my.message에 원래 영어로 써야하는다. transparent navite하면 나도모르고 아스키 코드로 바꿔줌 . 한글을써도.

     

    여기까지 applicaiton과 approperties는 4번이다.

    구체적 가까운지에따라 우선순위를 가진다.

    구체적 -> config drectory안에 들어있는것 (우선순위가 높다.) 

    가까운 -> application 위치에있는것. 

    가까운 -> application 위치에있는것. 

    properties파일도 applicaiton안에 있는데 뭐가다른가? 

    applicaiton 을 패키징하고 

     

    이두가지 properties는 jar파일 즉 applicaiton안에있는것.

     

    1번은 파일위치에 조금더 구체적이면서 가까운것.

    여기만들면 얘가더 먼저 쓰이게된다.

     

    applicaiton과 properties안에 있는 모든 파일은 전부다 바꿀 수 있는 값이다.

    application을 실행할때는 overriding이 된다.

     

     

    application 위치

     

    파일시스템 위치

    파일 자체가 바뀌는것이아니라 properties가 기본적으로 정의도있는게 설정되고 그다음 우선쉬이인것을 덮어쓰고 이런식으로 정의가 된다.

    -우선순위가 높은게, 적용될때는 가장 마지막에 되는 거다.

     

     

     

    [질문] DI를 사용하면, 한 class를 global단에서 injection을 해주는 것인데, 만약에 constructor안에 정의된 변수값이 있고, 그것을 api들이 변경한다면, 여러 api요청에서 같은 값이 공유 되는건가요? 즉, DI는 new instance로 초기화 하는것이 아닌거죠?

    -그냥 빈을 만드셨다면 싱글톤 빈이고, 여러 api 요청은 같은 값을 공유합니다.

     

     

     

    계층형이미지를 만들어서 효율적으로 기능을 빌드한다.

    JVM위에 JAR를 하면(팻 자르) 매번 255메가라고했을때 새로 만드는것 ->

    다수정하지않는데 새로 만드는것은 비효율

     

    JVM LIBARARY를 구분해서  

     

     

    빌드 이미지라는것을 실행하면 만들 수 있다.

    docker dive 설치해보기

     

     

    spring security 걸어서 사용

     

    이런정보를 보려면 의존에 설정

     

     

    NETWORK TAB REST API

     

     

    모든 END POINT를 확인할 수 있다.

     

    properties가 어디서 어디까진지 모르겠다 하면???

    이렇게 찾을 수 있다.

    로그의 레벨을 디버그 모드로 바꿈
    디버그 모드로 로그를 볼수 있다.

    위에껀 아무리 잘되있어서 불편하다.

    springboot에서 만든 툴은 아니지만 .

    어드민 서버를 만들어서 띄워야함. 

    어디민서버도 기본적으로 8080이기때문에 바꿔서 사용

    의존성 설정

     

     

     

    서버가 어디있는지 알려줘야함.

    어드민 서버에자동으로 인식

     

    로거 변경하는건 더쉽다. ㅎㅎ

    백기선 강사님 강의를 들어보고싶다.

     

    댓글

Designed by Tistory.