GitHub

https://github.com/Choidongjun0830

스프링부트 7

[Spring DB2] 데이터 접근 기술 - 테스트

데이터 접근 기술을 테스트할 때 어떤 식으로 할 것인지를 배우는 챕터 테스트에서 중요한 원칙 테스트는 다른 테스트와 격리해야 한다. 테스트는 반복해서 실행할 수 있어야 한다. 테스트 - 데이터베이스 연동 먼저 데이터베이스 연동을 위해 test#application.properties에 아래 코드를 작성한다. spring.profiles.active=test spring.datasource.url=jdbc:h2:tcp://localhost/~/test2 spring.datasource.username=sa spring.datasource.password= #jdbcTemplate sql log logging.level.org.springframework.jdbc=debug @SpringBootTest cl..

Spring 2024.03.17

스프링으로 트랜잭션 문제 해결

프레젠테이션 계층(컨트롤러), 서비스 계층, 데이터베이스 접근 계층 중 가장 중요한 것은 비즈니스 로직을 담고 있는 서비스 계층이다. 서비스 계층은 가능한 순수한 자바 언어로 이루어져 변경이 자주 일어나지 않도록 해야 한다. 하지만 트랜잭션에서 배우고 실습했던 코드들은 SQLException과 같은 JDBC에 속하는 오류를 담고 있고, MemberRepositoryV1이라는 구체 클래스에 의존되어 있다. 따라서 컨트롤러나 데이터베이스 접근 계층의 변경이 일어나면 서비스 계층도 바꿔야 한다. 트랜잭션은 서비스 계층에서 구현되어야 하는데 트랜잭션 코드를 위한 try catch finally 같은 코드들의 중복도 많다. 그리고 JDBC와 JPA의 트랜잭션 구현 코드도 다르다. 기술을 변경하게 되면 서비스 계층..

Spring 2024.02.13

스프링 타입 컨버터

@RestController public class HelloController { @GetMapping("/hello-v1") public String helloV1(HttpServletRequest request) { String data = request.getParameter("data"); //문자 타입으로 조회 Integer intValue = Integer.valueOf(data); //숫자 타입으로 변경 System.out.println("intValue = " + intValue); return "ok"; } @GetMapping("hello-v2") //@RequestParam을 사용하면 스프링이 중간에서 타입 변환을 해줌 public String helloV2(@RequestParam..

Spring 2024.01.15

API 예외 처리

API는 각 오류 상황에 맞는 오류 응답 스펙을 정하고, JSON으로 데이터를 내려주어야 한다. 스프링 부트가 제공하는 BasicErrorController는 HTML 페이지를 제공하는 경우에는 편리하지만, API 오류 처리는 각각의 컨트롤러나 예외마다 서로 다른 응답 결과를 출력해야 할 수도 있기 때문에 복잡하다. 'IllegalArgumentException'이 일어나고 아무런 처리를 안해주면 500 에러가 발생하는데 이것을 400에러로 바꾸어 주려면 'ExceptionResolver'를 활용해야 한다. HandlerExceptionResolver 활용 예외 상태 코드 반환 예외를 response.sendError(xxx)로 변경해서 서블릿에서 상태 코드에 따른 오류를 처리하도록 함 이후 WAS는 서..

Spring 2024.01.13

검증1-Validation

웹에서 입력받을 때 입력받은 값이 내가 원하는, 유효한 값인지 확인하고 원하는 값이 아니라면 사용자에게 알리는 방법. public String addItemV1(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes) { if(!StringUtils.hasText(item.getItemName())) { //itemName에 글자가 없으면 bindingResult.addError(new FieldError("item", "itemName", "상품 이름은 필수입니다.")); } ... //특정 필드가 아닌 복합 룰 검증 if(item.getPrice() != null && item.getQua..

Spring 2024.01.04

메시지, 국제화

message.properties파일에 hello=안녕 hello.name=안녕 {0} label.item=상품 label.item.id=상품 ID label.item.itemName=상품명 label.item.price=가격 label.item.quantity=수량 page.items=상품 목록 page.item=상품 상세 page.addItem=상품 등록 page.updateItem=상품 수정 button.save=저장 button.cancel=취소 이와 같이 적고 html 파일에는 상품명 이처럼 #을 이용하여 변수명을 넣어주면 알아서 상품명을 넣어준다. 만약 영어권에서 접속을 했다면 message_en.properties에 적힌 대로 스프링부트가 알아서 바꾸어준다.

Spring 2024.01.01
728x90