본문 바로가기

스프링

(17)
3-3) 스프링 입력값 검사: Bean Validation, Hibernate Validator, @Valid, @Constraint, ConstraintValidator - 입력값 검사 웹서비스를 이용하다보면 다양한 입력창과 유형에 따른 유효성 검사를 볼 수 있다. 예를들어, 이메일 입력창이 있으면 이메일 양식에 맞는지 검사가 이루어진다. Front에서 유효성 검사로 Server 호출을 막지만, 세상에는 짖굳은 사람들이 많기에 Front 유효성 검사를 무력화 시키는 경우도 있다. 따라서, 서버에서도 동일하게 입력값 체크를 해야한다. - 스프링에서의 입력값 검사: Bean Validation, Hibernate Validator 스프링에서는 데이터 검사 표준인 Bean Validation를 사용한다. 더 정확히는 그 구현체인 Hibernate Validator를 사용한다. 먼저 아래와 같이 Hibernate Validator를 사용할 수 있도록 dependency를 추가한..
3-2) 스프링 MVC 핸들러(Handler): @ReqeustMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping, @RequestParam - 스프링 MVC 핸들러 MVC의 Controller 안에서 실제 요청을 처리하는 메소드를 핸들러(Handler)라고 한다. 사용자로부터 서버로 요청이 가면, 해당 요청에 맞는 컨트롤러의 핸들러로 요청 정보가 전해지고, 핸들러는 이를 처리하여 적절한 값을 반환 한다. 그리고 요청과 핸들러를 연결하는 것을 핸들러 맵핑(Handller Mapping)이라고 하고, @RequestMapping 어노테이션을 사용하여 맵핑이 이루어진다. - 요청 맵핑: @RequestMapping Http Request, 즉 서버로의 요청 정보는 다음과 같은 구조로 되어있다. 먼저 요청하는 첫번쨰 줄(start-line)에 메소드와 URL 요청경로가 나오고, 그 다음 헤더(http headers)에 요청자의 정보와 주고받을 데이..
Postgresql ERROR: conflicting values for "mm" field in formatting string 에러 스프링 Mybatis에 대해 공부하던 중, 아래와 같은 에러가 발생했다. SQL 실행중 발생한 에러로 Postgresql 문법을 제대로 몰라서 발생한 에러였다. INSERT INTO MY_TABLE( ..., start_date, ...) VALUES( ..., TO_DATE('2020-12-31 23:59:59', 'yyyy-MM-dd hh:mm:ss'), ...) ERROR: conflicting values for "mm" field in formatting string 실행한 INSERT 문을 잘 보면 알겠지만, TO_DATE에 MM과 mm이 동시에 존재한다. 나는 각각 월과 분을 표시한다고 했지만 실제 Postgresql 에서는 둘다 월이다. 분을 나타내기 위해서는 "mi"를 사용해야 한다. I..
자바 Failed to instantiate [java.util.List]: Specified class is an interface 에러 자바 스프링기반으로 웹서비스를 개발하던 중, 다음과 같은 에러가 발생했다. @PostMapping("/mypath") public ResultView myPostMethod(List myList) { return new ResultView(myService.doSomething(myList)); } org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.util.List]: Specified class is an interface 위에 보이는 /mypath API를 호출하면, List가 인터페이스 이기 때문에 이를 초기화 할수 없다는 에러가 발생한다. 에러 문구만 보고 List를 ArrayList로 변경해주면, 에..
MyBatis: Mapped Statements collection already contains value for ~ 에러 MyBatis를 사용하여 API 서버를 개발하던 중, 다음과 같은 에러를 만났다. Mapped Statements collection already contains value for ~ 검색을 해보니 중복되는 Id가 존재할 경우 이러한 에러가 발생한다고 해서, 마이바티스의 맵퍼 xml 파일을 뒤져보았다. ... ... ... 그 결과, 동일한 Id를 가진 select 구문을 찾았고 이를 수정하니 에러가 발생하지 않았다.
MyBatis: Result Maps collection already contains value for ~ 에러 MyBatis를 사용하여 API 서버를 개발하던 중, 다음과 같은 에러를 만났다. Result Maps collection already contains value for ~ 검색을 해보니 중복되는 Id가 존재할 경우 이러한 에러가 발생한다고 해서, 마이바티스의 맵퍼 xml 파일을 뒤져보았다. ... ... ... 그 결과, 동일한 Id를 가진 resultMap 구문을 찾았고 이를 수정하니 에러가 발생하지 않았다.
3-1) 스프링 MVC 기초: WebApplicationInitializer, WebMvcConfigurerAdapter, @EnableWebMvc, @Controller, InternalResourceViewResolver, jsp - MVC 패턴 MVC 패턴은 다양한 웹 프레인워크에 적용된 디자인 패턴이다. 클라이언트로부터 요청을 받고, 요청에 맞는 처리를 하고, 응답을 만드는 과정을 분리하여 유연하고 효율적으로 코드를 작성할 수 있도록 한다. 이때 요청에 따른 처리를 하는 부분을 Model, 응답을 만드는 부분을 View, 요청을 받는부분을 Controller라고 하고, 각 앞글자를 따서 MVC 패턴이라고 부른다. Model(모델) 어플리케이션의 데이터나 로직을 처리하는 역할 View(뷰) 클라이언트에 반환할 응답을 생성하는 역할 Controller(컨트롤러) 클라이언트의 요청에 따라 모델과 뷰의 호출을 제어하는 역할 Spring MVC는 MVC 패턴을 채택한 프레임 워크로, 스프링 웹 어플리케이션 개발에 필수적으로 사용된다. ..
2-2) 스프링 트랜잭션 관리: ACID, Dirty Read, Repeatable Read, Pantom Read, @EnableTransactionManagement, @Transactional, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE - 데이터베이스 트랜잭션 데이터베이스 트랙잭션이란, 데이터관리 시스템에서 사용되는 업무처리 단위를 말한다. 은행에는 송금이라는 기본적인 기능이 있다. 송금은 내부적으로 출금 계좌에서 돈을 꺼내는 과정과, 입금 계좌에 돈을 넣는 과정으로 나누어 볼 수 있다. 여기서 두개의 과정중 일부만 실패하거나 성공하는 경우는 일어나서는 안된다. 이처럼 트랜잭션은 지켜져야하는 조건이 있는데 이를 ACID라고 부른다. - RDB의 특징: ACID 최근 NoSQL과 같은 새로운 형태의 DB가 인기를 끌고 있긴 하지만, 여전히 대다수의 서비스에서는 관계형 데이터베이스(Relational Database), RDB를 사용한다. RDB는 키와 값들의 간단한 관계를 테이블화 시킨 데이터베이스이다. 그리고 RDB에서 지켜져야하는 다..