충남대 sw아카데미 특강을 정리한 포스팅입니다.
백엔드 커리큘럼
- 보편적으로 알고 있는 수준
- 객체지향
- 객체지향의 아버지 알란케이
- 객체지향 개념 자체는 절차지향 언어와 비슷하게 등장했다.
- C와 JAVA의 가장 큰 차이점 (~2000년대 까지)
백엔드 과정을 통해 이해해야 하는 개념
-
객체지향(Object-oriented) 기술
- 클래스/인터페이스 -> 타입(Type)
- 상속
- Subclassing/Superclassing
- DDD(Domain-driven-Design) / TDD (Test-Driven-Development)
- MVC(Model-View-Controller)
- MVVM(Model-View-ViewModel) -> SpringMVC기반
-
시스템/서비스 구분
- Front-end / Back-end
- Presentation Layer / Business Logic Layer / Business Object Layer Model
- 1-tier / 2-tier / 3-tier / N-tier…
- Middleware / WAS /Container / Framework
-
네트워크 프로그래밍
우리나라에서 프레임워크의 의미?
- 전자정부 프레임워크
- 행안부(행정안전부)의 NIA(정보화진흥원-> 한국지능정보사회진흥원)
- 주로 자바기반의 스프링 프레임워크 기반
- 일정 규모 이상의 프로젝트에서 사용 의무화(법제화)
Front-end / Back-end
- 백엔드는 왜 "백엔드"인가?
- 시스템/서비스 구분
- 눈에 보이는 프론트엔드와 보이지 않는 백엔드 2단계로 구분
- 현재는 Presentation Layer / Business Logic Layer / Business Object Layer 의 3단계로 구분
N-tier 시스템
서버 - 클라이언트가 몇 단계로 쪼개지느냐?
-
1-tier
- Web Browser(Client) - Apache WebServer(sever)
-
2-tier
- Web Browser - Web Server / DB client - DB Server
- JSP를 생각하면 이해가 쉽다.
- 실제 검색하는 내용은 db에 들어있지만 요청은 웹 서버에 한다.
- 웹서버가 요청 처리
-
3-tier
- Web Browser - Web Server / DB client - WAS Server / DB client - DB Server
- 트랜잭션/로드밸런싱, 장애대응, 로그취합, …
- 등을 WAS에서 제공
-
N-tier …
Spring
Presentation Layer / Business Logic Layer / Business Object Layer
-
스프링 프레임워크
- 비즈니스 로직을 프로그래밍하는 분산 컴포넌트 기반의 프레임워크
- DI(Dependency Injection) 기반 프레임 워크
-
스프링 MVC
- 표현계층 (Presentation Layer)을 담당하는 기술
- 표현계층에는 최대한 로직을 없애는 게 기본 룰
- SpEL(Spring Expression Language)를 사용해서 렌더링 (rendering)
- 프론트 컨트롤러 패턴 적용한 MVVM(Model/View/ViewModel) 사용
-
스프링부트
- 스프링 프레임워크에서 가장 어려운 설정 / DI관련 자동화 적용 -> 사용하기 쉽게 개선
- 자동차의 미션: 단수를 조절하는 역할
- 스프링부트 : 오토미션
- 스프링프레임워크 : 수동
-
스프링 JPA
- 비즈니스 오브젝트를 담당하는 프레임워크
- ORM(Hibernate) 계열의 기술과 SQLMapper(MyBaits) 계열의 기술로 쪼개짐
- db에 있는 테이블을 1대1 매핑
- 오브젝트를 만들면 테이블이 추가
- ORM이 JPA로 됨. 기본적으로 Hibernate
객체지향(Object-oriented) 기술
-
Exploit(착취)
- 보안 취약점
- 재정거래
- Ex) 게임의 아이템은 아이템 거래소마다 시세가 다르다. 시세 차이를 이용해서 이득을 보는 행위
- 객체지향의 배경
- 소프트웨어 위기 (Software crises)
- 디버깅
- 코드가 커지면서 디버깅 시간이 눈덩이처럼 커졌다.
- 디버깅 비중이 기하급수적으로 증가 -> 해결법 : 전역변수 캡슐화
- 객체지향
- 캡슐화 (encapsulation) -> ✔
- 전역변수 -> 캡슐화 (private으로 정의)
- getter/setter를 통해서만 접근
- 문제 발생 시 문제가 발생한 범위 압축
- 코드 재사용 (inheritance) -> 보완 필요
- 코드 재사용의 한계
- MS / 구글 등 소프트웨어를 직접 개발하는 개발자 -> 직접 만든 코드 재사용 가능
- IP (지적재산권) 코드 구할 수 없다면? -> 재사용 불가
- 그렇다면 코드가 공개가 안되면서도 재활용 가능한 방법은?
- 컴포넌트(conponent)!!!!!
- 스프링 -> MSA (Micro Service Architecture)
그렇다면 캡슐화 vs 상속 둘 중 무엇이 더 중요했을까?
=> 캡슐화가 메인, 상속은 따라온 것
객체지향과 컴포넌트을 구분할 수 있어야 한다!
객체지향의 등장 이래로 객체지향의 의미는 완전히 동일하지 않고 조금씩 바뀌어왔다.