목록JAVA/스프링 입문 (22)
It won't hurt to try

스프링빈 여기서 helloController처럼 스프링 컨테이너 안에 있는 컨트롤러(@Controller)를 스프링 빈이라고 표현한다. 스프링 컨테이너 안에서의 클래스 의존관계 컨트롤러에서 서비스, 리포지토리에 접근하기 위해서 각각 스프링빈으로 만든다. 스프링 빈으로 만들기 위해서는 컴포넌트화를 할 필요가 있는데 @Controller @Service @Repository 를 파보면 알겠지만 @Component가 붙어있는 컴포넌트 어노테이션이다. 기본적으로 스프링컨테이너에서 스프링빈을 등록할때 싱글톤으로 등록한다. 따라서 모두 같은 인스턴스이다. 예외설정으로 싱글톤이 아니게 설정할 수도 있지만, 대부분 싱글톤으로 사용한다. 각각의 컴포넌트를 연결시켜주는 역할이 @Autowired이다 컴포넌트 호출 범위 H..

테스트를 할때는 밑의 주석처럼 논리적인 파티션을 나누어 놓는 편이 좋다. given : 어떠한 값을 주고 when : 이러한 경우 then : 이러한 결과가 나온다. // given ・・・ // when ・・・ // then ・・・ exception 테스트 코드 // given Member member1 = new Member(); member1.setName("test1"); Member member2 = new Member(); member2.setName("test1"); // when memberService.join(member1); IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.joi..

서비스 로직은 비즈니스 용어를 사용해야한다. 예를 들면 회원 정보를 저장하는 save라는 함수가 있다고 하자. 회원 가입 기능을 갖는 서비스에서는 회원 가입 기능을 join이라고 명명하는 경우가 많다. 이유는 일반적으로 회원가입을 할때 customer join 서비스 로직 화면 단축키 Cmd + option + v : 우항에 있는 값의 데이터 형에 맞춰서 좌항의 변수명과 데이터 형을 자동완성 시켜준다. control + t -> Cmd + option + M : 코드 블럭 후 메소드 생성하기

내가 작성한 코드가 정상적으로 움직이는지 확인하기 위해 테스트 케이스를 작성한다. UT(unit test), 유닛테스트, 단체테스트, 단위테스트, 単体テスト 라고 한다. @Test org.junit.jupiter.api.Test; Assertions오브젝트를 사용하는 라이브러리는 크게 두가지가 있다. org.assertj org.junit 사용법이 조금 다르지만 비슷하기 때문에, 자신에게 편한 라이브러리를 사용하면 좋을것 같다. @AfterEach org.junit.jupiter.api.AfterEach; callback메소드 같이 사용한다. 각 테스트메소드는 서로 의존관계에 있어서는 안된다. 단축키 Shift + F6 : 같은 이름의 변수명을 한번에 수정할 수 있다. Alt + Enter : Auto ..

디렉토리 구조 아직은 적응이 안되는 디렉토리 구조이다. controller 웹어플리케이션 서버로부터 신호가 전달되어 오는 곳 domain 저장소에 데이터를 저장하기 위한 오브젝트라고 생각하면 쉬울것 같다. 우리가 흔히 말하는 getter/setter구조로 되어있는 경우가 많다. repository 저장소의 데이터를 CRUD하기 위한 처리 내용이 들어간다. (예를 들면 데이터 저장, 수정, 열람 등) 우리는 아직 어떠한 저장소를 사용할지 정해지지 않았기 때문에 일단 인터페이스를 구현하는 방식으로 한다. 소스 살펴보기 package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.*; public cl..

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

Controller @GetMapping("hello-api") @ResponseBody public Hello helloApi(@RequestParam("name") String name) { Hello hello = new Hello(); hello.setName(name); return hello; } static class Hello { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } 객체나 문자열을 리턴할수 있다. @ResponseBody 를 사용 HTTP의 BODY에 문자 내용을 직접 반환 viewResolver 대신에 HttpMe..

hello-template를 여는 간단한 테스트 페이지 controller package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAtt..