싸피(SSAFY)/싸피(SSAFY)일지

럭키 7기 SSAFY인의 하루(Spring, SpringBoot 그리고 Rest API)

Chaany 2022. 4. 27.
728x90

스프링 프레임워크

  • 빨래하는 방법의 변화/전환**(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
    Tier
    • 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 내용 볼 수 있음
728x90

댓글