정적 컨텐츠는 클라이언트의 요청을 받고 서버에서 어떠한 동작을 하는 것이 아닌, 저장된 HTML 파일을 전달해주는 것을 말한다.웹브라우저에서 요청이 들어오면 스프링 컨테이너에서 해당하는 Controller를 찾고 존재하지 않는다면 resources:static 하위에서
객체 관리를 주로 수행하며 빈의 생성, 관계, 사용, 생명 주기 등을 관장한다. 객체를 사용하기 위해 new생성자나 인터페이스 호출, 팩토리 호출 방식을 이용했지만 하나의 어플리케이션에는 이렇게 만들어진 무수한 객체가 존재하고 객체들은 서로 참조하고 있다. 참조의 정도
java11, spring boot(2.7.11), mySQL(8.0.30), gradle(7.6.1)의존성에 mySQL Driver, Spring Data API를 추가(아래는 spring web, JDBC까지 추가한 상태)
APPLICATION FAILED TO STARTDescription:An attempt was made to call a method that does not exist. The attempt was made from the following location:The
EC2에 Springboot를 배포하려 하는데 계속하여 서버가 터지는 문제가 발생하였다.DB연결에도 문제가 없고 로컬에서는 정상적으로 작동하여 FileZilla를 이용해 EC2에 jar파일만 배포하기로 하였다.jar 파일 생성을 위해 intelliJ에서 build를 하
JPA는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음➡️ 구현된 클래스와 매핑을 위해 사용되는 프레임워크객체와 DB테이블을 매핑하여 데이터를 객체화하는 기술SQL문의 수행 결과를 매핑하는 것이 아니라 D
일반적으로 Java Application은 웹, 비즈니스, 데이터 등 여러 계층으로 응용 프로그램을 개발한다.로직을 관점에 따라 공통 관심 사항(cross-cutting concern)과 핵심 관심 사항(core concern)으로 나눌 수 있고핵심 관심 사항은 우리가
🌱 Spring 🟦 스프링의 핵심 스프링은 Java 언어 기반의 프레임워크 ➡️ Java 언어의 가장 큰 특징은 객체 지향 언어라는 것 ➡️ 스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크 ➡️ ❗좋은 객체 지향 애플리케이션을 개발할
MemberServiceImpl은 추상체 MemberRepository와 구현체 MemoryMemberRepository 모두에 의존
구현 객체는 자신의 로직을 실행하는 역할만 담당구현 객체는 필요한 인터페이스들을 호출하지만 어떤 구현 객체들이 실행될지 모름프로그램의 제어 흐름은 AppConfig가 소유프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부(DI 컨테이너 or IoC 컨테이너)에서 관
ApplicationContext를 스프링 컨테이너라 함AppConfig를 사용해서 직접 객체를 생성하고 DI를 하지 않고 스프링 컨테이너를 통해 수행스프링 컨테이너는 @Configuration 어노테이션이 붙은 AppConfig를 설정 정보로 사용@Bean 어노테이션
🔹 모든 자바 객체의 최상위 부모는 Object위와 같은 테스트를 수행하면 스프링에 등록된 모든 빈이 출력된다.인프런 스프링 핵심 원리 - 기본편 (김영한) 참조
ApplicationContext는 BeanFactory를 상속AnnotaionConfigApplicationContext는 ApplicationContext의 구현체🔹 스프링 컨테이너의 최상위 인터페이스🔹 스프링 빈을 관리하고 조회하는 역할🔹 BeanFactor
웹 어플리케이션 - 고객이 계속 요청, 여러 고객이 동시에 요청문제점 : 요청이 올 때마다 DI 컨테이너는 객체를 계속 생성 ➡️ 메모리 낭비가 심함해결방안 : 해당 객체를 1개만 생성하고 이를 공유하도록 설계 (싱클톤 패턴)클래스의 인스턴스가 오직 1개만 생성되는 것
스프링 컨테이너 ➡️ 싱글톤 레지스트리 ➡️ 스프링 빈이 싱글톤이 되도록 보장아래 코드를 보면 memberService와 orderService를 호출하면 memberRepository가 세번 호출될 것으로 보인다. (스프링 빈에 등록할 때 1번 호출 포함)그러나 실제
등록해야 할 스프링 빈이 많다면 @Bean 어노테이션을 통해 일일이 등록하기에는 매우 비효율적➡️ 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능 제공컴포넌트 스캔을 사용하려면 @ComponentScan 어노테이션을 설정 정보에 붙여
🔹 @Component -> 컴포넌트 스캔에서 사용🔹 @Controller -> 스프링 MVC 컨트롤러에서 사용스프링 MVC 컨트롤러로 인식🔹 @Service -> 스프링 비즈니스 로직에서 사용🔹 @Repository -> 스프링 데이터 접근 계층에서 사용스프링
🔹 생성자 주입🔹 수정자(setter) 주입🔹 필드 주입🔹 일반 메서드 주입생성자를 통해서 의존관계 주입생성자 호출 시점에 1번만 호출되는 것 보장주로 불변, 필수 의존관계에 사용( (스프링 빈)생성자가 1개만 있을 때 -> @Autowired 생략해도 의존 관
애플리케이션 시작 시점에 필요한 연결 미리 수행, 종료 시점에 연결을 모두 종료➡️ 객체의 초기화와 종료 작업 필요➡️ 스프링을 통해 초기화 작업과 종료 작업 가능스프링 빈은 객체 생성 ➡️ 의존관계 주입 의 라이프사이클을 가짐(단, 생성자 주입은 객체 생성하면서 의존
말 그대로 빈이 존재할 수 있는 범위🔷 싱글톤기본 스코프스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프🔷 프로토타입프로토타입 빈의 생성과 의존관계까지만 관여초기화 메서드까지 호출하고 끝, 종료 메서드 호출 ❌매우 짧은 범위의 스코프🔷 웹 관련
🔹 HTTP 기반으로 동작🔹정적 리소스, 기타 부가 기능 제공🔹 ex) NGINX, APACHE특정 폴더에 정적(파일) HTML, CSS, JS, 이미지, 영상 등을 두고 HTTP 프로토콜로 데이터를 주고 받음 🔹 HTTP 기반으로 동작🔹 웹 서버 기능(정적
클라이언트가 서버로 요청보냄TCP/IP 커넥션 연결servlet 호출WAS가 응답🔹 애플리케이션 코드를 순차적으로 실행시킴🔹 쓰레드가 없다면 자바 애플리케이션 실행 불가능🔹 쓰레드는 한번에 하나의 코드 라인만 수행🔹 동시 처리가 필요하면 쓰레드 추가로 생성해야함
정적 리소스 어떻게 제공할지동적으로 제공되는 HTML 페이지 어떻게 제공할지HTTP API 어떻게 제공할지HTML 파일, CSS, JS, 이미지, 영상 등 제공(웹서버에서 폴더에 있는 이미 생성된 파일들 제공)WAS가 DB를 통해 정보 조회한 후 동적으로 HTML을 생
화면이 계속 달라지는 회원의 저장 결과 or 회원 목록같은 동적인 HTML을 만드는 것을 불가능동적으로 원하는 HTML 만들 수 있음자바코드에 HTML을 넣어 만듦 ➡️ 매우 복잡하고 비효율적HTML문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있음 필
하나의 서블릿 or JSP를 통해 비즈니스 로직과 뷰 렌더링을 모두 처리➡️ 역할이 과중됨➡️ 유지보수의 어려움비즈니스 로직과 UI의 변경 라이프 사이클이 다름 (변경 주기가 다르면 분리!)UI를 수정하는 일과 비즈니스 로직을 수정하는 일은 각각 다르게 발생할 가능성이
클라이언트가 요청을 하면 항상 공통 로직 + 컨트롤러 로직을 모두 호출해야 함(클라이언트의 요청이 오면 서블릿 매핑으로 해당 로직을 직접 호출)공통 로직을 처리하는 서블릿 하나를 두고 그 서블릿을 통해 필요한 컨트롤러 로직을 호출하도록 함( 공통 로직을 처리하는 서블릿
스프링 MVC ➡️ 프론트 컨트롤러 패턴으로 구현스프링 MVC의 프론트 컨트롤러 ➡️ DispatcherServletSpringBoot는 DispatcherServlet을 서블릿으로 자동 등록 + 모든 경로에 대해서 매핑
인프런 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (김영한) 참조
xmlns:th="http://www.thymeleaf.org"HTML의 속성을 th:xxx로 변경, 기존 HTML 속성값이 없다면 새로 생성th:xxx가 붙은 부분은 서버사이드에서 렌더링 됨➡️ 기존 HTML 속성을 대체HTML 파일을 직접 연다면 th:xx
final이 붙은 멤버 변수만 사용해서 생성자를 자동으로 생성해당 빈의 의존관계가 모두 주입되고나면 초기화 용도로 호출테스트 데이터를 넣기 위해 사용
일시적인 리다이렉션이 꼭 필요한 경우에 사용POST로 주문 후에 웹 브라우저를 새로고침하면 중복 주문 발생 가능웹 브라우저의 새로고침은 마지막에 서버에 전송한 데이터를 다시 전송하는 것상품 구매 후에 새로고침을 선택하면 마지막에 전송한 POST /buy + 상품 데이터
인프런 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (김영한) 참조
➡️ 프로젝트 진행에 있어서 API의 응답을 통일하는 것은 필수ex) 클래스명 : ApiResponse@JsonPropertyOrder -> Jackson 애노테이션, JSON 속성의 순서 지정@JsonProperty("name") -> JSON에서 해당 속성의 이름