Web 50

김영한 Spring 핵심 원리 - 기본편 #4

#4 스프링 컨테이너와 스프링 빈 4.1 스프링 컨테이너 생성//스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); : 스프링 프레임워크의 핵심 컴포넌트 - ApplicationContext: 스프링 컨테이너, 인터페이스 - 스프링 컨테이너는 XML을 기반으로 만들 수 있고(잘 사용x), 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. - 기존의 AppConfig를 사용했던 방식: 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것 - ApplicationContext 인터페이스의 구현체: new..

Web/Spring 2023.05.14

김영한 Spring 핵심 원리 - 기본편 #3

#3 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 3.1 새로운 할인 정책 개발 서비스 오픈 직전에 할인 정책을 고정 금액 할인이 아니라 좀 더 합리적인 주문 금액당 할인하는 정률% 할인으로 변경 예) VIP가 10000원을 주문하든 20000원을 주문하든 항상 1000원을 할인 → 10%로 지정해두면 고객이 10000원 주문시 1000원을 할인해주고, 20000원 주문시에 2000원을 할인 > RateDiscountPolicy 코드 추가 src/main/java/hello.core/discount RateDiscountPolicy 자바 클래스 생성 후 아래 코드 작성 package hello.core.discount; import hello.core.me..

Web/Spring 2023.05.11

김영한 Spring 핵심 원리 - 기본편 #1

#1 객체 지향 설계와 스프링 1.1 스프링이란? 스프링은 여러 기술의 모음! > 필수 - 스프링 프레임워크: 스프링의 핵심 - 스프링 부트: 여러 기술을 편리하게 사용 > 선택 - 스프링 데이터: 스프링 데이터 JPA 가장 많이 사용 - 스프링 세션 - 스프링 시큐리티 - 스프링 Rest Docs: API 문서 편리하게 사용 - 스프링 배치 - 스프링 클라우드 - 핵심 기술: 스프링 DI 컨테이너, AOP, 이벤트, 기타 - 웹 기술: 스프링 MVC, 스프링 WebFlux - 데이터 접근 기술: 트랜잭션, JDBC, ORM 지원, XML 지원 - 기술 통합: 캐시, 이메일, 원격접근, 스케줄링 - 테스트: 스프링 기반 테스트 지원 - 언어: 코틀린, 그루비 → 최근에는 스프링 ..

Web/Spring 2023.05.09

김영한 Spring 입문 #7

# 7 AOP - AOP: Aspect Oriented Programming 7.1 AOP가 필요한 상황 - 모든 메소드의 호출 시간을 측정하고 싶다면? - 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) - 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? 예) 모든 메소드의 호출 시간을 측정해야 한다고 가정. → memberConrtoller, memberService, memberRepository 에 시간 측정 로직을 전부 작성하여야 한다. MemberService 회원 조회 시간 측정 추가 src/main/java/service MemberService에 다음 코드를 추가한다. package hello.hellospring.service..

Web/Spring 2023.05.06

김영한 Spring 입문 #6

# 6 스프링 DB 접근 기술 6.1 H2 데이터베이스 설치 > https://www.h2database.com/html/download-archive.html 1.4.200 버전 다운 테이블 생성 drop table if exists member CASCADE; create table member ( id bigint generated by default as identity, #값을 넣지 않아도 자동으로 id를 채워줌 name varchar(255), primary key (id) ); 테이블 확인 테이블에 값 넣기 insert into member(name) values('spring') insert into member(name) values('spring2') *hello-spring에 sql ..

Web/Spring 2023.05.06

김영한 Spring 입문 #5

#5 회원 관리 예제 - 웹 MVC 개발 - 홈 화면 추가 - 등록 - 조회 5.1 회원 웹 기능 - 홈 화면 추가 src/main/java/controller HomeController 파일을 만들고 다음 코드를 추가한다. package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller //스프링이 Controller를 찾은 후 home에 매핑 public class HomeController { @GetMapping("/") public String home() { return "ho..

Web/Spring 2023.05.05

김영한 Spring 입문 #4

#4 스프링 빈과 의존관계 4.1 컴포넌트 스캔과 자동 의존관계 설정 - 스프링 빈을 등록하는 2가지 방법 1) 컴포넌트 스캔과 자동 의존관계 설정 2) 자바 코드로 직접 스프링 빈 등록하기 먼저 컴포넌트 스캔과 자동 의존관계를 설정하는 방법으로 스프링 빈을 등록해 볼 것이다. -> MemberController 만들어야 한다 -> MemberService를 통해 가입하고 데이터를 조회할 수 있어야 한다 : MemberController가 MemberService를 의존한다. src/main/java/controller MemberController 파일을 만들고 다음 코드를 추가한다. package hello.hellospring.controller; import hello.hellospring.ser..

Web/Spring 2023.04.08

김영한 Spring 입문 #3

#3 회원 관리 예제 - 백엔드 개발 3.1 비즈니스 요구사항 정리 - 데이터: 회원ID, 이름 - 기능: 회원 등록, 조회 - 아직 데이터 저장소가 선정되지 않음(가상의 시나리오) - 컨트롤러: 웹 MVC의 컨트롤러 역할 / api 생성 - 서비스: 핵심 비즈니스 로직 구현 예) 회원은 중복가입이 안된다 -> 로직이 서비스 객체에 들어 있다. - 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 - 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리 - MemberRepository : 회원 저장(인터페이스로 설계) - 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 - 데이터 저장소는 RDB..

Web/Spring 2023.04.07

김영한 Spring 입문 #2

#2 스프링 웹 개발 기초 - 정적 컨텐츠: 서버에서 하는 것 없이 파일을 그대로 웹 브라우저에 내려주는 것 - MVC와 템플릿 엔진: 서버에서 html을 동적으로 변형해서 내려주는 방식 - API: Json이라는 데이터 포맷으로 클라이언트한테 데이터를 전달하는 방식 2.1 정적 컨텐츠 static 폴더 안에 html 파일 생성하고 다음과 같이 작성한다. 정적 컨텐츠 입니다. 1. 웹 브라우저에서 url을 입력하면 내장 톰켓 서버가 요청을 받는다. 2. 톰켓 서버가 스프링에게 요청을 넘긴다. 3. 먼저 controller 쪽에서 hello-static이 있는지 찾아본다.(=controller가 우선순위를 가짐) -> 있다면 반환 -> 없다면 resource로 가서 hello-stastic을 찾는다. ->..

Web/Spring 2023.04.06