Today I Learned_220407
Spring Framework
우아한 테코톡 : Spring vs. Spring Boot
객체 지향 설계와 스프링
스프링은 DI, DI 컨테이너를 통해 다형성, OCP, DIP를 가능하게 지원한다. -> 클라이언트 코드의 변경 없이 기능 확장
OCP, DIP 원칙을 지키면서 개발을 하다보면 결국 스프링 컨테이너(DI 컨테이너)를 만들게 된다.
이상적으로는 모든 설계에 인터페이스를 부여하는 것이 좋음. 어떤 기술을 사용해야 할지 모르는 상황에서도 구현할 수 있다는 장점. -> 하지만 인터페이스를 도입하게 되면 추상화 비용이 발생. 코드를 볼 때 복잡해진다.
기능을 확장할 필요가 없다면 구체 클래스를 사용하고, 꼭 필요할 때 리팩터링을 하자.
Spring vs. Spring Boot
Spring Boot는 Spring을 쉽게 사용할 수 있도록 도와주는 것.
Spring에서는 모든 dependency와 버전을 하나씩 기재해야 했지만, Spring Boot는 더 편히라게 사용 가능(버전 관리도 권장 버전으로 자동 설정)
Spring Boot는
- Spring을 간편하게 설정할 수 있도록 도와줌
- dependency 관리 시 편리하게 관리하고, 자동 권장 버전을 관리
- 내장 서버가 있기에 간단하게 배포 가능
- Spring Security, JPA 등 다른 Spring Framework 요소를 쉽게 사용할 수 있음.
JavaScript
Weakly-type language.
싱글 스레드로 동작하며 한 번에 하나의 작업만 처리할 수 있다.
js의 런타임은 메모리 할당을 담당하는 메모리 힙과 코드가 호출되면서 스택으로 쌓이는 콜 스택이 존재. 싱글 스레드 기반이므로 JS는 하나의 메인 스레드와 하나의 콜 스택을 가지고 있다.
NodeJS는 JS를 브라우저 밖에서도 실행시킬 수 있는 JS 런타임
싱글 스레드 논블로킹 모델이며, 싱글 스레드이지만 비동기 IO 작업을 통해 요청들을 서로 블로킹하지 않는다.