Back-End/Inflearn 강의 30

[스프링 핵심 원리 - 기본편] 스프링 컨테이너와 스프링 빈

스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext를 스프링 컨테이너라 한다. ApplicationContext는 인터페이스이다. (다형성이 적용) 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다. 자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicationContext)를 만들어보자 new AnnotationConfigAppl..

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해2 - 객체 지향 원리 적용

새로운 할인 정책 개발 새로운 할인 정책이 생겼다고 가정 RateDiscountPolicy - class구현, implements DiscountPolict *자동 Test 생성 단축키 : ctrl + shift + T 새로운 할인 정책 적용과 문제점 할인 정책을 변경하려면 클라이언트인 OrderServiceImpl 코드 수정해야 함. //private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); 하지만 문제점이 있음 단순히 DiscountPolicy 인터페이스만 의존한다고 생각했지만.. 실제로는 클라이언트인 ..

[스프링 핵심 원리 - 기본편] 스프링 핵심 원리 이해1 - 예제 만들기

프로젝트 생성 간단한 생성 링크 : https://start.spring.io/ *tip : File > setting > Gradle > intelliJ로 설정해주기 비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용(나중에 변경될 수 있음) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수..

[스프링 입문] AOP

AOP가 필요한 상황 모든 메서드의 호출 시간을 측정하고 싶음 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core corcern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면? MemberService 회원 조회 시간 측정 추가 long start = System.currentTimeMillis(); try { validateDuplicateMember(member); //중복 회원 검증 memberRepository.save(member); return member.getId(); } finally { long finish = System.currentTimeMillis(); long timeMs = finish - start; System.out.printl..

[스프링 입문] 스프링 DB 접근 기술

H2 데이터베이스 설치 순수 Jdbc 스프링 JdbcTemplate JPA 스프링 데이터 JPA H2 데이터베이스 설치 > https://www.h2database.com/html/download-archive.html Archive Downloads www.h2database.com - h2 접속 시 경로 : ip대신 localhost라고 입력 - JDBC URL은 jdbc:h2:tcp://localhost/~/test : 파일에 직접 접근하는 것이 아닌 소켓을 통한 접근 순수 JDBC 고대의 선배님들이 쓰던 방법(편하게 들으면 됨) build.gradle implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'co..

[스프링 입문] 회원 관리 예제 - 웹 MVC 개발

회원 웹 기능 - 홈 화면 추가 홈 컨트롤러 추가 @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } 컨트롤러가 정적 파일보다 우선순위가 높다. 회원 웹 기능 - 등록 *@GetMapping : url에 직접 치면 , 조회 *@PostMapping : data를 form에 넣어 전달 회원 웹 기능 - 조회 memberService의 findMembers() 기능을 이용하기 참고한 강의 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%..

[스프링 입문] 스프링 빈과 의존관계

Member컨트롤러가 MemberService를 통해 회원 가입하고 회원 조회가 가능해야 함 MemberService선언 시 여러 개 선언할 필요가 없다 -> spring 컨테이너에 등록하고 사용하기 @Controller 스프링 빈으로 자동 등록됨 @Autowired MemberService를 스프링이 스프링 컨테이너에 있는 걸 가져다가 연결시켜줌 사용하기 위해서 MemberService.java에 @Service를 넣어줌 -> 스프링 컨테이너에 서비스로 등록 Repository도 마찬가지로 @Repository를 선언해줌 스프링 빈을 등록하는 2가지 방법 컴포넌트 스캔과 자동 의존관계 설정 자바 코드로 직접 스프링빈 등록하기 1. 컴포넌트 스캔과 자동 의존관계 설정 @Component 애노테이션이 있으..

[스프링 입문] 회원 관리 예제 - 백엔드 개발

1. 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음(가상의 시나리오 : 성능이 중요한 DB로 선정 or 일반적인 관계형 DB로 선정 or NoSQL로 선정) 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 - 서비스 클래스에 핵심 비즈니스 로직이 들어가 있다(ex> 회원은 중복 가입이 안됨) 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB..

[스프링 입문] 스프링 웹 개발 기초

1. 정적 컨텐츠 서버에서 하는 일 없이 파일 그대로 웹브라우저에 내려주는 것 원하는 파일을 넣으면 그대로 반환 2. MVC와 템플릿 엔진 서버에서 html 변형을 해서 웹 브라우저에 내려주는 것 MVC : Model, View(화면을 그리는), Controller(비지니스 로직과 관련 내부적인 것을 처리하는 것에 집중) @RequestParm ex) @RequestParm("name")이면 localhost:8080/hello-mvc?name=spring!처럼 넘겨줘야함 3. API json이라는 포멧으로 클라이언트에 내려주는 것 @ResponseBody : http에서 body부에 return 값을 직접 출력하게됨. 객체를 반환하면 객체가 JSON으로 변환됨 HTTP의 BODY에 문자 내용을 직접 반..

프로젝트 환경설정

1. 라이브러리 살펴보기 Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 Gradle이나 Maven 같은 빌드 툴들은 의존관계를 관리해준다. 예를 들어, spring-boot-starter-web 라이브러리를 댕기면(?) 이 라이브러리에서 필요한 spring-boot-starter-tomcat 등등의 라이브러리도 가져옴. 스프링 부트 라이브러리 spring-boot-starter-web spring-boot-starter-tomcat : 톰캣 (웹 서버) spring-webmvc : 스프링 웹 MVC spring-boot-starter-thymeleaf : 타임리프 템플릿 엔진 (View) spring-boot-starter(공통) : 스프링 부트 + 스프링 코어 + 로깅 spring-boot ..