전체 글

클라이언트에서 요청을 받는 RequestDto 객체 Service에 노출되지 않게 하기 @PutMapping("/{lineId}") public ResponseEntity updateLine(@PathVariable Long lineId, @RequestBody LineRequest lineRequest) { lineService.update(lineRequest.toEntity(lineId)); return ResponseEntity.ok().build(); } JSON 형태의 클라이언트 요청을 받는 Dto 객체인 LineRequest를 컨트롤러에서 엔티티 객체로 변환시켜 Service 레이어로 넘겨주고 있다. 이렇게 설계한 이유는 LineRequest라는 Dto는 어떤 UI에 사용되는지에 따라, UI..
· 네트워크
2장 간단한 프로토콜 HTTP HTTP 특징 클라이언트 서버 구조 무상태 프로토콜(stateless), 비연결성 HTTP 메시지를 통해 통신 단순함, 확장 가능 클라이언트 서버 구조 클라이언트와 서버 간의 통신을 한다. 클라이언트 - 텍스트와 이미지 등과 같은 리소스를 요구 서버 - 리소스를 제공 예전에는 클라이언트와 서버라는 개념이 분리되어 있지 않았다. 하지만 분리 후 서버는 비즈니스 로직과 데이터 관리에 집중한다. 클라이언트에는 UI와 사용성에 집중한다. ⇒ 양쪽이 독립적으로 진화할 수 있다! ex) 웹, 모바일 등이 만들어져도 서버엔 변화가 적고, 트래픽이 증가해서 서버를 증설해도 클라이언트엔 변화가 적다. 무상태 프로토콜(스테이스리스), 비연결성 HTTP는 상태를 유지하지 않는 stateless..
POST 요청은 일반적으로 데이터를 body로 보낸다 @PostMapping(value = "/boards/{boardId}", params = "command=move") public ResponseEntity movePiece(@PathVariable int boardId, @RequestBody CommendDto commendDto) { gameService.move(boardId, commendDto); return ResponseEntity.ok(gameService.gameStateAndPieces(boardId)); } 처음에 위와 같이 코드를 짰었다. boardId에 해당하는 체스판을 CommandDto 안의 위치 정보를 통해 체스 말을 움직이는 요청을 처리한다. 그런데 위와 같은 피드백..
스프링부트 애플리케이션 테스트를 할 때 @Mock과 @MockBean을 사용할 때가 있다. 두 어노테이션 모두 모의 객체를 만들지만 용도가 조금씩 다르다. 간단하게 설명하면 비즈니스 로직을 단위 테스트할 때 @Mock을 사용한다. 애플리케이션 컨텍스트를 기반으로 하는 통합 테스트에서 빈을 모의 객체로 추가하거나 변경하는 경우에 @MockBean을 사용한다. Using @Mock For Spring Boot Unit Tests StockService라는 객체가 StockApiClient를 의존한다고 하자. 위 객체를 독립적으로 테스트하기 위해선 Junit과 Mockito가 필요하다. StockService를 테스트할 때 의존 객체들을 mock으로 대체했다. @InjectMock이 붙은 객체에 @Mock 어..
@SpringBootTest가 붙으면 Application Context에 의존성 주입 오류(NoSuchBeanDefinitionException) 없이 테스트에 필요한 모든 의존성을 제공해준다. 여러 객체들을 빈으로 등록해서 전체적인 통합 테스트를 진행할 때 사용할 수 있다. @SpringBootTest 내부 확인 맨 아래부터 보면 Junit Jupitier(Junit5의 일부)의 SpringExtension을 등록한 것을 볼 수 있다. SpringExtention은 Spring TestContext 프레임워크를 Junit5의 Jupiter 프로그래밍 모델에 통합한다. 이 extension은 테스트 프레임워크와 스프링의 원활한 통합을 위해 필수적이다. @BootstrapWith는 Sprint TestC..
공식 문서에 의하면 스프링 웹 MVC는 서블릿 API 기반의 웹 프레임워크이다. 스프링 MVC에 대해 공부하던 중 서블릿에 대한 개념을 간단히 집고 넘어가야 진행할 수 있을 것 같아 정리해 보았다. 서블릿이란? 서블릿은 웹 서버 내에서 실행되는 작은 자바 프로그램(인터페이스)이다. 일반적으로 HTTP를 통해 웹 클라이언트의 요청을 수신하고 응답하며 동적 웹 페이지를 만들 때 사용된다. 개발자가 HTTP 요청과 응답을 직접 다 파싱하고 응답을 만든다고 생각하면 해야 할 일이 너무 많다. 하지만 서블릿을 사용한다면 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다. Servlet 인터페이스는 서블릿을 초기화하고, 요청을 처리하고, 서버에서 서블릿을 제거하는 방벙을 정의한다. 아래는 HttpServlet..
HTTP 요청 데이터 3가지 전달 방법 GET – 쿼리 파라미터 /url?username=hello&age=20 메시지 바디 없이 URL에 데이터를 전달 POST – HTML Form content-type: application/x-www-form-urlencoded 메시지 바디에 쿼리 파라미터 형식(usermane=hello&age=20)으로 전달 HTTP 메시지 바디에 데이터를 직접 담아서 요청 주로 JSOM 데이터 형식을 사용 {“username” : “hello”, “age” : 20} @RequestParam Get 쿼리 파라미터 전송과 POST HTML Form 전송 방식 둘 다 조회할 수 있다. 다음과 같이 URL 요청이 들어올 때 @RequestParam을 이용하면 다음과 같이 사용할 수..
· 스프링
프레임워크란? 라이브러리와는 뭐가 다를까? 둘 다 다른 누군가가 쓴 코드이다. 하지만 ‘누가 누구를 컨트롤 하는가’에서 컨셉의 차이가 나타난다. 라이브러리는 내가 필요할 때 가져와서 사용한다. 쉽게 말해서 집을 지을 때 필요한 연장을 가져와서 사용하듯이 사용자가 라이브러리(도구)를 제어할 수 있다. 반대로 프레임워크는 내가 부르지 않는다. 프레임워크가 사용자를 부른다. 프레임워크를 사용할 때는 프레임워크의 규칙을 따라야 하며 규칙을 어긴다면 작동하지 않는다. 예를 들어 스프링 프레임워크에서는 원하는 동작을 얻기 위해서는 적절한 클래스에 알맞은 애너테이션을 달아야 하고 특정 파일은 정해진 명명 규칙이나 디렉터리 구조를 따라야 한다. Gof의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson)은 "..
더즈
DOES-LOG