목록프로그래밍 (408)
쌓고 쌓다
테스트 코드 작성 시 보통 given when then으로 나누어 생각하면 편하다. given - 이러한(어떤) 상황이 주어졌을 때 when - 이것을 실행했을 때 then - 결과는 이것이 되어야 한다. join 테스트 코드 class MemberServiceTest { MemberService memberService = new MemberService(); @Test void join() { //given Member member = new Member(); member.setName("member1"); //when Long saveId = memberService.join(member); //then Member findMember = memberService.findOne(saveId).get..
회원 서비스 회원 리포지토리랑 도메인을 사용하여 비즈니스 로직을 작성 회원 리포지토리에는 멤버를 넣었다 뺐다 느낌이지만 회원 서비스 클래스는 join 등.. 비즈니스에 가까움 MemberService package hello.hellospring.service; public class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); /* 회원가입 */ public Long join(Member member) { validateDuplicateMember(member); memberRepository.save(member); return member.getId(); } /* 전체 회원..
개발한 기능을 테스트할 때 main 메소드를 통해 실행하거나 웹 애플리케이션의 컨트롤러로 기능을 실행한다. 이 방법은 준비하고 실행하는데 오래 걸리고, 반복 실행하기 어렵고, 여러 테스트를 한 번에 실행하기 어렵다. 그래서 자바의 JUnit이라는 프레임워크로 테스트를 실행한다. src/test/java 하위 폴더에 똑같은 패키지를 생성. save 메소드 테스트 public class MemoryMemberRepositoryTest { MemberRepository repository = new MemoryMemberRepository(); @Test public void saveTest() { Member member = new Member(); member.setName("name1"); reposit..
요구사항 데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않아 메모리 기반으로 할 것임 컨트롤러: 웹 MVC의 컨트롤러 서비스: 핵심 비즈니스 로직 구현 (회원 중복가입 불가 로직 등...) 리포지토리: DB에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 비즈니스 도메인 객체 (EX. 회원, 주문, 쿠폰 등 DB에 저장되고 관리됨) 회원 클래스 package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public S..
@Controller public class HelloController { @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam String name) { return "hello " + name; } } @ResponseBody ? html의 body 태그가 아니다. http에 head와 body가 있는데 그 body이다. 이 body에 직접 데이터를 넣는다. 리턴한 문자열이 클라이언트에 그대로 넘어간다. 이제. 문자열이 아닌 데이터를 요청이 들어왔다고 하자. 요청의 응답으로 Hello 객체를 반환해야한다. Hello 클래스 public class Hello { private String name; publi..
MVC (Model View Controller) View는 화면을 그리는데 집중하고 Controller, Model은 비즈니스 로직이나 내부 처리에 집중하자. Controller @Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } } 웹에서 파라미터를 받을때 @RequestParam 어노테이션을 사용한다. model에 담으면 View에서 렌더링 할 때 사용한다. model에 키:"name"과 파라미..
https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-static-content Spring Boot Features Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. It occurs as part of closing the application context and is performed in..
프로젝트를 빌드하고 실행 파일을 만들어보자. 터미널로 프로젝트 파일로 이동한다. 처음 알았는데 디렉토리에 들어가서 위의 주소에 cmd를 치고 엔터를 누르면 명령 프롬프트의 현재 디렉토리 위치가 이 디렉토리의 위치로 설정되어 콘솔이 열린다. 이 콘솔창에 gradlew build를 입력한다. 그러면 프로젝트 폴더 안에 build 폴더가 생기는데 이 폴더 안에 또 libs 폴더로 이동한다. 이 libs 폴더 안에 .jar이 존재하는데 이것을 아래의 방법으로 실행한다. java -jar hello-spring-0.0.1-SNAPSHOT.jar 실행 결과로 스프링이 뜬다. 이렇게 실행파일을 만들어 서버를 열 수 있다. 서버 배포할때도 이 파일을 복사하여 서버에 넣고 실행시키면 서버에서도 Spring이 동작이 된다..