🏷 자바 진영의 추운 겨울과 스프링의 탄생 옛날 옛적 이야기이니 편하게 듣기 !! 자바당 정파 기술 EJB : 2000년대 초반 기술, 종합 선물 세트같은 존재! : 이론은 너무 좋다 그러나 너무 비싸고 느리고 복잡하다😭 그래서 두 명의 개발자가 "이건 진짜 아
🏷 좋은 객체 지향 설계의 5가지 원칙(SOLID) 악덕 면접관에게 걸리면 면접 문제에도 나올 수 있다 😂 > SOLID : 클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 1) SRP 단일 책임 원칙(single reponsibilit
🏷 프로젝트 생성 지금까지 우리가 배운대로, 역할과 구현을 나누어서(인터페이스와 구현 객체를 나누어서), 개발을 해볼 건데, (스프링의 도움 없이)순수한 JAVA로만 개발해보겠다 😉 📌 사전 준비물 Java 11 설치 IDE: IntelliJ 또는 Eclipse
이번 시간에는 저번 시간에 만들었던 회원 도메인이 정상 동작하는 지 테스트를 해볼 예정😉 > 리뷰하고 갑시다 🤚🏻 ![](https://images.velog.io/images/sorzzzzy/post/a72b37c3-dc71-4f7c-8014-c77208a7f
🏷 새로운 할인 정책 개발 새로운 할인 정책을 확장해보자! 우리가 열심히 개발을 하고 있는데, 요구사항을 자꾸 변경하는 😡악덕기획자😡가 와서는, 서비스 오픈 직전에 할인 정책을 주문 금액당 퍼센트로 해주는 정률할인으로 변경해달라고 요구! 순진개발자 : 제가 첨
🏷 새로운 구조와 할인 정책 적용 드디어 이제! 새로운 할인 정책(정률 할인)으로 바꿔보자 ! FixDiscountPolicy ➡️ RateDiscountPolicy 우리는 이제 AppConfig만 변경하면 된다 우하하하하하😆 > * ⬇️ 사용, 구성의 분리*
🏷 스프링 컨테이너 생성 스프링 컨테이너가 어떤 식으로 생성이 되는 지 알아보자! 스프링 컨테이너는 new AnnotationConfigApplicationContext 으로 객체를 생성하면서, AppConfig를 파라미터로 넘기고, 반환 값으로 applicatio
🏷 스프링 빈 조회 - 상속 관계 부모 타입을 조회하면 자식 타입도 함께 조회된다. 자바는 기본적으로 모든 최상위 부모는 Object 이다. ApplicationContextExtendsFindTest.java 생성 ![](https://images.velog.i
🏷 웹 애플리케이션과 싱글톤 스프링은 태생이 기업용 온라인 서비스 기술을 지원하기 위해 탄생했다! 웹 어플리케이션은 보통 여러 고객이 동시에 요청을 한다. ⬆️ 이처럼 동시에 요청 요청이 올 때 마다 계속 객체를 만들어야 한다는 것이 문제점 우리가 만들었던 스프
🏷 컴포넌트 스캔과 의존관계 자동 주입 시작하기 역시 대단한 우리의 스프링은, 설정 정보 업시도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다👍🏻 이에 대해 알아보자 ❗️ ✔️ AutoAppConfig.java 생성 > 📌 참고 : 컴포
🏷 다양한 의존관계 주입 방법 의존관계 주입에는 크게 4가지 방법이 있다 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 1️⃣ 생성자 주입 생성자를 통해 의존관계를 주입 지금까지 우리가 진행했던 방법! 생성자 호출 시점에 딱 1번
🏷 조회 빈이 2개 이상 - 문제 스프링 빈 조회에서 학습했듯이, 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다. @Autowired 는 타입(Type)으로 조회한다. DiscountPolicy 의 하위 타입인 FixDiscountPolicy , R
🏷 빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 이번 시간에는 스프링을 통해 이러
🏷 빈 스코프란? 지금까지 우리는 스프링 빈이 스프링 컨테이너의 시작과 함께 생성되어서, 스프링 컨테이너가 종료될 때 까지 유지된다고 배웠다! 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. 스코프는 번역 그대로 빈이 존재할 수 있는 범위를 뜻함
🏷 웹 스코프 🏷 request 스코프 예제 만들기 🏷 스코프와 Provider 🏷 스코프와 프록시
🏷 인터넷 통신 인터넷에서 컴퓨터 둘은 어떻게 통신할까🤔? 정보를 전달하고 받아야 하는 컴퓨터가 가까이 있으면 상관없지만, 만약 멀리있다면? 인터넷 망을 통해 보내야 함! 그러나 이 인터넷이 호락호락 하지 않음,, 중간에 수많은 노드를 거쳐 반대편까지 안전하게 전
🏷 URI 🏷 웹 브라우저 요청 흐름
🏷 모든 것이 HTTP 🏷 클라이언트 서버 구조 🏷 Stateful, Stateless 🏷 비 연결성(connectionless) 🏷 HTTP 메시지
🏷 HTTP API를 만들어보자 🏷 HTTP 메서드 - GET, POST 🏷 HTTP 메서드 - PUT, PATCH, DELETE 🏷 HTTP 메서드의 속성
🏷 클라이언트에서 서버로 데이터 전송 데이터 전달 방식은 크게 2가지로 나눌 수 있다! 1️⃣ 쿼리 파라미터를 통한 데이터 전송 GET 사용 주로 정렬 필터(검색어) 2️⃣ 메시지 바디를 통한 데이터 전송 POST PUT PATCH 사용 회원가입, 상품주문, 리소
🏷 HTTP 상태코드 소개 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational): 요청이 수신되어 처리중 2xx (Successful): 요청 정상 처리 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요
🏷 HTTP 헤더 개요 HTTP 전송에 필요한 모든 부가정보를 헤더에 다 넣는다! 내용이 별 거 없군🤔 그런데! HTTP 표준이 바뀌면서 RFC723x 변화가 일어남❗️ 엔티티(Entity) ➡️ 표현(Representation) Representation =
🏷 캐시 기본 동작 ✔️ 캐시가 없을 때 ![](https://images.velog.io/images/sorzzzzy/post/48e5c04f-ad40-4723-9b45-a038a6656784/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%
🏷 웹 서버, 웹 애플리케이션 서버 클라이언트에서 서버로 데이터를 전송할 때, 서버에서 클라이언트로 데이터를 응답할 때 모두 HTTP 프로토콜에 기반해서 동작하게 됨! ✔️ 웹 서버(Web Server) HTTP 기반으로 동작하는 서버 정적 리소스, 기타 부가기능
🏷 프로젝트 생성 스프링 부트를 사용하면 환경설정도 편하고, 톰캣 서버를 내장하고 있기 때문에 일단 스프링 부트를 이용해 프로젝트를 만들지만, 거의 사용하지 않을 예정이다 ! 스프링 부트 스타터 사이트에서 프로젝트를 생성하는 부분은 이전에 여러번 다뤘기 때문에 이
지금부터 설명할 내용은 API 방식이다! (HTTP API든, Restful API든 기반이 되는 내용) 1️⃣ 단순 텍스트 2️⃣ JSON 🏷 HTTP 요청 데이터 - API 메시지 바디 - 단순 텍스트 HTTP message body에 데이터를 직접 담아서
🏷 회원 관리 웹 애플리케이션 요구사항 > ✔️ 회원 정보 이름 : username 나이 : age > ✔️ 기능 요구사항 1️⃣ 회원 저장 2️⃣ 회원 목록 조회 ✔️ 회원 도메인 모델 만들기 ✔️ 회원 저장소 만들기 ✔️ 회원 저장소 테스트코드 만들기 >
🏷 MVC 패턴 - 개요 🤷🏻♀️ 기존의 여러 문제들🤷🏻♀️ 1️⃣ 너무 많은 역할 하나의 서블릿이나 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 되면, 너무 많은 역할을 하게되고, 결과적으로 유지보수가 어려워진다. 2️⃣ 변경의 라이프사
이번에는 직접 MVC 프레임워크를 서블릿을 가지고 밑바닥부터 하나씩 만들어 갈 예정이다 🙂 🏷 프론트 컨트롤러 패턴 소개 ✔️ 프론트 컨트롤러 도입 전 ✔️ 프론트 컨트롤러 도입 후 ![](https://images.velog.io/images/sorzzzzy
🏷 단순하고 실용적인 컨트롤러 - v4 앞서 만든 v3 컨트롤러는 서블릿 종속성을 제거하고 뷰 경로의 중복을 제거하는 등, 잘 설계된 컨트롤러이다. 그런데, 실제 컨트톨러 인터페이스를 구현하는 개발자 입장에서 보면, 항상 ModelView 객체를 생성하고 반환해야
🏷 스프링 MVC 전체 구조 직접 만든 MVC 프레임워크 VS 스프링 MVC ![](https://images.velog.io/images/sorzzzzy/post/35b718ff-088b-480b-bf85-b0d1eaa52bd2/%E1%84%89%E1%85%B3%
🏷 프로젝트 생성 스프링 부트 스타터 사이트에서 프로젝트를 생성하는 부분은 이전에 여러번 다뤘기 때문에 이번에도!!!!! 과감히 넘어가겠다😅 ✔️ 프로젝트 선택 Project: Gradle Project Language: Java Spring Boot: 2.4
🏷 HTTP 요청 파라미터 - @ModelAttribute 실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다. 보통 아래와 같이 코드를 작성할 것이다! ⬆️ 스프링은 이 과정을 완전히 자동화해주는 @ModelAttrib
🏷 프로젝트 생성 스프링 부트 스타터 사이트로 이동해서 프로젝트 생성 ✔️ 프로젝트 선택 Project: Gradle Project Language: Java Spring Boot: 2.5.x ✔️ Project Metadata Group: hello Arti
🏷 프로젝트 생성 🏷 타임리프 소개 🏷 텍스트 - text, utext 🏷 변수 - SpringEL 🏷 기본 객체들 🏷 유틸리티 객체와 날짜 🏷 URL 링크 🏷 리터럴 🏷 연산 🏷 속성 값 설정 🏷 반복 🏷 조건부 평가 🏷
🏷 주석 1️⃣ 표준 HTML 주석 자바스크립트의 표준 HTML 주석은 타임리프가 렌더링 하지 않고, 그대로 남겨둔다. 2️⃣ 타임리프 파서 주석 타임리프 파서 주석은 타임리프의 진짜 주석이다. 렌더링에서 주석 부분을 제거한다. 3️⃣ 타임리프 프로토타입 주석
🏷 프로젝트 생성 스프링 부트 스타터 사이트로 이동해서 프로젝트 생성 ✔️ 프로젝트 선택 Project: Gradle Project Language: Java Spring Boot: 2.5.x ✔️ Project Metadata Group: hello Arti
🏷 프로젝트 생성 이전 프로젝트에 이어서 메시지, 국제화 기능을 학습해보자👍🏻 스프링 통합과 폼에서 개발한 상품 관리 프로젝트를 일부 수정해서 message-start_ 라는 프로젝트를 사용할 것이다_ 참고로 메시지, 국제화 예제에 집중하기 위해서 복잡한 체
🏷 검증 요구사항 상품 관리 시스템에 새로운 요구사항이 추가되었다 ✔️ 요구사항: 검증 로직 추가 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명: 필수, 공백X 가격: 1000원 이상, 1백만원 이하 수
🏷 오류 코드와 메시지 처리1 오류 메시지들도 일괄적으로 관리하면 편하다😊 ➡️ 어디서든 사용할 수 있기 때문에 지난 시간에 배웠던 메시지 기능을 생각해보며, errors 메시지 파일을 생성해보자❗️ ➡️ messages.properties 를 사용해도 되지만,
🏷 Bean Validation - 소개 검증 기능을 지금처럼 매번 코드로 작성하는 것은 상당히 번거롭다☹️ 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. ⬆️ 위 코드와 같이, 검증 로직
🏷 Bean Validation - groups 지난 시간에 발생한 문제를 해결하기 위해, 동일한 모델 객체를 등록할 때와 수정할 때 각각 다르게 검증하는 방법을 알아보자😀 1️⃣ BeanValidation의 groups 기능을 사용한다. 2️⃣ Item을 직접
🏷 로그인 요구사항 ✔️ 요구사항 홈 화면 - 로그인 전 회원 가입 로그인 홈 화면 - 로그인 후 본인 이름('누구'님 환영합니다.) 상품 관리 로그 아웃 보안 요구사항 로그인 사용자만 상품에 접근하고, 관리할 수 있
🏷 서블릿 필터 - 소개 ✔️ 공통 관심 사항 요구사항을 보면 로그인 한 사용자만 상품 관리 페이지에 들어갈 수 있어야 한다. 앞에서 로그인을 하지 않은 사용자에게는 상품 관리 버튼이 보이지 않기 때문에 문제가 없어 보인다. 그런데 문제는 로그인 하지 않은 사용자
🏷 프로젝트 생성 스프링 부트 스타터 사이트로 이동해서 프로젝트 생성 ✔️ 프로젝트 선택 Project: Gradle Project Language: Java Spring Boot: 2.5.x ✔️ Project Metadata Group: hello Arti
🏷 시작 API의 경우 어떻게 예외처리를 할까❓ ➡️ 오류 페이지는 단순히 고객에게 오류 화면을 보여주고 끝이지만, API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다! ✔️ 스프링 부트 기본 오류 처리 BasicEr