봐도봐도 미궁으로 빠지는 스프링..














내가 모르는부분이 가렵기만하고 해결되지 않는 기분이다.
그걸 해결하기위해서 인프런 강의도 듣고
수업 컨텐츠도 정독하면서 쭉 복습하고 있다.

아마 한번에 얻기는 힘들 것 같고 어느순간 사용해보고
깨닫는 순간이 올거라 믿는다.

지금은 머리속에 들어와도 통과되는 느낌..
억지로 우겨넣고 나중에 꺼냈을때 빛을 바라길 간절히 기도해본다…


어제는 스프링의 특징인 POJO에 대해 공부했다.
IoC,DI,AOP,PSA 삼각형을 잊지 않고 기억하고 있다.
제어의 역전과 의존성 주입에 관한 얘기는
여러번들어서 어느정도 이해가 되었지만, 외부 객체를 주입해서
어떤식으로 활용하는지가 아직 궁금한 부분이고

AOP는 내용은 인지했지만 이 내용을 어떻게 프로그램에 적용하는지?

예제를 많이 보질 못해 아직 감이 안잡힌다.
PSA는 추상화와 다르게 무엇일까? 라는 생각을 가졌다.
인터페이스를 두어 느슨한 결합으로 연결해 객체에 접근하는 방식으로 이해했다.

Spring Framework 모듈 구성

스프링 프레임워크 모듈구성을 알기 위해서는
아키텍쳐라는 개념을 우선적으로 알고 있어야한다.

아키텍처 : 구조,행위, 더 많은 뷰를 정의하는 개념적 모형이다. - 위키피디아
시스템 아키텍처 -위키백과-

건축을 예로 들면 어떤 건물이나 구조물에 대한 컨셉을 잡는 것부터 시작이다.
대략 적인 컨셉을 잡았다면 구체적인 설계와 시공을 들어가게 되는것과 같이
시스템 구축에 있어 구조를 정의하는 것이고 아키텍츠는 너무 복잡하면 안된다.

컴퓨터 구조 즉, 컴퓨터 아키텍쳐를 알아보자

시스템 아키텍처
디지털 컴퓨터의 발명 이전에는 시스템이라는 용어가 일반적이었다.
컴퓨터가 등장하면서 하드웨어랑 소프트웨어가 구분되어 다르게 되었고
시스템 아키텍쳐라는 말은 하드웨어랑 소프트웨어를 전부 포함하는 말이다.

소프트웨어 아키텍처 (애플리케이션)
소프트웨어의 구성요소들 사이에서 유기적 관계를 표현하는 방법이다.
10가지 일반적인 소프트웨어 아키텍쳐 패턴들을 사용할 수 있다.

  1. 계층화 패턴 (Layered pattern)
  2. 클라이언트-서버 패턴 (Client-server pattern)
  3. 마스터-슬레이브 패턴 (Master-slave pattern)
  4. 파이프-필터 패턴 (Pipe-filter pattern)
  5. 브로커 패턴 (Broker pattern)
  6. 피어 투 피어 패턴 (Peer-to-peer pattern)
  7. 이벤트-버스 패턴 (Event-bus pattern)
  8. MVC 패턴 (Model-view-controller pattern)
  9. 블랙보드 패턴 (Blackboard- pattern)
  10. 인터프리터 패턴 (Interpreter pattern)

소프트웨어 아키텍처 패턴 요약 - 참고 레퍼런스

우리는 주목해야할 부분은
웹 애플리케이션을 위한 아키텍처이고
1번인 계측형 아키텍쳐로 표현된 그림을 봐보자

















우리가 앞으로 계속 보게될 아키텍처이다.

API 계층
클라이언트의 요청을 받아들이는 계층이다. 표현 계층(Presentation Layer)라고도 불리고
REST API를 제공하는 애플리케이션은 API 계층이라고 표현한다.

서비스 계층
API계층에서 전달 받은 요청을 업무 도메인의 요구 사항에 맞게
비지니스적으로 처리하는 계측이다.
비지니스적이라는 말그대로 핵심 로직을 포함하고 있다.

