[TIL] 2022-03-15

nathan·2022년 3월 14일
0

TIL

목록 보기
33/34

새로운 한 주의 시작

  • 미션이 6이 끝일줄 알았는데, 7이 나왔다. 아마.. 9까지 나올 것 같은데 난 이제 2다.. ㅠ
    • 머지가 되어야 시작을 하는데 ㅠㅠ
  • 이번에 조 편성이 잘 된 것 같았다. 정말 오랜만에 보는 멤버들부터 해서 처음 보는 멤버들까지 잘 섞여 있었다. (나만 그런 것이 아니었음)
    • 이번 기회에 좀 더 친해지면 좋을 것 같다.
    • 함께 성장할 수 있도록 노력해야겠다.
  • 해야하는 것은 점점 많아지고, 집중력은 점점 떨어진다. 운동과 건강한 식습관을 가질 수 있도록 노력해야겠다.

오늘 학습했던 것

  • 오늘은 미뤄뒀던 스프링 강의를 학습했다.

  • 스프링 컨테이너가 스프링 빈을 조회 할 때 조회 빈이 2개 이상이라면?

    • 스프링 빈 조회에서 학습했듯, 타입으로 조회하면 빈이 2개 이상일 때 문제가 발생한다.

      1. @Autowired 필드명을 매칭한다.
      • @Autowired
        //private DiscountPolicy DiscountPolicy      
        private DiscountPolicy rateDiscountPolicy
        
      1. @Qualifier("이름") 추가 구분자를 붙여준다.
      • 생성자, 수정자, 필드 주입 방법에서 모두 사용이 가능하다.
      • 만약 Qualifer에 기록된 이름을 못찾으면, 해당 이름으로 등록된 빈이 있나 탐색한다.
      • 영한님 왈 "경험상 @Qualifier@Qualifier를 찾는 용도로만 사용하는 것이 낫다."
      • 그러나 이름(즉, 문자열)은 컴파일시 타입체크가 안되므로, 이를 해결하기 위해서는 애노테이션을 직접 만들어 해결한다.(Qualifier에서 쓰이는 어노테이션을 다 가져와서 새로 만드는 개념)
      • 참고로 애노테이션은 상속 개념이 없다.(스프링에서 지원해주는 것임)
      1. @Primary로 우선순위 정하기(이 방법이 가장 많이 쓰임)
      • 쓰고 싶은 곳에 어노테이션을 추가하기만 하면 된다.
    • @Qualifier와 비교했을 때 @Qualifier는 매우 상세히 동작하고, @Primary는 기본 값처럼 동작하기 때문에 @Qualifier가 더 우선순위가 높다.

      • 자동보다는 수동이, 넓은 범위보다는 좁은 범위가 우선순위에서 앞선다.

  • 동적으로 빈을 선택해야할 때(ex. 정률, 정액)

    • Map, List 를 이용하면, 다형성 코드를 유지하면서 사용가능
  • 자동, 수동 빈 등록의 올바른 실무 운영 기준(대부분 자동화 추세)

    • 결정적으로 자동빈 등록을 해도 OCP, DIP를 지킬 수 있음(애노테이션 추가 수정은 어쩔 수 없는 부분)
    • 그럼 수동 빈 등록은 언제 해야해?
      • 업무로직과 관련된 빈(비즈니스 요구사항과 관련)은 자동기능을 적극 이용!
      • 기술 지원 빈은 업무로직을 지원하기 위한 하부 기술이나 공통 기술들이라 광범위하게 영향을 미치므로 수동기능을 이용!
      • 단, 비즈니스 로직에서 다형성을 적극 활용할 때(ex. 동적인 빈조회 - Map) 수동 주입을 활용하면 좋다.(자동으로 할 시 같은 패키지에 묶어 가독성을 높이는 방법도 존재.)
  • 빈 생명주기 콜백

    • DB 커넥션 풀(요즘은 미리 앱서버랑 DB를 연결해놓음), 네트워크 등 이런 연결은 앱 종료 시점에 모두 함께 종료가 되어야 한다.
    • 따라서, 이런 초기화 작업 및 종료 작업에 빈 생명주기 콜백을 쓴다.
    • (1) 인터페이스 InitializingBean, DisposableBean (스프링 초창기의 방법 - 거의 사용X)
      • 단점 : 스프링 전용 인터페이스이기 때문에 코드가 스프링의 전용 인터페이스에 의존.
      • So, 초기화, 소멸 메서드의 이름을 변경할 수 없음
      • 내가 코드를 고칠 수 없는 외부 라이브러리에 적용할 수 없음
    • (2) 빈 등록 초기화 소멸 메서드 : @Bean(initMethod="", destroyMethod="")
      • 설정정보 사용 특징
        • 메서드 이름 커스텀 가능
        • 스프링 빈이 스프링 코드에 의존하지 않음
        • 외부 라이브러리에서도 초기화, 종료 메서드 적용 가능
        • 종료 메서드 추론 기능(종료 메서드는 따로 적지 않아도 잘 동작함.) : destroy=""(빈공백)
    • (3) 애노테이션 @PostConstruct @PreDestroy
      • 최신 스프링 권장방법
      • 컴포넌트 스캔과 잘 어울릴 수 있음
      • JSR-250 자바 표준
      • 유일 단점 : 외부 라이브러리 적용불가 (이 땐, (2) 빈 등록 초기화 소멸 메서드를 이용하자.)

마스터 클래스 (클라우드, MySQL)

  • AWS : 서버 이중화는 필수(높은 가용성을 이용하자.) - DB 이중화도 필수!
  • 클라우드 인프라
  • MySQL 8.0부터는 root password로 로그인 안한다!
    • sudo로 root 계정 접근하면 됨.(강의 다시보고 커맨드 적어놓기)
  • DB는 원래 외부 접속을 허용하는게 아니다.
  • MySQL SequelAce 연결하는거 정리 하기
  • pstree : 프로세스의 트리
    • systemd가 가장 조상인데, 이를 fork(복제)하여 프로세스가 생성된다.

TIP!

intelliJ 단축키

  • cmd + opt + B : 구현체로 바로 들어갈 수 있다.

남은 것..

  • 미션 3~
  • 호눅스 강의 다시 듣고 JVM, MySQL 커맨드 등 학습하기
  • 개구리 책 읽기(현재 챕터 5)
profile
나는 날마다 모든 면에서 점점 더 나아지고 있다.

2개의 댓글

comment-user-thumbnail
2022년 3월 15일

아니 어쩜 글씨도 잘쓰세요 모자랄게 없는 네이thㅓㄴ

1개의 답글