| 자바 웹 프로그래밍
- 동적인 웹사이트를 만들기 위해서 과거부터 지금까지 아래와 같은 역사를 거쳐왔다.
CGI (Common Gateway Integerface) |
Servlet | EJB (Enterprise Java Beans) |
스프링 |
프로세스 단위 | 쓰레드 단위 | 비즈니스 로직을 포함 | 자바 기반 프레임워크 |
- CGI는 프로세스단위로 동적 페이지를 생성하기 때문에 자원의 효율성이 떨어졌기에
- Servlet을 통해 쓰레드단위로 동적 페이지를 생성하여 극복하고자 하였다.
- EJB는 여기에 데이터의 저장 및 수정 시의 안정성을 높이고 트랜잭션 처리 기능을 추가 한 것으로
안정적인 코딩을 가능해졌지만, 코드가 너무 복잡해서 테스트 코드를 생성하는 것도 어려웠다고 한다.
- 이때, Rod Johnson이라는 사람이 자반만의 쉬운 자바 웹 프로그래밍 방법을 담은 도서를 지필하면서,
개발자 사이에 해당 코딩이 붐을 이루었는데, 이 코드 방식을 아예 프레임워크로 만든 것이 오늘날의 스프링이라고 한다.
| 스프링과 SOLID 원칙
- 객체지향에 대해서 다루면서 SOLID에 대해서 배웠었다. 바로가기
- 스프링은 자체적으로 이 SOLID 원칙을 지키는 프로그래밍을 지원한다.
1. 스프링의 웹 MVC 3-tier 아키텍처 : SRP 지원(분류)
- SRP는 "하나의 클래스는 단일 책임을 지어야한다"는 원칙이다.(Single Responsibility Principle)
* SRP는 클래스의 응집도와 관련이 있으며,
전체 기능들이 확장되고 세분화될 수록 클래스 분류가 애매모호해지는 이슈가 생기는 걸 방지한다.
- 스프링은 아래와 같이 3개의 단계를 가진 아키텍처에 의해 만들어진 프레임워크이다.
- OSI 7-layer와도 유사한 형태로,
단계별로 역할을 나누어주어 클래스 역할이 더 명확해지고 코드파악이 더 쉬워지게 한다.
Presentation Layer |
Business Logic Layer |
Data Access Layer |
||
Controller Classes | Service Classes | |||
2. 스프링의 DI 컨테이너와 DI config - OCP, LSP, DIP 지원(교체)
- SOLID 중 DIP는 의존성 역전 원칙으로써, 하위 모듈간의 의존관계를 중간 인터페이스를 통해 해소할 것을 제안한다.
- 스프링에는 DI 컨테이너(의존성 주입 컨테이너, Dependency Injection Cotainer)가 있다.
- 더불어 DI 컨테이너 내에는 DI config가 존재하는데, DI config는 의존 클래스를 변경하는 설정(config)을 한다.
- 따라서 스프링을 사용하면 보다 쉽게 DIP를 지킨 코딩이 가능해진다.
| 스프링에 관한 참조 사이트
Google, Stackoverflow Baeldung https://www.baeldung.com/ Medium https://medium.com/ |
- 수업 시간에 평소 알고 있었던 구글 검색이나, 스택오버플로우 페이지 외에도 두 가지의 참조 사이트를 소개받았다.
- 처음 접하게 된 사이트들이어서 신기한 마음에 몇 가지 페이지들을 공유해보고 싶다.
- Baeldung의 Start Here페이지이다. 튜토리얼을 제공하고 있는데 일반 코스에서 시큐어 코딩, REST API까지 다룬다.
돈 주고 배워야 하는 내용들이 다 들어가 있다. 아름다운 사이트..
- Medium이라는 사이트는 일반 블로그 사이트같다. IT뿐 아니라 여러 분야를 다 섭렵하고 있는데,
[technoligies]인가 태그를 선택해 들어가보니, 아래처럼 IT 기술 관련된 포스팅이 많이 있었다.
신기한 건 TTS까지 제공해주고 있다는 거다. 진정한 의미의 웹 접근성 달성을 이룬 사이트다.
[ 참고 및 출처 ]
부트캠프 강의를 들은 후 배운 내용을 복습한 내용입니다.
'Framework > Spring' 카테고리의 다른 글
[스프링] 프로젝트 전 꼭 알아두면 좋은 것들 (0) | 2022.09.13 |
---|---|
[스프링] 스프링 MVC - 예외처리 (1) | 2022.09.11 |
[스프링] 스프링 MVC - 필터, 인터셉터 (1) | 2022.09.11 |
[스프링] 스프링MVC - HTTP 요청 및 응답 (1) | 2022.09.11 |
[스프링] 스프링의 주요기술 (0) | 2022.09.05 |