이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 새로운 할인 정책 개발 새로운 할인 정책을 확장해보자. 악덕 기획자가 서비스 오픈 직전에 할인 정책을 변경하고 싶어한다. 기존에는 VIP 고객이 주문 금액에 관계없이 일정 금액(예: 1000원)을 할인받는 방식이었지만, 이제 주문 금액의 일정 비율(예: 10%)을 할인하는 방식으로 변경하고자 한다. 순진 개발자는 처음부터 고정 금액 할인 방식에 반대했지만, 악덕 기획자는 애자일 개발 방식을 인용하며 변화에 대응할 것을 주장한다. 순진 개발자는 유연한 설계를 위해 객체지향 설계 원칙을 이미 준수했기 때문에 상관없다고 생각한다. 순진 개발자가 정말 객체지향 설계 원칙을 잘 준수 했는지 확인해보자. 이번에는 주문한 ..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 회원 도메인 설계 회원 도메인 요구사항 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 회원 도메인 협력 관계 회원 클래스 다이어그램 회원 객체 다이어그램 회원 서비스: MemberServiceImpl 구현 클래스가 하나밖에 없을 때는 Impl을 관례적으로 붙인다고 한다. 회원 도메인 개발 회원 엔티티 회원 등급 package hello.core.member; public enum Grade { BASIC, VIP } 회원 엔티티 package hello.core.member; public cl..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 자바 진영의 표준 기술이었던 Enterprise Java Beans (EJB)는 복잡하고 어려우며 의존적이고 느렸음. 스프링 2002년 로드 존슨 책 출간 EJB의 문제점 지적 지금의 스프링 핵심 개념과 기반 코드가 들어있음 BeanFactory, ApplicationContext, POJO, 제어 역전, 의존관계 주입 단순함의 승리 현재 사실상 표준 기술 EJB 엔티티빈 기술을 대체 -> 하이버네이트 -> JPA JPA는 인터페이스이다. 따라서 구현체가 필요한데, 대표적인 구현체는 하이버네이트, EclipseLink 등이 있다. 스프링 생태계 스프링은 여러 가지 기술들의 모음. 스프링 프레임워크: 스프링의 핵..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. AOP가 필요한 상황 몇개의 메서드에 실행시간을 체크해보고싶은 상황이라고 한다면 해당 메서드들의 시작과 끝에 시간을 측정하고 출력하는 코드를 붙여야할 것이다. 다행히 그게 몇개 밖에 되지않는다면 괜찮겠지만 만약 몇십개, 몇백개라면 노가다 작업을 해야할 것이다. 예를 들어, AOP를 적용하지 않고, 각 메서드마다 실행시간을 측정을 해야한다면 아래와 같은 문제점을 만나게 된다. 회원가입, 회원 조회에 시간을 측정하는 기능은 핵심 관심 사항이 아니다. 시간을 측정하는 로직은 공통 관심 사항이다. 시간을 측정하는 로직과 핵심 비즈니스의 로직이 섞여서 유지보수가 어렵다. 시간을 측정하는 로직을 별도의 공통 로직으로 만들..
Maccommand + shift + t : 테스트 케이스 생성option + enter : static importcommand + option + v : 리턴 값을 받아줄 변수 자동 생성command + n : 생성자, getter, setter 등 자동 생성command + d : 라인 복제ctrl + t : 리팩토링option + command + m : 메서드 추출 리팩토링 (extract method)command + shift + 왼쪽 or 오른쪽 : 프로젝트 탐색창 좌우 크기조절command + option + b + 클릭: 인터페이스의 구현체 리스트를 보여줌command + p : 생성자 목록command + e : 최근 실행 파일shift + shift : 전체 검색command + d..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. H2 데이터베이스 설치 H2 데이터베이스는 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공한다. https://www.h2database.com/html/main.html 위 사이트에서 H2 데이터베이스를 설치한다. 브라우저 창이 열리면서 다음과같은 화면이 출력된다. JDBC URL : jdbc:h2:~/test (최초 한번 입력)를 입력한다. ~/test는 home에 있는 test파일을 의미한다. window에서 home은 사용자 폴더가 된다. 사용자명과 비밀번호는 건드리지 않고 [연결] 버튼을 누른다. 그러면 해당 폴더에 위와 같은 파일이 생성된다. 아래와같이 H2 Database에 연결이되며, ..
static import는 클래스의 정적 멤버(메서드와 필드)를 클래스 이름 없이 직접 사용할 수 있도록 해준다. 이를 통해 코드의 가독성을 높일 수 있지만, 과도하게 사용할 경우 어느 클래스에서 메서드나 필드가 정의되었는지 혼란을 줄 수 있다. 예를들어, static import를 사용하지 않는 경우, 예를 들어 Math 클래스의 sqrt 메서드를 사용하려면 클래스 이름을 명시해야 한다. double result = Math.sqrt(25); // Math 클래스의 sqrt 메서드 사용 static import를 사용하면, 메서드를 클래스 이름 없이 직접 호출할 수 있다 import static java.lang.Math.sqrt; ... double result = sqrt(25); // Math.s..
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 홈 화면 추가 HomeController를 통해 html 연결하기 controller 패키지에서 HomeController 클래스를 하나 생성한다. @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } @Controller 어노테이션을 붙여준다. 그리고 @GetMapping을 통해 "/"를 연결시킨다. /은 도메인의 첫번째 주소를 말한다. 즉, localhost:8080/ 에 접속했을 때 이 메서드가 호출이 되는 것이다. 이후 return 값으로 home을 반환한다. 따라서 이 메서드가..