Java 71

spring DB 접근

1. H2 데이터베이스 설치 개발이나 테스트 용도로 가볍고 편리한 DB, 웹 화면 제공 member 테이블 생성 2. 순수 jdbc 환경 설정 build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가 스프링 부트 데이터베이스 연결 설정 추가 Jdbc 리포지토리 구현 주의! 이렇게 JDBC API로 직접 코딩하는 것은 20년 전 이야기이다. 따라서 고대 개발자들이 이렇게 고생하고 살았구나 생각하고, 정신건강을 위해 참고만 하고 넘어가자. (Eclipse에서 mysql을 연동하여 프로젝트할 때나, jsp를 할때 이 방식은 사용해봤으니 한번 훑고 넘어가는걸로 하자........ 다시봐도 머리아파..) package hello.hellospring.repository; import hel..

회원 웹 기능

1. 홈 화면 추가 컨트롤러가 정적 파일보다 우선순위가 높기 때문에 /로 들어오면 home.html이 실행. 2. 등록 @GetMapping ==> Get방식 (주소창에 직접 치는 것) @PostMapping ==> Post방식 (form을 통해 전달할 때 보통 summit으로 전달) 홈에서 회원가입을 누르면 get방식에 따라 @GetMapping되어 members/createMemberForm.html이 실행. 그 후, 이름을 입력하고 등록을 누르면 http post방식으로 전달되는데 이는 @PostMapping이 호출되어 새로운 Member객체가 생성되고 전달받은 name이 MemberForm클래스를 통해 form안에 담긴다. 이를 추출해 member의 이름으로 설정하고 이를 앞서 만든 회원가입 메소..

스프링 빈

스프링 빈과 의존관계 스프링 빈을 등록하고, 의존관계 설정하기 생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다. 이전 테스트에서는 개발자가 직접 주입했고, 여기서는 @Autowired에 의해 스프링이 주입해준다 스프링 컨테이너(Spring Container)에 의해서 자바 객체가 만들어 지게 되면 이 객체를 스프링은 스프링 빈이라고 부름. 등록방법에는 아래 두가지 방법이 있다. 컴포넌트 스캔과 자동 의존관계 설정 @ComponentScan 어노테이션은 어느 지점부터 컴포넌트를 찾으라고 알려주는 역할 @Component는 실제로 찾아서 빈에..

회원 서비스 테스트

Test given 주어지는 것 when 주어졌을 때 then 어떻게 되는지 1. 회원가입 테스트 (join) given member에 name은 hello when member를 join시킴 id값이 return되므로 saveId에 저장 then return되어 저장된 saveId를 가지고 repository에 저장되어 있는 member정보 가져옴. 그것을 우리가 생성한 member객체의 name과 비교 성공 테스트에서 가장 중요한 것은 반례, 즉 예외 case이다. 1-2. 회원가입 테스트 (join) - 중복 회원 가입 try - catch문을 통하여 오류를 받고 메세지 비교를 통해 테스트 검증 성공 * assertThrows메소드를 활용해 더 간단하게 테스트하기 memberService.join(..

회원 서비스 개발

* 같은 이름이 있는 이미 존재하면 가입 불가 Optional ?? java8부터 도입된 null값을 처리하기 위한 래퍼 클래스 과거에는 != null을 통해 항상 null값을 체크해야했지만 이제는 Optional로 객체를 감싸주게되면 정적메소드를 사용할 수 있다. 그 예로 ifPresent는 객체안에 무언가 들어있는지를 판별하는 메소드이다. - findByName은 return 값이 이미 Optional이기 때문에 위의 코드를 정리하여 사용가능하다. MemberService 클래스 전체 코드 public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); /* 회원 가입 *..

회원 도메인과 리포지토리 테스트

개발한 기능을 실행해서 테스트 할 때 자바의 main 메서드를 통해서 실행하거나, 웹 애플리케이션의 컨트롤러를 통해서 해당 기능을 실행한다. 이러한 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고 여러 테스트를 한번에 실행하기 어렵다는 단점이 있다. 자바는 JUnit이라는 프레임워크로 테스트를 실행해서 이러한 문제를 해결한다. 1. save() 메소드 테스트 1-1. 직접 출력해서 테스트하기 console창에 result = true로 뜬 것을 확인할 수 있다. ==> 테스트 성공 1-2. Assertions로 테스트하기 * junit Junit에서 제공하는 Assertions 사용 ==> 테스트 성공 테스트 실패시에는 다음과 같이 오류가 발생한다. Expected(기댓값, 우리가 찾는 값..

회원 도메인과 리포지토리 만들기

1. 회원 도메인 만들기 domain 패키지 생성하고 그 안에 Member 클래스 생성 Id는 시스템에서 저장할 때 자동으로 지정되는 id값을 의미한다. (기본키와 비슷하게 사용될 것이다.) 2. 리포지토리 만들기 * 인터페이스 이전에 말했던 것과 같이 어떤 DB를 사용할 것인지를 아직 정하지 못했으므로 차후에 DB가 정해진다면 끼워맞추기 위해 인터페이스로 구현 * 구현체 filter를 통해 루프를 돌면서 하나라도 입력받은 name과 member.getName()이 같은게 있다면 return 해준다. 동시성 문제가 고려되어 있지 않음, 실무에서는 ConcurrentHashMap, AtomicLong 사용 고려

회원 관리 예제 - 1. 비지니스 요구사항 정리

비지니스 요구사항 정리 데이터 회원ID, 이름 기능 회원 등록, 조회 아직 DB가 선정되지 않음. (가상의 시나리오) 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비지니스 로직 구현 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비지니스 도메인 객체 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 클래스 의존관계 아직 데이터 저장소가 선정되지 않아서, 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용

API

들어가며 API(Application Programming Interface) “API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.” 쉽게 말해 프로그램 간의 데이터 정보를 주고받을 수 있도록 도와주는 매개체 정도로 생각을 하면 될듯하다. 이는 JSON이라는 데이터 표준 포멧을 통하여 주고받는다. @ResponseBody? 뷰 리졸버를 사용하지 않고, HTTP에 직접 return값을 보내겠다는 의미 Body는 html에서의 body를 의미하는 것이 아니라, HTTP에서의 BODY를 의미한다. HTTP = HTTP Heade..

반응형