API

@GetMapping("hello-string") 
	@ResponseBody 
	public String helloString(@RequestParam("name") String name){
		return "hello " + name; 
	}
  • ResponseBody : http의 body부분에 데이터를 직접 넣어주겠다. view사용X
  • RequestParam : HttpServletRequest 객체와 같은 역할.

 

비즈니스 요구사항

  • 컨트롤러 : 웹 MVC의 컨트롤러 역할
  • 서비스 : 핵심 비즈니스 로직 구현 (비즈니스적인 용어 사용_join)
  • 리포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 (개발적인 용어 사용_save)
  • 도메인 : 비즈니스 도메인 객체
  • 아직 데이터 저장소가 선정X. 인터페이스로 구현 클래스를 변경할 수 있도록 설계.

 

회원 도메인/리포지토리 생성

  • 회원 객체(VO) 생성
  • 회원 리포지토리 인터페이스 생성
  • 회원 리포지토리 메모리 구현

 

회원 리포지토리 테스트 케이스 작성

  • JUnit이라는 프레임워크로 테스트
  • 동작하는지 보기위해 테스트케이스 작성
  • 테스트는 서로 의존관계가 없어야한다. 순서 상관없이 테스트가 되어야한다.

TDD(테스트주도개발) : 테스트를 먼저 만들고 구현 클래스를 만들어 돌려보는 것

 

 

회원 리포지토리 메모리 구현체 테스트

@AfterEach
public void afterEach(){
	repository.clearStore();
}
  • @AfterEach : 여러 테스트를 한꺼번에 실행 시, 메모리 DB에 직전 테스트의 결과가 남을 수 있다. @AfterEach 를 사용하여 각 테스트가 종료될 때 마다 메모리 DB에 저장된 데이터를 삭제한다.


회원 서비스 개발

private void validateDuplicateMember(Member member) {
	memberRepository.findByName(member.getName())
    .ifPresent(m -> {
    	throw new IllegalStateException("이미 존재하는 회원입니다.");
    });
 }
  • 람다 표현식
  • 인터페이스가 갖고 있는 메소드를 간편하게 즉흥적으로 구현해서 사용하는 것이 목적
  • (매개변수목록) -> { 함수몸체 }


회원서비스테스트

void 회원가입() {

	//given
    Member member = new Member();
    member.setName("hello");

	//when
    Long saveId = memberService.join(member);

    //then
    Member findMember = memberService.findOne(saveId).get();
    assertThat(member.getName()).isEqualTo(findMember.getName());
 }
  • 테스트코드는 한글 적어도 괜찮다.
  • given : 이런 상황이 주어져서 (이 데이터를 기반) then : 결과가 이렇게 나와야해
  • when : 이걸로 실행했을 때 (이걸 검증)
@BeforeEachpublic
void beforeEach() {
	memberRepository = new MemoryMemberRepository();
	memberService = new MemberService(memberRepository);
}
  • @BeforeEach : 각 테스트 실행 전에 호출. 테스트가 서로 영향이 없도록 항상 새로운 객체를 생성하고, 의존관계도 새로 맺어준다.


단축키(Windows)

ctrl+alt+v : 변수 선언할 때 사용
alt+enter : static import
ctrl +shift +t : 테스트코드 단축키
shift+f6 : 변수명 바꾸기
ctrl + shift + enter : 완료 후 줄바꿈

인프런 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 통해 학습 중.

'JAVA' 카테고리의 다른 글

Spring 핵심 01 : 객체 지향 설계와 스프링  (0) 2021.05.18
Spring 05 : AOP  (0) 2021.05.18
Spring 04 : 스프링 DB 접근  (0) 2021.05.18
Spring 03 : 스프링 빈과 의존관계  (0) 2021.05.18
Spring 01 : 프로젝트 환경설정  (0) 2021.05.18

Spring : 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크


Spring 환경설정

  • Java 11
  • IntelliJ

 

스프링 부트 생성

start.spring.io

  • Artifact : 결과물
  • Dependencies : 어떤 라이브러리를 가져다 쓸 것인지?

 

IntelliJ 프로젝트 생성

 

build.gradle 파일

  • maven / gradle 둘 다 main과 test 존재
  • test : test코드 (요즘 개발에서 test코드 매우 중요)

SpringBootApplication : 톰캣 내장함.

 

View 환경설정

  • resources/static/index.html
  • resources/templates/hello.html

 

Controller 설정

  • main/java/hello.hellospring/controller/HelloController.java

 

빌드 후 실행

gradlew.bat build cd build/libs java -jar hello-spring-0.0.1-SNAPSHOT.jar

  • mac에서는 ./gradlew build
  • 서버 배포 시 hello-spring-0.0.1-SNAPSHOT.jar 파일만 복사해서 넣고 java -jar hello-spring-0.0.1-SNAPSHOT.jar 실행. 이렇게 하면 서버에서도 스프링 동작 가능하다.

에러 2개 발생

1) 실행 시 에러

  • gradle을 통해서 실행됨에 따라 에러가 발생
  • 셋팅에서 바꿔줌.

 

2) 실행 후 localhost:8080 들어가면 에러페이지 떠야함.

  • 로그인 창이 뜸.
  • 오라클 DB와 톰캣이 충돌했을 때 나타나는 현상.
  • 오라클 관리자 사이트의 포트를 변경해야 함.

 

변경 후

 

인프런 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 통해 학습 중.

'JAVA' 카테고리의 다른 글

Spring 핵심 01 : 객체 지향 설계와 스프링  (0) 2021.05.18
Spring 05 : AOP  (0) 2021.05.18
Spring 04 : 스프링 DB 접근  (0) 2021.05.18
Spring 03 : 스프링 빈과 의존관계  (0) 2021.05.18
Spring02 : 예제(회원관리)  (0) 2021.05.18

+ Recent posts