[Spring Boot] 스프링부트 (IntelliJ)/Spring boot 19

[SpringBoot] Junit - @SpringBootTest, @Transactional 어노테이션

@SpringBootTest 스프링 컨테이너와 테스트를 함께 실행한다 @Transactional 테스트할 때 DB에 반영된 것들을 테스트가 끝나면 rollback 해주어 DB에 데이터가 남지 않으므로 다음 테스트에 영향을 주지 않는다. 테스트 파일을 만들 경우 스프링 컨테이너 없이 '단위테스트'를 하는 것이 좋은 테스트라고 한다. MemberServiceTest 같은 경우는 단위테스트 class MemberServiceTest { MemberService memberService; MemoryMemberRepository memberRepository; @BeforeEach public void beforeEach(){ memberRepository = new MemoryMemberRepository()..

[Spring Boot] DI (의존성 주입, Dependency Injection)

DI는 코드 간의 의존 관계를 관리하기 위한 디자인 패턴이다. 회원관리를 예를 들어 설명을 하자면, MemoryMemberRepository에는 기본적인 기능 (가입, 전체조회, ID로 검색, Name으로 검색 등등) MemberService에는 그 외에 비즈니스적인 기능(부가적인 기능)을 작성한다고 한다. 부가적인 기능을 이용할 때는 기본적인 기능을 이용할 때가 많다. 예를 들면 기본적인 기능에는 회원 정보가 저장되는 기능이 있다면 부가적인 기능에는 사용자가 입력한 내용이 중복확인이나 조건을 거쳐 모든 조건에 충족이 된다면 회원정보가 저장되는 기능이 작동하는 것이다. 회원 정보가 저장되는 기본적인 기능 @Override public Member save(Member member) { member.set..

[Spring Boot] Junit 사용해보기

테스트를 하다가 이런 에러가 발생했다. package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; import static org.assertj.core.api.Assertions.*; class MemoryMemberRepositoryTest { MemoryMemberRepository repository = new MemoryMemberRepository(); @Test public void save(){ Member member = new Memb..

[Spring boot] 스프링 컨테이너 - response 하는 방법

웹이 동작하는 순서 1. 서버가 켜지면서 web.xml이 호출됨 2. ContextLoaderListener가 호출됨 (성이 만들어짐) 3. applicationContext.xml, root-context.xml이 읽어지면서 DB관련 객체들 메모리에 올림 (service, DAO, VO등) 4. 사용자의 request요청이 들어옴 5. DispatcherServlet이 웹과 관련된 것들을 메모리에 띄움(주소분배) 6. response 응답이 감 (Data or html) 1. 요청 주소에 따른 적절한 컨트롤러 요청 (handler Mapping) GET 요청 -> http://localhost:8080/post/2 해당 주소 요청이 오면 주소에 맞는 적절한 컨트롤러의 함수를 찾아서 실행한다. 2. 응답..

[Spring boot] 스프링 컨테이너 - request 과정

request -> web.xml -> ContextLoaderListener ->DispatchServlet(컴포넌트 스캔 > 주소 분배) ContextLoaderListener - 모든 자원들이 공통적으로 사용할 것들을 만들어둠 ex)DBConnector - 어노테이션(ex -@Controller, @Restcontroller, @Configration 등)을 가지고 있는 것들을 모두 메모리에 띄움 - 어노테이션을 커스텀 할 수도 있음 servlet-applicationContext - controllers, viewResolver, HandlerMapping를 메모리에 띄우고 관리함 - 웹만 바라보는 어노테이션을 스캔하고 ContextLoaderListener에 의해 실행됨 root-applicat..

[Spring boot] FrontController, RequestDispatcher, DispatchServlet

FrontController - 최초 앞단에서 request를 받아서 필요한 클래스에 넘겨준다. - 이 때 새로운 요청이 생기기 때문에 reuqest와 response가 새롭게 new 될 수 있다. - request와 response가 새로 생기면 요청한 페이지로 넘어갈 때 데이터를 가지고 갈 수 없다. RequestDispatcher - a페이지에서 b페이지로 넘어갈 때, a페이지에서 가지고 있던 데이터를 가지고 넘어갈 수 있음 - 페이지가 넘어갈 때 request가 다시 생성되지 않고 a페이지에서 생성된 request를 재사용함 Dispatchservlet - 스프링에 이미 있는 기능으로 FrontController + RequestDispatcher 합쳐진 기능을 가지고 있다.

[Spring boot] web.xml

web.xml의 역할 1. Servletcontext의 초기 파라미터 생성 2. Session의 유효시간 설정 3. Servlet/JSP에 대한 정의 4. Servlet/JSP 매핑 5. Mime Type 매핑 6. Welcome File list 설정 7. Error Pages 처리 8. 리스너/필터 설정 9. 보안 설정 성이 있다고 가정해보자 web.xml은 문지기라고 한다. 1. Servletcontext의 초기 파라미터 생성 - 초기 파라미터는 '암구호'라고 생각한다 - 문으로 들어온 사람은 암구호를 알겠지만 벽을 넘어온 사람은 모른다. 2. Session의 유효시간 설정 - 인증을 하고 성에 있을 수 있는 시간을 정해주고 들여보내 주는 것 - 정해진 시간이 지나면 추방당함 - 세션을 초기화하려면..

[Spring boot]Socket(소켓), http통신, 웹서버, 톰켓 쉽게 이해하기

Socket(소켓) : 운영체제가 가지고 있는 것 소켓통신 A와 B가 채팅을 하려고 한다. A가 5000번 소켓을 오픈한다. -> 5000번은 연결용도의 소켓이다. B와 연결이 되면 5000번은 닫히고 예를들어 5001번 소켓으로 연결되어 채팅를 한다. 5001번을 만들 때는 새로운 스레드를 만듬 5000번 - 메인스레드로 연결만 해주는 기능 소켓통신의 장점 연결이 끊어지지 않지만 부하가 크다. 스레드를 이용하면 time slice를 통해서 동시동작 처럼 보이게 시간을 쪼개서 동작시킬 수 있다. http통신 - 문서를 전달하는 통신 - http 확장자로 만들어진 문서를 필요한 사람에게 제공 - statless 방식 사용 - 한 소켓으로 명령을 수행하고 끊어버림 - 전에 통신했던 사람인지 인식하지 못함 웹..

junit을 이용한 테스트2

given, when, then 주석 틀 이용하기 @Test void join(){ //given Member member = new Member(); member.setName("hello"); //when Long saveId = memberService.join(member); //then Member findeMember = memberService.findOne(saveId).get(); Assertions.assertThat(member.getName()).isEqualTo(findMember.getName()); } 이런식으로 사용하면 보기 편하다. void duplicateJoin(){ // 중복을 일부러 만들어 테스트해보는 메서드 //given Member member1 = new Mem..

junit을 이용한 테스트 기본 동작

junit은 자바 언어에서 주로 사용되는 테스트하기 위한 프레임워크이다. 내가 test 폴더 안에서 내가 테스트 하고 싶은 것들이 잘 돌아가는지 테스트를 해볼 수 있다. 메서드마다 @Test 어노테이션을 사용하여 만들고 Assertions.assertThat(A).isEqualTo(B); 를 이용하면 A와 B의 결과값이 같은지 알 수 있다. 그리고 Assertions를 static으로 올리면 assertThat을 바로 사용할 수 있다. 하지만 여러 개의 메서드를 한 번에 테스트를 하다보면 오류가 발생한다. 다른 메서드지만 같은 값들이 정의되는 경우 등 겹치는 상황이 있을 수 있기 때문에 메서드가 테스트가 완료되고 나서 해당 메서드들의 공용데이터나 저장소 을 지워주는 역할이 필요하다. 일단 테스트 파일 말..