221202

Cornchip·2022년 12월 2일
0

Today-I-Learned

목록 보기
3/28
post-thumbnail

목차
1. 개발자의 자세
2. 개발자의 soft skill
3. 검색하기
4. 에러코드 읽기
5. Spring Framework 기술
6. DI, IoC
7. AOP



1. 개발자의 자세

  1. 모르는 것과 아는 것을 확실히 분리해야 한다.
  2. 애매하게 아는 것을 경계하고 이것은 모르는 것과 같다.


2. 개발자의 soft skill

  1. 원활한 협업을 위해 soft skill을 다져야 한다.
  2. 애매하게 아는 것은 물어보기
  3. 질문이 오면 최선을 다해 설명해주기
  4. 일정을 준수하고 다듬는 것에 소홀하지 않기


3. 검색하기

  1. 신뢰할 수 있는 사이트: baeldung, medium, github, etc
  2. Reference site: spring.io, kotlinlang.org, etc
  3. 질의응답: stackoverflow
  4. 조금 더 다양한 토론: reddit


4. 에러코드 읽기

  1. 가장 위 또는 가장 아래의 에러부터 천천히 읽어보기
  2. 에러내용 검색해보기
  3. 사용한 library의 github에서 찾아보기


5. Spring Framework 기술

  1. Core (DI, IoC)
  2. AOP (Aspect Oriented Programming)

    관점 지향 기술
    공통 기능 적용하기

  3. Validation, Data binding

    요청값 Validation
    data binding (객체로 담기)

  4. Resource

    파일, 외부 URI 등에 접근할 때 활용되는 APIs

  5. SpEL

    Spring Expression Language
    설정값을 외부에서 주입받을 때 활용

  6. Null-Safety

    Null을 관리하는 여러 방법들

  • 디자인 철학
    • 모든 기능에서 다양한 가능성을 사용 가능, 심지어 외부 모듈을 활용 가능
    • 유연하게 계속 추가 개발을 하고 있는 프레임워크
    • 이전 버전과의 강력한 호환성
    • API 디자인을 섬세하게 노력한다
    • 높은 코드 품질을 유지하려 함

    높은 자유도를 주고 계속 발전하는 고품질의 다양성이 있는 프로젝트



6. DI, IoC

  • IoC(Inversion of Control), DI(Dependency Injection)

  1. Bean
  • 자바에서의 javaBean

    • 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따르는 구조체
    • private 프로퍼티와 getter/setter로만 데이터를 접근한다.
  • 스프링에서의 Bean

    • 스프링 IoC 컨테이너에 의해 생성되고 관리되는 객체
    • 자바에서처럼 new Object(); 로 생성하지 않는다.
    • 각각의 Bean들 끼리는 서로를 편리하게 의존(사용)할 수 있음.
  1. 스프링 컨테이너 개요
  • ApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean 객체의 생성 및 Bean들의 조립(상호 의존성 관리)을 담당한다.
  1. Bean의 등록
  • 과거에는 xml로 설정을 따로 관리하여 등록(불편)
  • 현재는 annotation 기반으로 Bean 등록

    ex) @Bean, @Controller, @Service


  • Bean 등록 시 정보
    • Class 경로
    • Bean의 이름

      기본적으로는 원 Class 이름에서 첫 문자만 소문자로 변경
      원하는 경우 변경 가능

    • Scope: Bean을 생성하는 규칙

      singleton: 컨테이너에 단일로 생성
      prototype: 작업 시마다 Bean을 새로 생성하고 싶을 경우
      request: http 요청마다 새롭게 Bean을 생성하고 싶은 경우


  • Bean LifeCycle callback
    • callback: 어떤 이벤트가 발생하는 경우 호출되는 메서드
    • lifecycle callback

      Bean을 생성하고 초기화하고 파괴하는 등 특정 시점에 호출되도록 정의된 함수

    • 주로 많이 사용되는 콜백

      @PostConstruct: 빈 생성 시점에 필요한 작업을 수행
      @PreDestroy: 빈 파괴(주로 어플리케이션 종료) 시점에 필요한 작업을 수행



7. AOP

  • 관점 지향 프로그래밍 (Aspect Oriented Programming)
  • 특정한 함수 호출 전이나 후에 뭔가 공통적인 처리가 필요할 때 이용

    로깅, 트랜잭션, 인증

  • OOP로 처리하기에는 다소 까다로운 부분을 AOP라는 처리 방식을 도입하여 손쉽게 공통 기능을 추가/수정/삭제할 수 있도록 함

1) AOP의 기본 개념들

  1. Aspect
  • 여러 클래스나 기능에 걸쳐서 있는 관심사, 그리고 그것들을 모듈화함
    AOP 중에서 가장 많이 활용되는 부분은 @Transactional 기능

  1. Advice
  • 조언, AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 인증 등)을 뜻함

  1. Join point
  • 모듈화된 특정 기능이 실행될 수 있는 연결 포인트

  1. Pointcut
  • Join point 중에서 해당 Aspect를 적용할 대상을 뽑을 조건식

  1. Target Object
  • Advice가 적용될 대상 오브젝트

  1. AOP Proxy
  • 대상 오브젝트에 Aspect를 적용하는 경우 Advice를 덧붙이기 위해 하는 작업을 AOP Proxy라고 함
    주로 CGLIB(Code Generation Library, 실행 중에 실시간으로 코드를 생성하는 라이브러리) 프록시를 사용하여 프록싱 처리를 한다.

  1. Weaving
  • Advice를 비즈니스 로직 코드에 삽입하는 것을 말함

2) AspectJ 지원

  • AspectJ는 AOP를 제대로 사용하기 위해 꼭 필요한 라이브러리
  • 기본적으로 제공되는 Spring AOP로는 다양한 기법(Pointcut 등)의 AOP를 사용할 수 없음
profile
cornchip

0개의 댓글