- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 3) 스프링 핵심 원리 이해2 - 객체 지향 원리 적용2023-10-18 18:21:27스프링 핵심 원리 - 기본편 Session 3 스프링 핵심 원리 이해 2 - 객체 지향 원리 적용 1. 새로운 할인 정책 개발 1) 새로운 할인 정책 정액 할인에서 정률 % 할인 정책으로 변경 회원 등급이 VIP인 경우 10% 할인 FixDiscountPolicy에서 RateDiscountPolicy로 변경 2. 새로운 할인 정책 적용과 문제점 1) 문제점 역할과 구현을 충실하게 분리, 다형성도 활용하고 인터페이스와 구현 객체도 분리했으나 DIP, OCP 같은 객체 지향 설계 원칙을 위배 DIP : 주문 서비스 클라이언트는 추상(인터페이스)뿐만 아니아 구현 클래스에도 의존 OCP : 기능을 확장해서 변경하면 클라이언트 코드에 영향 있음 public class OrderServiceImpl implemen..
- [ 공부/Spring ][Spring] 스프링 핵심 원리 기본편 2) 스프링 핵심 원리 이해12023-10-18 12:04:00스프링 핵심 원리 - 기본편 Session 2 스프링 핵심 원리 이해 1 - 예제 만들기 1. 비즈니스 요구사항과 설계 1) 회원 회원 가입하고 조회가능 회원 등급은 일반과 VIP 두 가지 회원 데이터는 자체 DB 구축할 수 있고, 외부 시스템과 연동할 수 있다(미확정) 2) 주문과 할인 정책 회원은 상품 주문 가능 회원 등급에 따라 할인 정책 적용 가능 할인 정책은 VIP는 1000원 할인해 주는 고정 금액 할인 적용(나중에 변경될 수 있음) 할인 정책은 변경 가능성 높음, 기본 할인정책 미정상태고 최악의 경우 할인을 적용하지 않을 수도 있음 ▶ 할인 정책이 미정이기 때문에 인터페이스를 만들고 구현체로 언제든지 변경 가능하게 설계 2. 회원 도메인 설계 1) 회원 도메인 요구사항 회원 가입하고 조회가능..
- [ 공부/Spring ][Spring] 스프링 입문 7) AOP2023-10-15 23:00:24스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 7 AOP 1. AOP가 필요한 상황 1) AOP가 필요한 상황 회원가입과 같은 로직은 핵심 관심사항, 시간 측정과 같은 로직은 공통 관심 사항이라고 함 공통 관심 로직이 핵심 비즈니스 로직과 섞이면 유지보수가 어렵다. 공통 관심 로직을 별도의 공통 로직으로 만들기 매우 어렵고 로직을 변경할 때 모든 로직을 찾아가며 변경해야함 ▶ 이러한 문제점을 해결하기 위해 AOP를 적용 2. AOP적용 1) AOP(Aspect Oriented Programming) 공통 관심사항과 핵심 관심 사항을 분리 2) 시간 측정 AOP 작성 @Aspect // AOP 적용 @Component // 스프링 빈으로 등록하기위해 componentScan방식 사..
- [ 공부/Spring ][Spring] 스프링 입문 6) 스프링 DB 접근 기술2023-10-15 22:03:19스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 6 스프링 DB 접근 기술 1. 순수 JDBC 1) 환경설정 build.gradle에 jdbc, h2 데이터베이스 관련 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' application.properties에 데이터베이스 연결 설정 추가 spring.datasource.url=jdbc:h2:tcp://localhost/~/test spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=sa 2) JDBC 리포..
- [ 공부/Spring ][Spring] 스프링 입문 5) 회원 관리 예제 - 웹 MVC 개발2023-10-14 17:06:20스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 5 회원 관리 예제 - 웹 MVC 개발 1. 회원 웹 기능 - 홈 화면 추가 1) 홈화면 추가 @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } localhost:8080 주소로 들어가면 homeController의 home()이 호출이 되고 home.html을 웹브라우저에게 전달 ▶ 컨테이너에서 관련 컨트롤러를 찾고 없으면 static 페이지, 있으면 컨트롤러가 호출되기 때문에 home.html이 뜬다 2. 회원 웹 기능 - 등록 1) 회원 등록 폼 memberController에 추가 // 등록 화면으..
- [ 공부/Spring ][Spring] 스프링 입문 4) 스프링 빈과 의존관계2023-10-14 16:37:15스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 4 스프링 빈과 의존관계 1. 컴포넌트 스캔과 자동 의존관계 설정 멤버 컨트롤러가 멤버 서비스를 통해 회원가입, 데이터 조회 가능함 ▶ 멤버 컨트롤러가 멤버 서비스를 의존한다 스프링이 시작될 때 스프링 컨테이너가 생성되고 @Controller 객체를 생성해(= 스프링 빈) 스프링 컨테이너에서 관리 1) 회원 컨트롤러에 의존관계 추가 @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService..
- [ 공부/Spring ][Spring] 스프링 입문 3) 회원 관리 예제 - 백엔드 개발2023-10-14 14:19:17스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 3 회원 관리 예제 - 백엔드 개발 1. 비즈니스 요구사항 정리 1) 일반적 웹 애플리케이션 계층 구조 컨트롤러 ▶ 웹 MVC의 컨트롤러, API의 컨트롤러 역할 서비스 ▶ 핵심 비즈니스 로직 구현(회원 중복가입 불가) 도메인 ▶ DB에 주로 저장하고 관리되는 비즈니스 도메인 객체(회원, 주문, 쿠폰 등) 리포지토리 ▶ 데이터 베이스에 접근, 도메인 객체를 DB에 저장하고 관리, 핵심 비즈니스 로직이 동작하도록 구현한 객체 2) 클래스 의존 관계 데이터 저장소 선정되지 않아 인터페이스로 만들고 메모리기반 구현체 생성 ▶ 추후 저장소 선정 후 구현 클래스 변경할 수 있도록 인터페이스로 생성 2. 회원 도메인과 리포지토리 만들기 1) 회..
- [ 공부/Spring ][Spring] 스프링 입문 2) 스프링 웹 개발 기초2023-10-14 08:26:14스프링 입문 - 스프링 부트 웹 MVC, DB 접근 기술 Session 1 스프링 웹 개발 기초 1. 정적 컨텐츠 1) 스프링 부트 정적 컨텐츠 기능 static content ① localhost:8080/hello-static.html 주소로 들어가면 내장 톰캣 서버가 요청을 받는다 ② 스프링 부트가 컨테이너에 hello-static 관련 컨트롤러를 확인 ③ 컨트롤러가 없으면 src/main/resources/static 폴더에서 hello-static 관련 html을 찾아 웹브라우저에게 전달 2. MVC와 템플릿 엔진 MVC : Model, View, Controller ① localhost:8080/hello-mvc 주소로 들어가면 내장 톰캣 서버가 요청을 받는다 ② 스프링 부트가 컨테이너에 he..