✅ 특정 프레임워크나 라이브러리에 종속되지 않는 단순하고 순수한 자바클래스(Plain Old Java Object)
순수성, 원자성, 다른 이종간의 결합에서 다양하게 사용할 수 있는 장점이 있음.
왜 프레임워크, 라이브러리를 안 쓰려고 하지?
인터페이스 구현, 클래스 상속같은 제약에서 벗어날 수 있음. (자유롭게 필요한 속성, 메소드 작성 가능)
코드의 가독성과 유지 보수성 높아짐
단위 테스트를 하기 쉬운 구조!
POJO는 특별한 규칙 없이 만들어진 평범한 자바 객체를 의미해. 설정이나 복잡한 요구사항 없이 간단한 객체를 만들어서 사용할 수 있어 편리해.
✅ 스프링은 POJO를 기반으로 구축된 경량 프레임워크다. POJO를 활용한 앱 개발, 기능을 제공하며 의존성주입(DI), 제어역전(IoC)와 같은 핵심적인 기능을 제공한다.
스프링이 POJO를 어떻게 활용하는데? POJO를 활용하여 빈(Bean)을 정의하고 관리하여 애플리케이션을 구축한다.
의존성을 주입한다? 스프링은 의존성을 주입해서 POJO를 관리하고, 객체 간의 의존성을 느슨하게 만들어 준다. 쉽게 말하면 내가 어떤 객체가 필요할 때 그 객체를 만들어 넣는 것이 아니라 다른 곳에서 이미 준비되어 있는 객체를 주입받아서 사용하는 것을 말한다.
제어역전? 마치 리모콘으로 tv채널을 변경하듯 편리하게 원격으로 조종하듯이 스프링이 제어를 우리에게서 가져가서(역전해서) 객체들을 쉽게 관리하고 제어할 수 있도록 도와줘
스프링의 부가기능 : AOP(관심사에 따른 분리 관리), 트랜잭션 관리(논리단위의 처리), 보안(높은 보안성), MVC웹 애플리케이션 구축
"스프링은 자바 기반의 애플리케이션을 만들고 관리하는데 도움을 주는 프레임워크랍니다."
✅ IoC(Inversion Of Control) 객체에 대한 제어를 의미
한 객체 안에서 다른 객체의 메소드를 호출하거나 지변으로 접근할 때 두 객체가 연결되어 있다는 것
결합도? 소프트웨어 코드의 요소가 다른 것과 얼마나 강력하게 연결되어 있는지 나타내는 척도
클래스 결합도 낮춰서 독립적으로 만듦
속성 객체, 로컬객체, 파라미터 객체, 반환객체 결합(getConnection():Connection), 상속 결합, 인터페이스 결합
A a = new A() : 결합도 높음
Calendar cal = Calendar.getInstance() : 결합도 낮음.
IoC(Inversion of Control, 제어 역전)은 스프링이 객체를 우리 대신 관리하고 필요할 때 우리에게 제공하는 개념이에요. 객체를 직접 다루지 않아도 편리하게 사용할 수 있어요.
왜 의존관계를 주입하지?
의존관계를 인터페이스로 추상화하게 되면, 더 다양한 의존 관계를 맺을 수가 있다.
실제 구현체 클래스와의 관계가 느슨해지고, 결합도가 낮아진다.
재사용성 높은 코드가 된다.
가독성이 좋아진다.
quote
Dependency Injection 의존관계 주입(오리 예제를 생각해보자 🦆)
DI(의존관계 주입)는 객체가 의존하는 또 다른 객체를 외부에서 선언하고 이를 주입받아 사용하는 것이다.
이를 구현함으로써 얻을 수 있는 장점들을 알아봤다.
1에서 ActionForward(클래스), 2에서 String 으로 리턴타입을 받아서 응답을 처리했다면? 3에서는 Object로 변경하여 처리해보고자 한다
왜? ModerAndView, 상위버전인 Model(스프링에서 UI지원하기 위해 제공되는 클래스)를 실험해보고자 함.
분명, 프레임워크, 라이브러리에서 지원되는 걸 바로 쓰면 당장은 쉽고 편하지만, 그 과정에 대한 이해가 없는 상태에서 기능을 지원하는 것을 쓰는 것은 독이될 수도 있음.
하나, 직관적이지 않던 If문을 전담하는 클래스를 따로 구성함 이런 클래스를 프레임워크가 지원해줌(F/W설계하는 사람이 정한 약속 - 컨벤션)
둘, 컨트롤 클래스에서부터 메소드를 정의한다. 반드시 Req, res를 지원하는 메소드여야 한다. (이전에는 메소드는 로직에 가서야 있었나?) -> 픙상힌 표현력 생길 수 있음!
✅ 웹 애플리케이션을 개발하는 데 사용되는 소프트웨어 디자인 패턴으로 모델, 뷰, 컨트롤러로 나뉜다.
MVC의 개념 설명:
Model: 애플리케이션의 데이터를 나타내며, 비즈니스 로직을 처리합니다. 데이터베이스와 상호작용하여 데이터를 가져오고 처리합니다.
View: 사용자에게 보여지는 부분으로, 화면(UI)을 나타내며 사용자와 상호작용합니다.
Controller: 모델과 뷰를 연결하고 사용자 입력을 처리하여 모델을 업데이트하거나 뷰를 변경합니다. 클라이언트의 요청을 처리하고 적절한 응답을 반환합니다.
MVC의 특징:
분리된 역할: 모델, 뷰, 컨트롤러가 각각의 역할을 가지고 있어 유지보수와 확장이 용이합니다.
재사용성: 각 요소를 분리함으로써 코드의 재사용성을 높입니다.
확장성: 각 부분을 독립적으로 개발하여 쉽게 확장할 수 있습니다.
"웹 개발에서 화면, 데이터 처리, 사용자 요청을 각각 분리하여 관리하는 구조를 MVC라고 해요."
localhost:8000/baord2/baordList.gd3
ActionSupport.java
Controller3.java(I-추상메소드 6개)
- jsonBoardList : String(data-Gson g = new Gson() String temp = g.toJson(List))
json(application-2진수/json) - reactJS와 사용 가능, 가벼움
- boardList : ModelAndView -> Object
- baordDetail : List 1건 -> 조회수 cnt = cnt + 1 update +select
if(result == 1) update 할 것 - 조회수
- boardInsert : int -> Object 왜 int? 한 건 또는 0건이니까
- boardUpdate : int
- boardDelete : int
Board2Controller.java : Controller3의 구현체 클래스! ###
HandlerMapping
- 서블릿에 다 포함되어있던 if문의 불편함, 직관적이지 않은 부분 따로 분리하여 처리
- 인터페이스를 통해 XXX.controller를 생성
- 왜?? 다형성 - 같은 이름 메소드라도 기능이 다르게 하여 결합도를 낮춰줌!!
로그인 과정
사용자 클라이언트측 - Jsp 페이지 요청 상태 - 이 페이지에 로그인 버튼 이미지 붙임 - 이미지를 클릭하면 카카오 로그인 요청- 인가코드받기 요청 - 인증 및 동의 요청 - 로그인 및 동의 - 인가코드 발급 - {웹에 등록된 redirect uri로 요청}- 인가코드로 토큰 발급 요청 - 토큰 발급 -카카오 로그인 완료
Rest API(https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api)
Rest API가 뭐였지?
✅ REST 기반으로 서비스 API를 구현**한 것
최근 OpenAPI(누구나 사용할 수 있도록 공개된 API: 구글 맵, 공공 데이터 등), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.
참고 리소스 원형
도큐먼트 : 객체 인스턴스나 데이터베이스 레코드와 유사한 개념
컬렉션 : 서버에서 관리하는 디렉터리라는 리소스
스토어 : 클라이언트에서 관리하는 리소스 저장소
REST API란, 웹 서비스에서 자원을 간단한 URL을 통해 표현하고, HTTP 메서드를 사용하여 해당 자원에 대한 요청을 처리하는 인터페이스이며, 네트워크를 통해 서로 다른 시스템들이 효율적으로 통신할 수 있도록 해주는 것이야.