본문 바로가기

스프링 부트

(30)
@JsonProperty, @JsonNaming 2021-04-30글 이 글을 쓴 배경... 클라이언트에서 HTTP Body에 Json을 실어 요청을 실어 보내고 이를 받는 DTO를 만들어 사용하고 있었다. 하지만 API 명세로 클라이언트에서는 key 네이밍으로 스네이크 케이스를 사용하고, DTO 필드로는 스네이크 케이스를 사용하기 때문에 Jackson이 DTO에 제대로 매핑하지 못해 예외가 발생했다. 그래서 API 명세에서, 클라이언트가 key를 스네이크 케이스를 사용하여 보내주도록 바꾸려 하였으나, 똑똑한 스프링은 이를 위한 어노테이션을 제공해주고 있었다. 문제 상황 테스트 TestDto public class TestDto { private Long testId; public TestDto() { } public TestDto(Long testI..
📋 Spring MVC - 1. 웹 서버, 웹 애플리케이션 서버 2021-04-27글 웹 서버, 웹 애플리케이션 서버 웹서버 HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적 파일인 HTML, CSS, JS, 이미지, 영상 ex) NGINX, 아파치 웹 애플리케이션 서버 HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML. REST API JSP, 스프링 MVC, 서블릿 톰캣 등.. 웹 서버 vs 웹 애플리케이션 서버 웹 서버는 정적 데이터를 담당하고 애플리케이션 서버는 동적 데이터를 담당한다. 사실 둘의 용어의 경계도 모호함 웹 서버도 프로그램을 실행하는 기능을 포함하기도 함 웹 애플리케이션 서버도 웹 서버의 기능을 제공함 자바에서는 서블릿 컨테이너 기능을 제공하면 웹 ..
통합 테스트 VS 단위 테스트 2021-04-16글 통합 테스트 실제 운영 환경에서 사용될 클래스들을 통합하여 테스트한다. 스프링 프레임워크에서 전체적으로 플로우가 제대로 동작하는지 검증하기 위해 사용한다. 여러 모듈들을 모아 이들이 의도대로 협력하는지 확인하는 테스트이다. 장점 스프링 부트 컨테이너를 띄워 테스트하기 때문에 운영환경과 가장 유사한 테스트가 가능하다. 전체적인 Flow를 쉽게 테스트 할 수 있다. 단점 애플리케이션의 설정, 모든 Bean을 로드하기 때문에 시간이 오래걸리고 무겁다. 테스트 단위가 커 디버깅이 어렵다. @SpringBootTest 통합 테스트를 제공하는 기본적인 스프링 부트 테스트 어노테이션. @SpringBootTest @ActiveProfiles("test") @Transactional class C..
스프링의 DI 방법 (생성자 주입 VS 필드 주입) 2021-04-20글 스프링의 DI 방법 DI 변경에 의해 영향을 받는 관계 1. 생성자 주입(Constructor Injection) @Service public class StationConstructorService { private StationRepository stationRepository; public StationConstructorService(StationRepository stationRepository) { this.stationRepository = stationRepository; } public String sayHi() { return stationRepository.sayHi(); } } 스프링 4.3 부터는 단일 생성자인 경우 생성자에 @Authowired를 붙이지 않아..
Spring에서 request 처리 과정 2021-04-20글 Spring에서 request 처리 과정 DispatcherServlet : 클라이언트의 요청을 전달 받아 요청에 맞는 컨트롤러가 반환한 결과값을 View에 전달하여 알맞은 응답 생성 HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정 Controller : 클라이언트의 요청을 처리한 뒤, 결과를 DispatcherServlet에 반환 ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음 ViewResolver : 컨트롤러의 처리 결과를 생성할 뷰를 결정 View : 컨트롤러의 처리 결과 화면을 생성, JSP 또는 템플릿 엔진을 뷰로 사용 클라이언트가 서버에 요청을 하면 DispatcherServlet이 요청을 ..
📋 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의 노트 2021-04-16글 3. 회원 관리 예제 - 백엔드 개발 비즈니스 요구사항 데이터 : 회원 ID, 이름 기능 : 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음 일반적인 웹 애플리케이션 계층 구조 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 레포지토리 : 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 클래스 의존 관계 회원을 저장하는 것은 Repository 인터페이스. 일단은 메모리 구현체. DBMS를 자유롭게 바꿔 끼우기 위해 인터페이스로 구현하였음. Member Domain public class Member { private Long id; private String name; public Long getId() { return ..