목록전체 글 (155)
Rootable의 개발일기
일반적으로 스프링을 공부하기 전에는 모든 class 에서 필요한 객체가 있으면 new 를 해서 생성 후 사용했다. public class MemberController { MemberService memberService = new MemberService; ... } Service 가 수행하는 기능은 프로젝트의 도메인 단위로 관련된 Controller 나 Repository 에서 공용으로 사용되는 경우가 일반적이다. 그런데, Service 를 매번 new 를 해서 생성하게 되면 2가지 문제점이 발생한다. 1. 두 클래스가 강하게 결합되는 문제 두 클래스가 강하게 결합될 경우, 다른 클래스로 교체해야 하는 상황이 발생한다면 생성자를 고쳐야 하거나 해당 객체를 사용하는 모든 소스 코드를 수정해야 한다. 즉..
📌 given - when - then Test 코드를 작성하는 노하우이다. given : set data, 테스트할 데이터를 셋팅 when : input data, 테스트할 메서드 혹은 작업을 수행 then : validation, Assertions 등을 통해 검증 📌 assertThrows assertThrows(기대하는 예외, () -> try 구문(예외 가능성이 있는 소스)) @Test public void 중복_회원_예외() throws Exception{ //given Member member1 = new Member(); member1.setName("spring"); Member member2 = new Member(); member2.setName("spring"); //when mem..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqHTyp/btscQcBQ8Xa/8Kf2xojDmxfvi2kb5nMJVK/img.png)
📌 @RequestBody HTTP 요청 데이터 body를 조회할 때 사용하는 애노테이션 스프링MVC 내부에서 HTTP 메시지 바디를 읽어서 문자나 객체로 변환해서 전달해주는데, 이때 HttpMessageConverter라는 기능을 사용한다. (@ResponseBody도 마찬가지) 🔎 단순 텍스트 @ResponseBody @PostMapping("/request-body-string-v4") public String requestBodyStringV4(@RequestBody String messageBody) { log.info("messageBody={}", messageBody); return "ok"; } 🔎 JSON @ResponseBody @PostMapping("/request-body-jso..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cwr8Qd/btscPaEf5El/cKv5MKdIWKdaiBkQEWxdEk/img.png)
📌 Spring MVC 패턴 Model, View, Controller 의 약자로, 요청에 대한 로직 수행과 뷰 렌더링 작업을 분리하기 위해 도입되었다. 동작 방식은 요청이 들어오면 Controller에서 인식하여 렌더링할 뷰를 선택한다. 여기서 View에 전달할 데이터가 있다면 Model이라는 객채에 담아 전달한다. 그리고 Controller가 가리키는 View는 Model의 값과 함께 화면을 렌더링하는 식으로 동작한다. Model 데이터를 가진 객체를 지칭한다. 데이터는 내부의 상태에 대한 정보를 가질 수도 있고, 모델을 표현하는 이름 속성으로 가질 수 있다. 모델의 상태에 변화가 있을 때 컨트롤러와 뷰에 이를 통보한다. 이와 같은 통보를 통해 뷰는 최신의 결과를 보여줄 수 있고, 컨트롤러는 모델의 ..