24-05-07 Spring 입문
오늘은 스프링 입문, 숙련 강의들을 들으며 대부분의 시간을 보냈다. 일단 진도를 쭉 빼놓고 자세히 공부해봐야겠다는 생각이 들어서 일단은 최대한 빨리 끝까지 강의 수강을 마치는 것을 목표로 잡고있다.
오늘은 스프링 입문 강의를 듣고나서 작성해야 하는 과제 문제들을 풀어보며서 복습도 하면서 아는 내용을 간단하게 정리해보았다.
1. Spring 입문 문제
- Library와 FrameWork의 설명 중 틀린 것을 고르시오
- 특정한 언어의 개발 환경에 기본적으로 포함된 것들은 대부분 표준 Library라고 불린다
- Library는 Application을 호출하는 Caller 역할을 한다
- FrameWork는 개발 시 목적에 따라 고민할 필요 없이 이용할 수 있도록 일괄로 가져다 쓰도록 만들어 놓은 틀이다
- Spring은 Library가 아닌 FrameWork이다
프레임워크는 애플리케이션을 호출하고, 애플리케이션은 라이브러리를 호출한다. 개발자인 우리는 라이브러리에 있는 코드를 불러다 쓰고 우리가 작성한 코드로 이루어진 애플리케이션을 프레임워크가 부르는 것이다.
따라서 잘못된 것은 'Library는 Application을 호출하는 Caller 역할을 한다'이다. Caller가 아니라 Callee의 역할을 한다.
- CSR(Client Side Rendering)의 특징 중 올바른 것을 고르시오
- SEO가 가능하다
- 사용자가 첫 화면을 보는데 시간이 적게 걸린다
- 서버의 부하를 줄여줄 수 있다
- CSR은 보통 Multi Page Application에서 사용되는 기법이다
브라우저에서 Javascript를 읽어 페이지를 렌더링하는 CSR은 동적으로 된 하나의 페이지 만을 보여주는 Single Page Application에서 사용되는 기법이다. Javascript를 통해 페이지를 불러와야하기 때문에 첫 화면을 보는데 시간이 오래 걸린다는 단점도 있고, 검색 엔진 최적화(SEO)에 취약해서 검색이 잘 되지 않는다는 단점이 있다. 그렇지만 서버에서 HTML 내용을 모두 채워 전달하지 않기 때문에 서버의 부하를 줄여줄 수 있다.
따라서 답은 '서버의 부하를 줄여줄 수 있다'이다.
- SSR (Server Side Rendering)의 특징 중 올바른 것을 모두 고르시오
- 서버의 부하가 적다
- SEO가 가능하다
- 서버측에서 데이터를 가져와서 페이지를 구성한다
- 사용자가 느끼기에 첫 화면이 느리게 느껴진다
완성된 화면을 서버에서 모두 불러오는 SSR은 서버의 부하가 크고, 페이지 내용에 변화가 있을 경우 처음부터 HTML을 다시 만들어야 하기 때문에 변경사항을 적용하는데 시간이 오래 걸린다는 단점이 있다. 하지만 검색엔진 최적화(SEO)가 가능하고, 첫 화면이 빠르다는 장점도 있다.
보기에서 올바른 것은 'SEO가 가능하다'와 '서버측에서 데이터를 가져와서 페이지를 구성한다'이다.
- JSON에 대해 틀린 것을 고르시오
- Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷이다
- Public Key - Private Key 구조로 되어 있다
- JSON은 데이터를 네트워크를 통해 전송할 때 유용하다
- JSON은 Javascript의 기본 데이터 타입을 담을 수 있다
JSON은 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷으로 Javascript의 기본 데이터 타입을 담을 수 있다. 또한 데이터를 네트워크를 통해 전송할 때 유용하다. Javascript가 아니더라도 JSON을 읽고 쓸 수 있는 기능이 다수의 프로그래밍 환경에서 제공된다.
보기에서 틀린 것은 'Public Key - Private Key 구조로 되어 있다.'이다.
- Web Application을 만들기 위해 필요한 요구사항에 대해 틀린 것을 고르시오
- 특수한 상황에 대한 예외처리가 필요하다
- 스토리지와 내부 시스템과 통신할 수 있어야 한다
- 비즈니스 로직을 처리할 수 있어야 한다
- 인증과 인가 처리를 할 수 있어야 한다
유저나 프론트엔드 어플리케이션의 요청을 처리하고, 적당한 응답을 줄 수 있어야하고, 예외처리를 할 수 있고, 예외가 발생했을 때 적절한 응답을 줄 수 있어야 합니다. 인증과 인가 처리를 할 수 있어야 한다. 비즈니스 로직을 처리할 수 있어야하고, 트랜잭션 관리 전략이 있어야 한다. 스토리지 및 다른 외부 시스템과 통신할 수 있어야 한다.
틀린 것은 '스토리지와 내부 시스템과 통신할 수 있어야 한다'이다. 외부 시스템과 통신해야 어플리케이션에서는 저장되지 않는 데이터를 저장할 수 있다.
- DI (Dependency Injection)의 방법 중 틀린 것을 고르시오
- Field Injection
- Setter Injection
- Constructor Injection
- Class Injection
의존성 주입 방법에는 필드 주입, 세터 주입, 생성자 주입이 있다.
따라서 틀린 것은 'Class Injection'이다.
- IoC (Inversion of Control)의 장점 중 틀린 것을 고르시오
- 애플리케이션 코드의 양을 줄일 수 있다
- 클래스 간의 결합을 강하게 한다
- 애플리케이션의 테스트와 유지 관리를 쉽게 해준다
- 유연한 코드를 작성 할 수 있는 구조가 될 수 있다
제어의 역전 방식은 클래스 간의 결합을 약하게 만들어 유연한 코드를 작성 할 수 있는 구조로 만들 수 있다. 코드의 양도 줄일 수 있고 애플리케이션의 테스트와 유지 관리도 쉽게 해준다.
틀린 것은 '클래스 간의 결합을 강하게 한다'이다.
- 생성자 주입 방식이 가장 권장되고 있는 이유는 무엇일까요?
필드와 세터를 통한 주입에서는 var로 선언해야 하기 때문에 변할 가능성이 존재하지만, 생성자를 통해 주입하면 인스턴스가 생성될 때 의존성을 넣어주기 때문에 val로 선언하여 불변성을 확보할 수 있다는 장점이 있기 때문입니다.
또한 서로가 서로를 참조하는 순환 참조를 방지할 수 있고, 원하는 객체를 생성하여 생성자에 넣어주기만 하면 테스트 코드를 작성할 수 있다는 장점도 있습니다.
2. 오늘 배운 것
- 대략적인 스프링의 전체 그림에 대해 공부해보았다.
- DTO를 직접 코드로 한 번 작성해보았다.