* 공부용의 자유로운 글씨😀
『스프링 부트 핵심 가이드 - 스프링 부트를 활용한 애플리케이션 개발 실무』 공부용이다.
이 책은... 다른 책 빌리러 갔다가 마음에 들어서 (얇아서) 빌려왔다!
그리고 지은이의 이력에 대해 부러워 하고 있다.
(사실 https://jeho.page/ 이 분이 더 부럽긴 하다... 갓물주...주식...네이버퇴사!(결단력!))
어쨌든 아직 책을 덜 펴서 IDE를 뭘 쓰는지 모르겠는데, 인텔리제이 아니면 VSCode를 쓰기를 요망!
https://wikibook.co.kr/springboot/
여기가 홈페이지 URL이다.
https://github.com/wikibook/springboot
예제 코드!
나는 공부용으로 끄적끄적 쓸 예정이므로 fork를 땄다!
https://github.com/bowies/springboot
앗...그리고 여기까지 쓰면서 책 단점을 발견했는데, 이전 책은 코팅이 안 되어 있어서
빛 반사가 없었다!
이 책은 약간 빛나는 종이라서 굉장히 눈이 아프다!
( 책 받침의 각도를 조절해서 해결! - 하드웨어적인 해결 )
1장부터 13장까지 있는데, 앞 부분은 설정이라 리마인드하며 술술 읽을 예정이다.
스프링 프레임워크는 자바 기반의 애플리케이션 프레임워크로,
엔터프라이즈급 애플리케이션을 개발하기 위한 다양한 기능을 제공한다.
스프링은 목적에 따라 다양한 프로젝트를 제공하는데, 그 중 하나가 스프링 부트다.
스프링 프레임워크를 알아보고, 그 뒤 특징을 설명하는 방식으로 책이 쓰여 있다.
egov(전자정부프레임워크)도... spring 버전이 있다...
스프링은 자바 언어를 이용해서 엔터프라이즈급 개발을 편하게 만들어주는 오픈소스 경량급 애플리케이션 프레임워크다.
엔터프라이즈급 개발 : 기업 환경을 대상으로 하는 개발
스프링은 애플리케이션 개발에 필요한 기반을 제공해서, 개발자가 비즈니스 로직 구현에만 집중할 수 있게끔 하는 것이다.
일반적인 자바 개발의 경우에는 객체를 선언하고, 의존성을 생성한 후, 객체에서 제공한다.
근데 IoC(제어 역전)을 특징으로 하는 스프링은, 외부 스프링 컨테이너나 Ioc 컨테이너가 객체의 생명주기를 관리한다.
DI나 AOP 같은 것도 IoC 때문에 가능한 개념이다!
객체 제어권을 컨테이너에 넘겨버리면 개발자는 비즈니스 로직을 작성하는 데에만 집중할 수 있어서 좋다!
DI는 의존성 주입인데...
네 이것은 제어 역전 방법 중 하나로 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아서 사용하는 방식이다.
1) 생성자를 통한 의존성 주입
2) 필드 객체 선언을 통한 의존성 주입
3) setter 메소드를 통한 의존성 주입
을 할 수 있는데, @Autowired라는 어노테이션을 통해서 의존성을 주입할 수 있다.
근데 사실 이거 스프링 4.3 이후로는 생략 가능이고 기본이 true라서... 어쨌든 공부용으로는 명시를 꼭 해주는 것이 좋다고 한다.
1) 생성자를 통한 의존성 주입
@RestController
public class DIController{
MyService myService;
@Autowired
public DIController(MyService myService){
this.myService = myService;
}
@GetMapping("/di/hello")
public String getHello(){
return myService.getHello();
}
}
bold를 지정했는데 티가 나지 않는다.
2) 필드 객체 선언을 통한 의존성 주입
@RestController
public class FieldInjectionController{
@Autowired
private MyService myService;
}
3) setter 메소드를 통한 의존성 주입
@RestController
public class SetterInjectionController{
MyService myService;
@Autowired
public void setMyService(MyService myService){
this.myService = myService;
}
}
교재에서 메서드라고 했지만 나는 꿋꿋하게 메소드라고 하리라...라고 했는데
메서드!
메서드로 합시다!
어쨌든 스프링 문서에서는 생성자를 통해서 의존성을 주입하라고 한다고 한다.
(API가 시키는 데로 잘 하는 나는 생성자를 통해서 하겠다...★)
생성자를 통해서 의존성을 주입받는 방식은 레퍼런스 객체가 있어야 객체를 초기화 할 수 있는 구조이기 때문이다!
맨날 면접 때 물어봤던...(2016년...?? 그 이후로는 경력자라서 안 물어봤음... 이직도 많이 안 했고...)AOP는 관점 기준으로 묶어서 개발하는 건데, OOP랑은 딱히...별 상관 없고... 기능 중심으로 구현할때 핵심기능 / 부가 기능 나눠서 보는 것을 의미한다.
핵심 기능 : 비즈니스 로직 구현 과정에서 비즈니스 로직이 처리하려는 목적 기능
부가 기능 : 핵심 기능을 맨들때 로깅이나 트랜잭션 같은 코드를 넣어야 하니까 이게 필요함
OOP에서는 객체마다 핵심 기능을 수행하기 위한 로직 + 부가 기능을 작성을 하면,
동일한 코드가 포함된다는 것을 의미한다고 한다 (개념상 그렇지 실제로는 다르긴 하다...)
어쨌든 AOP의 관점에서는 부가 기능은 핵심 기능이랑 별개로 로직 수행 전 / 후에 수행 되기만 하면 되니까 공통화를 할 수 있다!
그래서 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해서 삽입하는 방식을 AOP라고 한다.
스프링에서는 프록시 패턴을 사용해서 AOP를 제공한다.
컴파일 과정에 삽입하거나, 바이트코드를 메모리에 로드하는 과정에서 삽입하거나 해도 된다.
어쨌든 OOP나 AOP나 모듈화해서 재사용 한 구성을 만드는 것이 목적이고, 모듈화된 객체를 편하게 쓸 수 있게 해서 개발자가 비즈니스 로직을 구현하는데 집중할 수 있게 도와주는 것이다.
스프링 프레임워크는 기능별로 구분된 20여개 모듈로 구성되어 있는데, 교재랑 똑같이 생긴것 그리기 귀찮아서 구글에서 검색하면 맨 위에 뜨는 거 찾아왔다.
스프링 프레임워크에서 하이버네이트 같은 JPA 구현체 쓸라면 뭐 설정할거 되게 많은데,
설정 귀찮으니까 Boot로 쓰라는 것이다.
의존성 관리도 spring-boot-starter 라이브러리 같은걸로 해줄 수 있고...
내장 톰캣 있는 spring-boot-starter-web 도 있고...
junit도 기본 제공하고... jdbc나 jpa나 캐시 기능도 지원한다.
그리고 충돌 날 수 도 있으니까 spring-boot-starter-parent가 검증된 조합을 제공하는 것까지 한다.
스프링 프레임워크 기능 쓰라고 자동 설정도 지원하는데,
의존성을 추가하면 프레임워크가 이를 자동으로 관리해준다.
@SpringBootApplication 같은 어노테이션을 보면,
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
스프링 부트 어플리케이션이 실행되면 우선 @ComponentScan 어노테이션이 @Component 시리즈 (뭐...컨트롤러...서비스...리파지토리...컨피규레이션...레스트컨트롤러 이런거다 ) 가 붙은 클래스를 발견해서 지가 빈을 등록해분다.
이후에는 @EnableAutoConfiguration 어노테이션을 통해서 설정을 적용시켜주고 그런다.
톰캣 내장이 되어 있긴 한데 내장 WAS 쓰면 배포가 어쩌구 저쩌구 하는거 귀찮아서 따로 빼서 썼었음... (공부용에서는 내장 WAS 쓸거다.)
어쨌든 이걸 배포하고 운영할 때는 모니터링을 해야 하는데 또 이것도 Spring Boot Actuator 라는걸 제공한다.
교재 슥슥 넘겨보니까 인텔리 제이 쓰나보다.
현역 대학생이니까 (법학과지만...) 공부용은 라이선스 걱정 없다.
: 내일은 3장까지는 해야 과제물도 짜고 그럴 듯...
코테가 편한 것 같다... 과제 환경 조성 귀찮음.
댓글
댓글 쓰기