스프링 프레임워크
- 빨래하는 방법의 변화/전환**(Paradigm의 변화/전환)**
- 개발자가 직접 관여하여 구현을 하였음
- 노하우/패턴이 생기기 시작
- IoC/DI(XML, Java를 통한 환경설정 필요)
- 의존관계 주입
- IoC/DI
- AOP : Aspect Oriented Programming → Concern 분리
- M - Model : DB CRUD
- V - View : JSP
- C - Controller : Servlet(C7)
- redirect : 경로 바뀜 O, 화면 바뀜 O, 객체 전달 X
- forward : 경로 바뀜 X, 화면 바뀜 O, 객체 O
- Facade 패턴
- Controller 여러번 호출, 객체 여러번 생성 → 싱글톤 패턴으로 해결
- Dao
- FactoryPattern
- JSP
- Semantic
- @include : tiles
- SiteMesh : Decorator Pattern
- 소스 증가 법칙 → 2^n
- Framework
- struts/with EJB[2003~2008]
- spring/with out EJB[2008~]
- MyBatis, Hibernate, JPA
- Semantic
- Client Tier
- Presentation Layer
- View
- Controller(PL과 BL의 사이)
- Server TIer
- Business Layer**(client와 server Tier의 어딘가)**
- Service
- Enterprise Infrastructure Tier(EIS)
- Data Layer**(Persistence→센세이셔널함→ ORM: 하나의 빈이 영속성을 가짐-객체와 DB행이 하나의 효과를 냄)**
- DAO
- POJO/OCP → @Component
- 상속, 확장 X → 의존확장
- 계층 구조 X → 의존
- 패턴 X → 의존
- LifeCycle X → 의존
- EJB, Servlet<<Servlet>> - init(), service(), destroy()
- GenericServlet- init(), destroy() → abstract
- HTTPServlet → service(){doGet(), doPost()}
- MyServlet → doGet(o,o){}, doPost(o,o){}
- EJB
- Session빈 - Logic
- Entity빈 - DataBase → Cmp빈, bmp빈
- Message Driven빈 - 비동기처리
DBMS - Connection Pooling-Datasource( SQL - DTO ) - SqlSessionFactory - SqlSession / JNDI / Dao @Repository -@Service Business Logic - (bottom → Up)
“Welcome” - Web.Xml(DD) - SpringContextLoaderListener - DispatcherServlet - CharaterEncodingFilter - root-context.xml(Model, AOP), servlet-context(View, Controller) - Dispatcher Servlet(C3) - @Controller(C4)(Handler Mapper[@RequestMapping]이 딸깍) - service ~(Top - down)
@Component + @Bean
- @Controller, Sevice, Repositoy
@Autowired
- 강제 DI
JNDI(Java Naming and Directory Interface)는 디렉터리 서비스에서 제공하는 데이터 및 객체를 발견(discover)하고 참고(lookup) 하기 위한 자바 API다.
JNDI는 일반적으로 다음의 용도로 쓰인다:
자바 애플리케이션을 외부 디렉터리 서비스에 연결 (예: 주소 데이터베이스 또는 LDAP 서버)자바 애플릿이 호스팅 웹 컨테이너가 제공하는 구성 정보를 참고
Restful(Frontend - Backend)
- Get - Select
- Post - Insert
- Put(전체 업데이트) - Update
- Patch(부분 업데이트) → 찾아서 고치느라 사실상 put이나 시간 비슷 - Update
- Delete - Delete
RequestBody
- JSON → DTO
ResponseBody(JacksonBinder)
- DTO → JSON
PathVariable
- { }를 인자로 사용
RequestParam
- key = value
DTO
@ModelAttribute
JSTL, EL ${a, b, c}
OGNL - 멤버필드는 소문자로 name → getName() - https://blog.naver.com/ssong24/66954999
Service
@Transactional → All or Noting
DTO를 SQL로 줄 때 #{userid}
SQL을 DTO로 줄 때 - column - alias, map
${key} = #{value} → Mybatis
Pooling
- 체계적 관리
- 시간 단축(큐로 관리)
service trhows XXX → throw XXX → @ControllerAdvice(CUD) → xxx, jsp(예외,에러처리)
반복
→ menu @include
→ session ⇒ Interceptor
@Controller + ResponseBody = @RestController
Frontend ↔ Backend
- HTML + DATA 사용과 제공하는주체가 다를 - Cross Domain → @CrossOrigin
비동기(ajax)
- XHR(Vue: Axios)
- Trip Around(Text ↔ Text : HTTP이기 때문)
- XHR요청 → DS → Json(Jackson Binder)으로 감싸주기(Interface(Get/Post/Put/Delete)) → Service → Bean → Dao → Select/Insert/Update/Delete
- EJB, VB, C# → XML WebService ← UDDI(API 묶어둔 곳)
- Swagger → API 명세
SpringBoot
- mapper
- resultMap - 테이블이름과 필드명이 다를 때 바꿔줌
- resultMap 안 쓸거면 알리아스 쓰기
- swagger에서 execute 후 curl 복사 cmd 붙여넣기 하면 json 내용 볼 수 있음
'싸피(SSAFY) > 싸피(SSAFY)일지' 카테고리의 다른 글
럭키7기 SSAFY인의 하루(알고리즘 평가, 그리고 Spring) (0) | 2022.04.22 |
---|
댓글