목차
1. 개발자의 자세
2. 개발자의 soft skill
3. 검색하기
4. 에러코드 읽기
5. Spring Framework 기술
6. DI, IoC
7. AOP
1. 개발자의 자세
- 모르는 것과 아는 것을 확실히 분리해야 한다.
- 애매하게 아는 것을 경계하고 이것은 모르는 것과 같다.
2. 개발자의 soft skill
- 원활한 협업을 위해 soft skill을 다져야 한다.
- 애매하게 아는 것은 물어보기
- 질문이 오면 최선을 다해 설명해주기
- 일정을 준수하고 다듬는 것에 소홀하지 않기
3. 검색하기
- 신뢰할 수 있는 사이트: baeldung, medium, github, etc
- Reference site: spring.io, kotlinlang.org, etc
- 질의응답: stackoverflow
- 조금 더 다양한 토론: reddit
4. 에러코드 읽기
- 가장 위 또는 가장 아래의 에러부터 천천히 읽어보기
- 에러내용 검색해보기
- 사용한 library의 github에서 찾아보기
5. Spring Framework 기술
- Core (DI, IoC)
- AOP (Aspect Oriented Programming)
관점 지향 기술
공통 기능 적용하기
- Validation, Data binding
요청값 Validation
data binding (객체로 담기)
- Resource
파일, 외부 URI 등에 접근할 때 활용되는 APIs
- SpEL
Spring Expression Language
설정값을 외부에서 주입받을 때 활용
- Null-Safety
Null을 관리하는 여러 방법들
- 디자인 철학
- 모든 기능에서 다양한 가능성을 사용 가능, 심지어 외부 모듈을 활용 가능
- 유연하게 계속 추가 개발을 하고 있는 프레임워크
- 이전 버전과의 강력한 호환성
- API 디자인을 섬세하게 노력한다
- 높은 코드 품질을 유지하려 함
높은 자유도를 주고 계속 발전하는 고품질의 다양성이 있는 프로젝트
6. DI, IoC
- IoC(Inversion of Control), DI(Dependency Injection)
- Bean
-
자바에서의 javaBean
- 데이터를 저장하기 위한 구조체로 자바 빈 규약이라는 것을 따르는 구조체
- private 프로퍼티와 getter/setter로만 데이터를 접근한다.
-
스프링에서의 Bean
- 스프링 IoC 컨테이너에 의해 생성되고 관리되는 객체
- 자바에서처럼
new Object();
로 생성하지 않는다.
- 각각의 Bean들 끼리는 서로를 편리하게 의존(사용)할 수 있음.
- 스프링 컨테이너 개요
- ApplicationContext 인터페이스를 통해 제공되는 스프링 컨테이너는 Bean 객체의 생성 및 Bean들의 조립(상호 의존성 관리)을 담당한다.
- 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의 기본 개념들
- Aspect
- 여러 클래스나 기능에 걸쳐서 있는 관심사, 그리고 그것들을 모듈화함
AOP 중에서 가장 많이 활용되는 부분은 @Transactional
기능
- Advice
- 조언, AOP에서 실제로 적용하는 기능(로깅, 트랜잭션, 인증 등)을 뜻함
- Join point
- 모듈화된 특정 기능이 실행될 수 있는 연결 포인트
- Pointcut
- Join point 중에서 해당 Aspect를 적용할 대상을 뽑을 조건식
- Target Object
- AOP Proxy
- 대상 오브젝트에 Aspect를 적용하는 경우 Advice를 덧붙이기 위해 하는 작업을 AOP Proxy라고 함
주로 CGLIB(Code Generation Library, 실행 중에 실시간으로 코드를 생성하는 라이브러리) 프록시를 사용하여 프록싱 처리를 한다.
- Weaving
- Advice를 비즈니스 로직 코드에 삽입하는 것을 말함
2) AspectJ 지원
- AspectJ는 AOP를 제대로 사용하기 위해 꼭 필요한 라이브러리
- 기본적으로 제공되는 Spring AOP로는 다양한 기법(Pointcut 등)의 AOP를 사용할 수 없음