주특기 심화 TIL 1 - 원빈멘토님 세션 - JAVA부터 DI, IoC까지

LIHA·2023년 2월 20일
0

항해99

목록 보기
45/54
post-thumbnail
post-custom-banner

@AuthenticationPrincipal -> 로그인 정보를 매개변수로 받고 싶다면 이걸 쓰자!
이걸 사용하면 username을 바로 반환해서 로그인시 '***님, 환영합니다' 같은 메시지를 띄울 수 있다.


여기서부터 원빈멘토님의 DI, IoC 세션

저거 하위패키지 싹 훑어서 @Component 붙은 애들한텐 전부다 일수도장마냥 콩아이콘 좌라락 붙여주는 완두살인마인디, Controller / Service / Repository 엔 무조건 콩아이콘 붙는다.

Spring = 일수꾼
IoC 컨테이너 = 일수꾼이 관리하는 쓸모있는 콩 창고
빈 = 쓸모있는 콩
@Component 붙은 애들 = 쓸모있는 콩이 되어 창고로 들어갈 애들

Dispatcher servlet = 야 고객님이 원하신다 이거 처리할수 있는 놈 나와봐(요청 들고옴)
핸들러 맵핑 = 처리할수 있는 놈 찾았습니다!
핸들러 어댑터 = 야 일해 고객님이 원하시잖아 (핸들러 내부의 메소드 돌림)


  • 생성자는 왜 필요해? -> 초기화해서 변수 사용하려고.

  • 어노테이션은 프로그램한테 알려주는 것임.
    @autowired - 주입할거라고 알려주는 것.
    예를들면 AutoRepository 타입으로 등록된 애는 하나밖에 없을거라 자동으로 걔를 묶어줌.

  • 캡상추다? 캡슐화 상속 추상화 다형성. 객체지향의 가장 중요한 개념.

  • 스프링은 대부분의 것들이 private으로 선언되어 있음. 그러면 접근 못하는데? 어떻게 갖다 써요?
    -> AutoWired를 쓰면 private이어도 다 무시하고 얘가 알아서 가져가다 묶어줄수 있음. 이게 필드 주입임. 이거 달려있는 애들은 스프링 구동시키면서 Bean으로 등록됨.

  • 메서드 주입하려면 final 못넣음. final은 쓰기전에 초기화 해줘야하기 때문.

  • 보통 필드주입은 거의 안씀. 메서드 주입은 상황에 따라 필요할때만 씀.

  • 대부분 생성자 주입을 사용하는 이유중 하나가, 주입 받으려는 final을 쓸수 있음. (불변성 유지)
    ->final 쓸수 있는데 뭐? 어쩌라고? 라고 한다면... 그것은 나중에 좀 차근차근 공부하도록 하자.

  • 생성자가 여러개 있지만 않다면 Autowired를 생략해도 문제는 없다. @AutoWired = 야 니가 알아서 갖다 엮어서 주입해줘

  • @RAC를 달면 final이 달린 애를 찾아다가 전부다 생성자를 넣어준다. 이것의 사용은 사실 조직마다 달라서, 쓰지 말라고 하는곳도 있긴 함.

  • Spring한테 부탁하려면 Spring이 아는 애(=빈으로 등록된 애)여야 한다는거군 🤔

  • 야! 여기 니가 빈을 등록해달라던 타입의 애가 한두개가 아닌데? 나 뭔지 모르겠어. 라고 메시지가 뜰 경우?
    -> @Primary를 붙인다
    -> 해당 Service의 이름을 바꾼다

  • Bean에 등록되는 경우는 클래스명을 따라서 카멜케이스로 이름이 자동등록 되기 때문에, 그 이름으로 등록해줘버리는 경우도 있다.

-> @Qualifier("Pizza") 를 붙여준다.

대부분의 프레임워크는 넓은 범위의 설정보다 좁은 범위의 설정이 우선한다!

  • 그거 알아? @Primary가 달려있더라도 @Qualifier 붙으면 걔가 들어감.

  • 90%인 MySQL에는 @Primary를 걸고 10%인 MongoDB에는 @Qualifier를 줘서 좀더 좁은 범위로 직접주입한 경우라면?
    -> 유지보수도 쉽고 관리하기도 좋다. 잘 붙여놓은 것!

  • @Resource, @Injection 등도 있다. 근데 @Autowired가 기능도 좀더 많고 사용할 수 있는 대상도 많아서 확장성이 좋다. 가장 보편적으로 쓴다.
    @Injection은 외부 라이브러리를 끌고와서 사용해야 해서 많이 쓰진 않는다.

  • Bean이 scope라는 개념이 있음. Singleton 이라고 한번만 만들어 사용한다. Dispatcher servlet처럼 한개 만들어서 계속 씀.
    -> 요청이 들어올때마다 Bean을 만들어 쓰는 경우도 있긴 한데, 그땐 설정을 변경해서 때마다 만들어지도록 쓰기도 하는데, 지금은 중요하지 않다.

불변성, 그리고 싱글톤 - 어지간하면 공부하자. 중요!

그걸 알았으면 다음은 불변성(Immutable)을 공부해보면 됨. final 얘기할때 한번 나왔지만, 불변성이 진짜 중요하다.

예를 들어 내가 int cnt = 0; 했는데 어딘가에 cnt++; 해놨다 치자.
그런데 모든 쓰레드가 다 공유하게 됨 -> 모든 요청에 해당 변수가, 혹은 그 cnt++;가 공유된다. 이러면 이제 난리남!

디자인 패턴 정말 중요해. 사실 공부해놓는게 좋다.

  • 디자인패턴 전혀 모른 채로 그냥 자바공부만 열심히 했는데 내 자바 코드가 디자인패턴 중에 있는 경우 - 이러면 좋지. 최고임.
    -> 그러나 일반인이 이렇게 하긴 어렵다. 디자인 패턴을 먼저 보는것도 좋다고 생각한다.

  • Dispatcher servlet - 템플릿 메서드 패턴으로 되어있다.

  • Bean 등록 - 팩토리 메서드 패턴으로 되어있다.

  • 안맞는 방법이면 절대 하지말것!!!!
    -> Spring 말고 JAVA로 직접 해보면 좋긴 하다. 그러나 그건 SQL, JAVA, 기본 CRUD 등등 기초가 어느정도 되어있는 상태에서 해볼 것. 이건 레벨업 방법임. SQL, DB 같은게 더 중요함. 정규화/비정규화나 DB개론 개념 같은거.

  • 지금은 람다 몰라도 됨! 지금 찾아보지마. 진짜 찾아보지마.

  • Bean이 확장된게 @Resource? ApplicationContext? 임. G17n 등 여러 기능이 있음. 보통 쓰다보면 보다 많은 기능이 필요해서 확장하게 됨. 그중 하나가 이것.


  • 효율적으로 공부할것! 질문은 수강생의 권리. 네가 질문하지 않는건 그만큼 손해보는 것이다.
profile
갑자기 왜 춤춰?
post-custom-banner

0개의 댓글