❓ 해당 주제를 찾아본 이유 JdbcTemplate을 쓸 때 여러 구글링을 통해 사용 방법을 알아보게 되었다. 대부분의 사람들이 JdbcTemplate 을 주입받아서 사용하는 것이 아니라, DataSource 를 주입받아서 JdbcTemplate 객체를 생성해서 사용했다. private final JdbcTemplate jdbcTemplate; @Autowired public RaceResultDao(final DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } 처음 든 생각은 '왜?' 였다. JdbcTemplate 이 스프링 실행 시에 스프링 빈으로 자동으로 등록되어 있다면 DataSource 를 의존성 주입하는 것이..
1. First Try - 403 에러 처음에는 파일 테스트를 할 때 이전에 MockMvc로 테스트할 때처럼 "/user/update"의 Http Method가 patch이므로 MockMvcRequestBuilders.patch()를 사용했었다. 하지만 @RequestPart의 MultipartFile를 테스트할 때는 MockMvcRequestBuilders.patch()가 아니라 MockMvcRequestBuilders.multipart()로 따로 multipart builder가 존재한다는 것을 구글링으로 깨닫고 해당 메소드를 사용하였다. mockMvc.perform( multipart("/user/update") .file(generateMultipartFileImage()) .file(genera..
Junit 테스트 시에 @WebMvcTest와 @SpringBootTest를 대표적으로 사용하는데, 두 가지 Test 어노테이션의 차이가 존재한다고 한다. SpringBoot 테스트 시에 두 가지 어노테이션의 차이를 살펴보자. 먼저 Mock과 MockMvc에 대해서 알아보자. ※ Mock이란? 실제 객체를 만들어서 테스트하기가 어려운 경우에, 가짜 객체를 만들어서 테스트하는 기술이다. ※ MockMvc란? MVC에 관련된 Mock 가짜 객체를 말한다. 웹 어플리케이션을 애플리케이션 서버에 배포하지 않고, 테스트용 MVC 환경을 만들어서 요청 및 전송, 응답 기능을 제공해주는 객체이다. 대부분의 어플리케이션 기능을 테스트하기 위해서는 MockMvc 객체를 만들어서 테스트하게 되는데, MockMvc를 @Au..
스프링의 의존관계 주입 방법 - 3가지 필드 주입 setter 주입 생성자 주입 1. 필드 주입 @Controller public class ExampleController { @Autowired private ExampleService exampleService; } 👉 이렇게 필드 주입을 하게되면 스프링 실행 시 스프링 빈이 주입 되는데, 그 빈을 개발자가 바꿀 수 없다. 👉 테스트 코드 작성 시에 문제가 된다. 테스트 시에는 스프링 컨테이너의 도움 없이 ExampleService가 가지고 있는 여러 Repository를 자유롭게 변경하며 테스트가 가능해야 하는데, 필드 주입을 하면 스프링 실행 시 주입된 스프링 빈밖에 사용하지 못하므로 테스트 단에서 Repository 등을 스프링 컨테이너 없이 변..
update() 메소드 JdbcTemplate에서 삽입, 수정, 삭제는 update() 메소드를 사용한다. 이때, update() 메소드는 쿼리 실행 결과 변경된 행의 개수를 리턴한다! update(쿼리문, 치환자에 대한 파라미터) ※ 치환자 - ‘?’ : ex) "update users set name=? where password=?" 1. 삽입 (INSERT) public int createUser(PostUserReq postUserReq){ String createUserQuery = "insert into User (name, nickName, phone, email, password) VALUES (?,?,?,?,?)"; Object[] createUserParams = new Object[..
클라이언트와 서버의 비동기 통신 클라이언트 → 서버로 통신하는 메세지 : 요청(Request) 메세지 서버 → 클라이언트로 통신하는 메세지 : 응답(Response) 메세지 웹에서 새로고침없이 이루어지는 동작들은 대부분 비동기 통신으로 이루어진다. 비동기 통신을 하기 위해서는 클라이언트 → 서버로 요청 메세지를 보낼 때, Body에 데이터를 담아서 보내야하고, 서버 → 클라이언트로 응답을 보낼때도 Body에 데이터를 담아서 보내야한다. 이때, 데이터들을 다 JSON으로 주고 받는다. 웹페이지에서 JSON으로 Request한 파라미터들을 JAVA에서 받으려면 JAVA 객체로의 변환이 필요하고, 마찬가자로 Response 시에도 JAVA 객체에서 JSON으로 변환이 필요하다. 이러한 JSON ↔ JAVA 객..
@RequestMapping : 컨트롤러의 모든 API의 URI 앞에 기본적으로 들어가는 애노테이션 특정 URI로 요청을 보내면 Controller에서 어떤 방식으로 처리할지 정의하는데, 이때 들어온 요청을 특정 메소드와 맵핑하기 위해 사용하는 것이 @RequestMapping UMC springboot template 예제에서는 @RequestMapping 아래에 @GetMapping을 써서 부모-자식 간의 조합으로 사용했다. @RestController @RequestMapping("/users") public class UserController { @ResponseBody @GetMapping("/{userIdx}") // (GET) 127.0.0.1:9000/users/:userIdx publi..
스프링부트는 Route와 Controller가 합쳐져있다. 폴더 구조 src : 메인 로직 src 에는 도메인 별로 패키지 구성하도록 했다. 도메인이란 회원(User), 게시글(Post), 댓글(Comment), 주문(Order) 등 소프트웨어에 대한 요구사항 혹은 문제 영역이라고 생각하기. 설계할 APP을 분석하고 필요한 도메인을 도출하여 src 폴더 구성 config / util : 메인 로직은 아니지만 src 에서 필요한 부차적인 파일들을 모아놓은 폴더 Validation 값, 형식, 길이 등의 형식적 Validation - Controller 담당 DB를 거쳐 DB에서 검증해야 하는 의미적 Validation - Provider/Service 담당 전체 폴더 구조 설명 api-server-spri..