#1 Spring Core
1) 스프링은 프레임워크입니다.
프레임워크와 라이브러리는 어떤 차이가 있을까요?
Framework
프레임워크는 뼈대나 기반구조를 뜻한다.
개발할 때 필수적인 코드, 알고리즘 등과 같이 어느 정도의 구조를 제공해주기 때문에
프레임워크를 사용하는 개발자는 프레임워크의 뼈대 위에서 코드를 작성하여 프로그램을 개발하면 된다.
즉, 프레임워크는 완성된 제품이 아닌 완성된 제품을 만들기 위해 개발자를 도와주는 역할을 한다.
이를 소프트웨어적으로 정의하면 소프트웨어의 특정 문제를 해결하기 위해
상호 협력하는 클래스와 인터페이스의 집합인 것이다.
Library
라이브러리는 특정 기능에 대한 도구 또는 함수들의 집합이다.
개발자가 어떤 기능을 수행하기 위해서 필요한 기능을 제공해주는 역할을 한다.
예를 들어 아래 Fullcalender는 웹앱 달력 구현 시 많이 사용하는 자바스크립트 기반 라이브러리이다.
2021.04.25 - [WEB developer/Javascript] - [Javascript] FullCalendar 사용하기 #1
출처 : https://juyeop.tistory.com/23
2) 스프링 프레임워크는 DI Container라고 불립니다.
스프링 프레임워크 이외에도 DI Container는 존재할까요?
3) Spring컨테이너가 관리하는 객체를 Bean이라고 합니다.
Spring은 Bean을 생성할 때 기본적으로 싱글톤 객체로 생성합니다.
싱글톤이란 메모리에 하나만 생성한다는 것입니다.
메모리에 하나만 생성되었을 경우, 해당 객체를 동시에 이용한다면 어떤 문제가 발생할 수 있을까요?
(참고로 Spring에서 Bean을 생성할 때 스코프를 줄 수 있습니다.
스코프를 줌으로써 기본으로 설정된 싱글톤 외에도 다른 방법으로 객체를 생성할 수 있습니다.)
싱글톤 스코프 Bean을 여러 스레드에서 동시에 사용한다면 스레드간에 동시성 문제가 발생할 수 있다.
이를 해결하기 위한 방법으로는 synchronized() 블록으로 임계 구역을 설정하여
동시성 문제를 해결하는 방법이 있다.
4-1) 다루는 Bean이 많아질수록 xml로 설정하는 것과
@ComponentScan, @Component, @Autowired를 이용하는 것 중
어떤 것이 유지보수에 좋을 것 같습니까?
내 생각엔 장단점이 있을 것 같지만 어노테이션 설정이 더 편할 것이라고 생각한다.
xml을 사용한다면 설정된 빈들을 한 눈에 볼 수 있지만 하나하나 설정해주는데에 비용이 들어갈 것이고
얻을 수 있는 정보의 양이 제한적일 것이다.
어노테이션을 사용한다면 설정, 변경 용이함, 더 많은 메타 정보(패키지, 크래스 이름, 접근 제한자, 상속/구현 등)
획득, 오타, 타입 설정으로 인한 컴파일 에러 확인이 가능한 장점이 있을 것이다.
하지만 모든 빈들을 확인하는데에 어려움이 있지 않을까 생각한다.
4-2) @AutoWired는 Field, Constructor, Setter Method에 사용할 수 있습니다.
각각의 방식에 장단점에 대해 생각해보세요.
Spring에서 등록된 Bean을 사용하기 위해서 DI(Dependency Injection)를 처리하는 방법은 크게 3가지가 있다.
Field Injection, Setter Injection, Contructor Inject이다.
Spring 3.x버젼까지만 해도 Setter Inject을 권장하였으나,
최근에는 순환참조, Coupling등이 문제로 인해서 Spring 4.3 이후 버젼 부터는 Contructor Inject를 권장하고 있다.
각각의 장단점 아래 링크 참고
'Record > boostcourse' 카테고리의 다른 글
[boostcourse] 4. 웹 앱 개발 예약 서비스 생각해보기 #1 ~ #4 (0) | 2021.08.02 |
---|---|
[boostcourse] 3. 웹 앱 개발 예약 서비스 생각해보기 #2 ~ #3 (0) | 2021.08.01 |
프로젝트B. 방명록 만들기 리뷰 (0) | 2021.07.28 |
프로젝트A. 명함 관리 프로그램 리뷰 (0) | 2021.07.26 |
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #5 (0) | 2021.07.21 |
댓글