AOP가 필요한 상황 모든 메서드의 호출 시간을 측정하고 싶을 때 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern) 회원 가입 시간, 회원 조회 시간을 측정하고 싶을 때 단순 측정 public Long join(Member member) { // 같은 이름이 있는 중복 회원X long start = System.currentTimeMillis(); try{ validateDuplicateMember(member); // 중복 회원 검증 memberRepository.save(member); return member.getId(); } finally { long finish = System.currentTimeMillis(); long timeMs = ..
H2 데이터베이스 웹 콘솔로 접근 https://www.h2database.com/html/download-archive.html h2 데이터베이스 설치 bin 폴더에서 h2.bat파일 실행 (window) 처음에 데이터베이스 파일을 만들어야 한다. 연결 화면 -> test.mv.db 파일이 생성된다. JDBC URL을 jdbc:h2:~/test처럼 접근하면 애플리케이션과 웹 콘솔이 동시에 접근하면 오류가 발생할 수 있다. JDBC URL을 jdbc:h2:tcp://localhost/~/test와 같이 바꿔서 연결한다. 파일에 직접 접근하는 것이 아니라 소켓을 통해서 접근하면 여러 군데서 접근할 수 있다. 테이블 생성 generated by default as identity -> 값을 정하지 않고 in..
홈 화면 추가 package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } controller 패키지에 HomeController 생성 Hello Spring 회원 기능 회원 가입 회원 목록 resources/templates 에 home.html 작성 동작 원리 localhost:8080 호출 -> HomeController에..
직접 스프링 빈 등록하기 @Service, @Repository를 지우고 실행 -> 에러 발생 service 패키지에 SpringConfig 클래스 생성 package hello.hellospring.service; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SpringConfig { @Bean p..
회원 서비스가 실행되기 위해서 MemberController가 MemberService를 통해서 회원 가입하고 MemberService를 통해서 데이터(MemberRepository)를 조회할 수 있어야 한다. 이렇게 한 객체가 다른 객체를 사용할 때 의존성이 있다고 한다. 회원 서비스를 제대로 동작시키기 위해서 Controller와 Service에 대한 의존성을 주입해야 한다. 의존성 주입(Dependecy Injection, DI) 의존성 주입(DI)란 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 다이나믹하게 주입하는 것이다. DI의 장점은 유연성을 확보하고 결합도를 낮출 수 있게 해 준다. ..
비즈니스 요구사항 정리 회원 도메인과 리포지토리 만들기 회원 리포지토리 테스트 케이스 작성 회원 서비스 개발 회원 서비스 테스트 비즈니스 요구사항 정리 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 데이터 저장소가 선정되지 않음. 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데이터베이스 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체 ex) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 클래스 의존관계 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민 중인 상황으로 가정..
스프링 웹을 개발하는 방법은 여러 가지가 있다. 정적 콘텐츠 - 파일을 웹 브라우저에 그대로 내려주는 것. MVC와 템플릿 엔진 - 가장 많이 개발하는 방식 - html을 그대로 내리는 것이 아니라 서버에서 동적으로 바꿔서 내리는 것. - Model, View, Controller API - 데이터 포맷으로 client에게 전달하는 방식 정적 콘텐츠 (Static Content) 스프링 부트는 정적 콘텐츠를 기본으로 제공한다. 정적 콘텐츠 생성하기 정적 컨텐츠 입니다. resource/static 에 hello-static.html 파일을 생성한다. 주소창에 localhost:8080/hello-static.html 입력면 위와 같은 화면을 볼 수 있다. 동작 방식 웹 브라우저에서 localhost:80..
프로젝트 생성 요즘 spring은 spring boot를 기반으로 프로젝트를 만든다. spring boot를 기반으로 프로젝트를 만들어 주는 https://start.spring.io에서 프로젝트를 생성한다. Project 필요한 라이브러리를 당겨와서 빌드하는 liftcycle까지 관리해주는 tool이다. 과거에는 Maven을 많이 썼지만, 요즘엔 Gradle을 많이 쓴다. Spring Boot Spring Boot 버전을 선택해야 하는데 SNAPSHOT은 만들고 있는 버전이고, M1은 정식 릴리즈된 버전이 아니다. Project Metadata project의 정보를 담는 곳이다. Group : 회사명 등 Artifact : 빌드된 결과물, 프로젝트명 Dependencies spring boot를 기반..