ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 23/11/3 끝나지않던 스프링의 끝
    오늘/Today I.. 2023. 11. 3. 23:22
    WHAT I DID TODAY
    • 스프링 2주차 마무리

     


    DETAILS    

     

    1. IoC/DI
    2. IoC 컨테이너와 Bean
    3. JPA
    4. Entity
    5. Persistence Context 에 대하여
    6. 스프링부트의 JPA
    7. JPA Auditing
    8. 쿼리 메소드

    목차만 보면 짧아보이지만 상당히 많은 것을 배웠다.

    물론 스프링부트 JPA 부분은 그냥 머리에 쑤셔넣었기에 빠르게 복습하지 않으면 아마 기억나지 않을듯

     

     

     

    그 외 오늘 공부하며 배운 내용을 아래에 정리해본다.

     

     

    좋은 코드를 위한 Spring 의 IoC 와 DI

     좋은 코드란?

    • 논리가 간단해야한다.
    • 중복의 제거 및 명확한 표현 
    • 코드를 처음보는 사람들도 쉽게 이해해야 한다.
    • 의존성 최소화
    • 새로운 기능이 추가되더라도 구조의 변경이 많지 않아야한다.

     

     

     

     

    좋은 코드를 작성하는 능력을 기르는 법

     

    - 많은 이론과 코드를 접해야한다.   

        -> 왜 많이 봐야하는가?

            많이 보아야만 각각의 상황에 어울리는 적절한 코드를 작성 할 수 있게 된다.

            그래야 새로운 아이디어와 관점을 얻을 수 있다.

     

     

     

     

     

    강결합은 무조건 지양되어야 하는가?

     

    거의 대부분의 케이스에서 그렇다고 보면 된다.

    클래스 크기가 정말 방대해서 분리할 수 없는 두 클래스가 있는 경우

    그 두 클래스 간에는 강결합으로 묶거나 할 수 있다.

    하지만 튜터님께서도 실무에서 실제로 사용해본적은 거의 없다고 하셨고,

    지금 내 개발수준에서는 고려하지 않아도 되는 문제이다.

     

     

     

     

    강결합을 해결하는 방법

     

    1. 각 객체에 대한 객체 생성은 한번만

    2. 생성된 객체를 모든 곳에서 사용

    3. 생성자 주입 (constructor injection)  을 사용하여 필요로 하는 객체에 해당 객체를 주입한다.

     

     

     

     

     

    Inversion of Control (IoC, 제어의 역전)

     

    DI를 통해 강결합 상태를 약결합 상태로 만드는 것.

    이를 통해 제어의 흐름이 바뀌게 되는데 

    이를 IoC 라고 한다.

     

     

     

     

    어떻게 @Component만 달아주면 알아서 bean으로 등록해주는가?

    @SpringBootApplication 이 안에 들어가보면
    @ComponentScan 이 붙어있다.
    
    구체적으로
    @ComponentScan(excludeFilters = { 
            @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
    		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) 
            })
    
    이렇게 되어있으며,
    @ComponentScan이 붙은 패키지 위치와 하위패키지들을 전부 확인하고  
    @Component이 붙은 클래스들을 전부 찾아서 bean으로 등록한다.
    
    
    그리고 bean에 어떻게 저장이 되냐면
    클래스명이 대문자를 빼고 등록된다  ex. Abc  -> abc

     

     

     

    application.properties  에 있는 코드이다.
    
    spring.jpa.hibernate.ddl-auto=update
    
    
    끝에 update가 있는데 여러 입력값에 따라 다른 결과를 보여준다.
    
    create는 테이블을 일단 다 drop한 다음 다시 생성한다.
    
    create drop은  create와 같지만 종료시점에 테이블을 drop한다.
    
    update는 변경된 부분만 반영
    
    validate는 entity와 테이블이 정상적으로 mapping 되었는지만 확인한다.
    
    none   아무것도 안한다.

     

     

     

    TMI

     

    jpa는 코드로 쿼리를 작성하다보니 컴파일 단계에서 에러를 잡을 수 있다.
    mybatis는 쿼리를 실행해봐야 에러를 확인 할 수 있다.

     

     

     


    ANYTHING

     

     

    2주차를 오전에 마무리하고 오늘 하루 과제를 절반이상 완성하고자 했던

    내 원대한 꿈은 실패했다.

     

    그래도 늦기전에 완강하고 잘 수 있어서 행복하다.

     

    개인과제는 주말의 내가 열심히 하겠지

     

     

     


    THIS WEEK'S GOAL
    • 주말동안 개인과제 끝내기

     

     

     

Designed by Tistory.