데이터 엑세스 계층
비지니스 계층에서 처리된 데이터를
데이터 베이스 등의 데이터 저장소에 저장하기 위한 계층이다.
위에 계층도를 보고 우리가 웹 애플리케이션을 개발할때
나누어지는 패키지나 클래스 별로 위에 계층을 나누는 건가? 라는 생각이 들긴 했다.
왜나하면 몇몇 Spring 강의들 들었을때 Service ,Controller, Repository 등
해당 서비스를 나누어서 작업하는 것을 본 것 같아서 관련되있나? 라는 생각을 해보았다.

나중에 어떤 의미인지는 공부하면서 짚어봐야겠다.
위에서는 애플리케이션의 아키텍처를 보았는데
스프링 프레임워크의 모듈 아키텍처 한번 보아보자.














아직 모르는 단어들도 있고
이전에 학습했던 단어 들도 있다.

아마 스프링을 쭉 배우면서 아~ 이런게 이런 내용이였구나라는걸
하나씩 이해해가면서 이 스프링 모듈 아키텍처를
이해하는 날이 오기를 기대해본다.

Spring Boot

Spring Framework와 Spring Boot는 다른 의미다.
나는 이제 스프링 프레임워크라는 의미를 알고 있다.

그럼 Boot는 어떤 의미일까?
스프링 프레임 워크를 사용하면 이전에 학습했던 내용처럼
분명 엄청나게 편리함을 가지는건 분명하다.

하지만 스프링 프레임 워크를 사용하기 위해
설정해줘야하는 내용이 엄청 복잡하고
프레임워크를 사용하기도전에 어려움을 겪는 문제를 봉착할 수 있다.
이런 문제를 해결하기 위해 생겨난게 Spring Boot이다.

아직 그 설정? 해야하는 것이 무었인지 어떤 어려움을 가지고 있었기에
선조개발자님들이 이런 것을 만들었는지?에 대해서 추후에 학습해보려한다.
오늘은 왜 사용해야하는지? 에 대한 내용만 정리하고
이후 스프링을 맛보고 뜯어먹으면서
내용을 다시 보고 이게 이런 의미였구나~ 해보자

1). XML 기반의 복잡한 설계 방식 지양

2). 의존 라이브러리 자동 관리
-> Spring Boot starter 모듈 기능을 통해 의존라이브러리를 수동으로 설정해야하는
불편함이 없어졌다 = dependencies에 의존라이브러리 설정

3). 애플리케이션 설정의 자동구성
-> 2번에 starter 모듈에 의존라이브러리를 설정하면 의존 라이브러리를 기반으로
@SpringBootApplication 애너테이션을 통해 Spring Boot에서 자동 구성 설정이 활성화된다.

4). 프로덕션급 애플리케이션의 손쉬운 빌드
-> 빌드 결과물을 WAR 파일 형태로 WAS에 올릴 필요가 없다.

5). 내장된 WAS를 통한 손쉬운 배포
-> Spring Boot는 Apache Tomact이라는 WAS를 내장하고 있다.

즉, WAS를 구축할 필요가 없고, Spring Boot를 통해 빌드된 Jar파일을
명령어 한 줄만 입력해주면 서비스 가능한 웹 애플리케이션을 실행 할 수 있다.

WAS(Web Application Server)란 무엇?
Java 기반 웹 애플리케이션 배포 방식 -> 구현한 애플리케이션 코드 WAR파일
형태로 빌드한 후 WAS라는 서버에 배포해서 해당하는 애플리케이션을 실행함.
Java 진영에는 대표적인 WAS에 Tomcat이 있다.














그러면 Web Server와 Web Application Sever의 차이는
무엇일까? 라는 생각이 들었다.

가장 큰 차이점은
Web Server = 정적 컨텐츠(html,css,js…)를 처리함
Web Application Server = 동적 컨텐츠(Servlet, JSP)를 처리함
이 두가지가 가장 큰 차이라고 볼 수 있다.

이 외에 여러가지 내용들은 아래 주소를 참고해보자
Web Server, WAS 차이점 - 참고 레퍼런스 블로그


오늘은 스프링 프레임워크의 모듈 구성을 알기위한 아키텍처를
공부했고, Spring Boot가 무엇인지? 간단하게
배워보았다. 아마 이후에 CS지식은 실제로 스프링을 사용해본 후
공부해보면 조금더 쉽게 와닿지 않을까? 라는 생각이 든다.

오늘 공부는 여기까지!
나머지는 인프런에서 추가 학습을 해야겠다


오늘의 커피량: ☕️ ☕️ ☕️
오늘의 점심: 된장찌개, 햄, 밥