본문 바로가기

Spring

(10)
의존관계 주입 (DI) 1. 의존관계- 두개의 클래스 또는 모듈이 의존관계에 있다고 말할 때는 항상 방향성을 부여해줘야 한다.- 의존한다는건 A, B클래스와의 관계에서 B의 기능이 추가되거나 변경될 때, A에 영향을 미친다는 뜻ex) A에서 B의 메소드를 호출해서 사용할때- 방향성이 있다. 2. 의존관계 주입- 의존관계 주입은 구체적인 의존 오브젝트와 그것을 사용할 주체, 클라이언트라고 부르는 오브젝트를 런타임 시에 연결해주는 작업을 말함. 3. 의존관계 주입시 필요한 조건- 클래스 모델이나 코드에는 런타임 시점의 의존관계가 드러나지 않는다. 그러기 위해서는 인터페이스에만 의존하고 있어야한다.- 런타임 시점의 의존관계는 컨테이너나 팩토리 같은 제3의 존재가 결정한다.- 의존관계는 사용할 오브젝트에 대한 레퍼런스를 외부에서 제공..
Spring 이란 ? Spring스프링을 공부하는 도중에 도대체 스프링이 뭘까? 하는생각을 한번쯤 해본적 있을것이다.스프링은 도대체 무엇일까 ? 스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크이며 객체지향 프로그래밍 이다.  스프링 프레임워크- IoC 컨테이너, 애플리케이션 컨텍스트를 포함해서 스프링이 제공하는 모든 기능을 통틀어 말할 때 사용한다.스프링 컨테이너- 스프링컨테이너란 설정정보를 참고하여 애플리케이션을 구성하는 오브젝트를 생성하고 관리한다.여기서 말하는 오브젝트란 흔히 말하는 Bean 으로 등록되어지는 오브젝트이다.- 독립적으로 동작할수도 있다.- 웹 모듈에서 동작하는 서비스나 서블릿에 등록하여 사용한다. 빈 팩토리 (bean factory) - 스프링 IoC를 담당하는 핵심 컨테이..
Name for argument of type 에러 ( 매개변수 이름 인식의 문제) Tool : IntelliJ idea발생 상황  - 스프링 이니셜라이저로 프로젝트 생성후 간단한 RestController 에서 매개변수를 return 하여 화면에 반환하여 프로젝트 생성에 문제가 없는지 확인하려는 중에 발생에러 내용- Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag. 해결 방법@GetMapping("/hello")public String hello(String name){ return "Hello " + name;}1.  ..
서버사이드 렌더링(SSR), 클라이언트 사이드 렌더링(CSR) ● SSR - 서버사이드 렌더링 - HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달 - 주로 정적인 화면에 사용 - 관련기술 : JSP, 타임리프 -> 백엔드 개발자 ● CSR - 클라이언트 사이드 렌더링 - HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용 - 주로 동적인 화면에 사용, 웹 환경을 마치 앱 처럼 필요한 부분부분 변경할 수 있음 - ex) 구글 지도, Gmail, 구글 캘린더 - 관련기술 : React, Vue.js -> 웹 프론트엔드 개발자 ● 참고 - React, Vue.js를 CSR + SSR 동시에 지원하는 웹 프레임워크도 있음 - SSR을 사용하더라도, 자바스크립트를 사용해서 화면 일부를 동적으로 변경 가능 어디까지 알아야 하는지? ● 백엔드..
서블릿, 멀티 쓰레드 ● 서블릿 HTTP 요청시 - WAS는 Request, Response 객체를 새로 만들어서 서블릿 객체 호출 - 개발자는 Request 객체에서 HTTP요청 정보를 편리하게 꺼내서 사용 - 개발자는 Response 객체에 HTTP 응답 정보를 편리하게 입력 - WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보를 생성 ● 서블릿 컨테이너 - 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함 - 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리 - 서블릿 객체는 싱글톤으로 관리 1. 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율 2. 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용 3. 모든 고객 요청은 동일한 서블릿 객체 인스..
웹 어플리케이션 서버, 웹 서버 ● HTTP - http 메시지에 모든 것을 전송 1. HTML,TEXT 2. IMAGE, 음성, 영상, 파일 3. JSON, XML(API) 4. 거의 모든 형태의 데이터 전송 가능 5. 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 ● 웹 서버 - HTTP 기반으로 동작 - 정적 리소스 제공, 기타 부가기능 - 정적(파일) HTML, CSS,JS, 이미지, 영상 ex) NGINX, APACHE ● 웹 어플리케이션 서버 (WAS) - HTTP 기반으로 동작 - 웹 서버 기능 포함 + (정적 리소스 제공 가능) - 프로그램 코드를 실행해서 애플리케이션 로직 수행 1. 동적 HTML, HTTP API(JSON) 2. 서블릿, JSP, 스프링 MVC ex) 톰캣(Tomcat) Jetty, Under..
PSA(Portable Service Abstraction) PSA - PSA란 환경의 변화와 관계없이 일관된 방식의 기술로의 접근 환경을 제공하는 추상화 구조를 말한다. - POJO원칙을 철저히 따른 Spring의 기능으로 Spring에서 동작할 수 있는 Library 들은 POJO원칙을 지키게끔 PSA형태의 추상화가 되어있음을 의미한다. - PSA = 잘 만든 인터페이스 - PSA가 적용된 코드라면 나의 코드가 바뀌지 않고, 다른 기술로 간편하게 바꿀 수 있도록 확장성이 좋고, 기술에 특화되어 있지 않는 코드를 의미한다. - Spring에서는 Spring Web MVC, Spring Transaction, Spring Cache 등의 다양한 PSA를 제공한다. PSA를 사용하는 이유 - 서비스를 추상화함으로써 개발자가 실제 구현부를 알지 못하더라도 해당 기능을..
AOP(Aspect Oriented Programming) AOP - 흩어진 코드를 한 곳으로 모으는 코딩 기법 - 바이트 패턴과 프록시 패턴 사용 방법이 있음 - Spring AOP에서는 프록시 패턴을 사용 - 관점 지향 프로그래밍 - 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어보고 그 관점을 기준으로 각각 모듈화하겠다. ● 모듈화 : 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것 ● 핵심적인 관점 : 업무 로직을 포함하는 기능 ● 부가적인 관점 : 핵심 기능을 도와주는 부가적인 기능 - AOP에서 각 관점을 기준으로 로직을 모듈화 한다는 것은 코드들을 부분적으로 나누어서 모듈화 한다는 것 - 이때, 소스 코드 상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것을 흩어진 관심사라 부름 AOP의 특징 - 프록시 패턴 기..