반응형
스프링 타입 컨버터(Converter) 웹 개발을 하다보면 문자를 숫자로 변환하거나, 숫자를 문자로 변환해야 하는 일이 상당히 많습니다. 특히, HTTP 요청 파라미터는 모두 문자로 처리되기 때문에 요청 파라미터를 자바에서 다른 타입으로 변환해서 사용하고 싶으면 다음과 같이 숫자 타입으로 변환하는 과정을 거쳐야 합니다. 그런데! 스프링의 요청 파라미터인 @RequestParam , @ModelAttribute , @PathVariable 어노테이션을 사용하면 스프링이 중간에 해당 요청 파라미터의 반환 타입을을 보고, 타입 변환기를 사용해서 타입을 변환해줍니다. public String hello(@RequestParam Integer data) { ... } (@RequestParam 요청 파라미터의 반..
정적 오류 페이지를 보여주고 싶다면, resources/static 동적 오류 페이지를 보여주고 싶다면, 뷰 템플릿 경로인 resources/templates 둘 중 자기가 보여주고자 하는 경로에 /error 폴더를 만들어 이 error 폴더에 발생하는 HTTP 상태 코드 이름의 HTML파일을 만들어서 넣어두기만 하면 됩니다. 5xx, 4xx는 500번 대, 400번 대 오류를 처리 해주며, 구체적인 오류코드 (ex: 404, 500)이 있다면 이 구체적인 오류코드 이름의 페이지가 우선순위가 더 높습니다. Controller @Controller public class ErrorPageTestController { @GetMapping("/error-ex") public void errorEx() { t..
@Transactional에 대해 궁금하다면 아래 포스팅을 읽어보는 것을 추천드립니다. 트랜잭션이란? 특징과 사용법에 대해 쉽게 알아보자트랜잭션(Transaction) 트랜잭션은 DB의 상태를 변경시키기 위해 수행하는 작업 단위입니다. 여기서 DB의 상태를 변경시킨다는 SELECT, UPDATE, INSERT, DELETE 와 같은 쿼리를 날려 연산을 수행하는 것입니hstory0208.tistory.com트랜잭션 전파트랜잭션을 각각 사용하는 것이 아니라, 트랜잭션이 이미 진행중인데, 여기에 추가로 트랜잭션을 진행 시킬 수 있습니다.이런 경우 어떻게 동작할지 결정하는 것을 트랜잭션 전파(propagation)라 합니다. 트랜잭션이 하나일 경우먼저 트랜잭션이 하나 있을 경우를 봅시다.트랜잭션 처리는 한번에 ..
자바 예외에 대해 예외 설 명 Object 예외도 객체다. 모든 객체의 최상위 부모는 Object 이므로 예외의 최상위 부모도 Object 이다. Throwable 최상위 예외. Throwable 하위에 Exception 과 Error 가 있다. Error 메모리 부족이나 심각한 시스템 오류와 같이 애플리케이션에서 복구 불가능한 시스템 예외 (언체크 예외) 이미 처리가 불가능한 오류 이므로 이 오류를 잡으려 해서는 안된다. Exception 체크 예외 애플리케이션 로직에서 사용할 수 있는 실질적인 최상위 예외 Exception 과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외 RuntimeException 런타임 예외 컴파일러가 체크 하지 않는 언체크 예외 RuntimeException 과 그 자식..
프록시 방식의 AOP 한계 @Transactional 어노테이션을 사용하는 트랜잭션 AOP는 프록시를 사용하는데 이 프록시를 사용하면 메서드 내부 호출에 프록시를 적용할 수 없는 한계를 갖습니다. 어떠한 한계가 생기는지 자세히 알아보기 위해 먼저 스프링 컨테이너에서 트랜잭션 프록시가 등록되는 것을 그림으로 봅시다. 스프링 컨테이너에 트랜잭션 프록시 등록 @Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있으면 있으면 트랜잭션 AOP는 위 그림처럼 프록시를 만들어서 스프링 컨테이너에 등록합니다. 이 때, 실제 TxService 객체 대신에 프록시인 TxService$$CGLIB 를 스프링 빈에 등록합니다. 그리고 프록시는 내부에 실제 TxService 를 참조합니다. 여기서 핵심은 실..
@Entity @Getter @Setter public class Order { @Id @GeneratedValue private Long id; @Column private String username; @Column private String payStatus; } Order라는 Entity 객체를 매핑하여 테스트를 돌렸을 시 아래와 같은 오류가 발생했습니다. 알아보니 이러한 오류가 발생한 문제는 다음과 같습니다. 오류 원인 Hibernate 는 JPA 엔티티 클래스를 보고 데이터베이스 테이블을 자동 생성해 줍니다. 만약 엔티티 클래스의 이름이 Item 이라면 Item이라는 테이블을 생성해줍니다. 그런데 여기서 문제가 있습니다. 데이터베이스 키워드/예약어(ORDER, GROUP, SELECT, WHE..