목록웹/Spring Framework (26)
송민준의 개발노트
mybatis xml 파일 내부에 mapper 태그 안에 ~~~~ 추가해주면 됨. resultType이 아닌 resultMap으로 해줘야함
우선 쓰레드가 뭔지 알아야함. 간략하게 정리하자면 프로세스가 운영체제로부터 할당 받는 작업 단위인데 쓰레드는 하나의 프로세스가 할당 받는 자원을 이용하는 작업 단위임. ThreadLocal 글자 그대로 쓰레드의 지역변수임. 오직 한 쓰레드에 의해 읽고 쓰여질 수 있는 변수를 생성할 수 있도록 함. - 목적 : 쓰레드라는 scope 내에서 공유되어 사용될 수 있는 값으로 다른 쓰레드에서 공유변수를 접근할 시 발생할 수 있는 동시성 문제의 예방을 위해 만들어졌다. - 특징 1) ThreadLocal은 변수 타입을 다루기 쉽도록 제너릭으로 생성 가능함 2) 값을 세팅한 Thread만 접근할 수 있음. 모든 Thread가 사용할 수 있는 쓰레드로컬 초기값은 없지만 initialValue() 메소드를 오버라이딩 ..
어떻게 나누어지는가? Exception은 Checked Exception과 Unchecked Exception으로 구분이 되는데 Unchecked Exception은 runtime Exception을 상속하기 때문에 별다른 처리를 안해줘도 롤백이 되고 Checked Exception은 상속하지 않기 때문에 rollback이 안된다. 예를 들어 SQLException이나 IOException인 경우 Checked Exception에 해당되고 Exception 처리를 안해주면 Rollback이 안된다. 해서 Checked Exception은 명시적으로 처리를 해줘야하기 때문에 throws나 try catch로 처리를 해줘야 하고 반면 Unchecked Exception은 묵시적으로 된다. 왜 Checked ..
기본적으로 URL 을 http://localhost:8088/hansong/v1/members/test@kakao.com 위처럼 해주면 뒤에 .com을 빼고 변수에 담는다. 이에 대한 해결방안은 뒤에 ':.+' 를 붙여주는 것인데 예를 들어 @GetMapping(value = "/{email:.+}") public EntityModel getUser(@PathVariable String email) { 위와 같이 해주면 된다. 이렇게 해도 406에러가 발생한다면 스프링 설정을 하나 추가해줘야한다. javaconfig 기준으로 WebMvcConfigurer 를 상속받는 곳에서 아래와 같이 설정해준다. @Override public void configureContentNegotiation(ContentNe..
lemontia.tistory.com/925 [spring] 테스트 중 Unable to initialize 'javax.el.ExpressionFactory' 해결하기 - validator 2.0.0(JSR-380) 적용 레거시 프로그램에 validator를 적용하기로 했다. validator는 총 3가지 버전이 있는데 다음과 같다 Bean Validation 1.0(JSR-303) Bean Validation 1.1(JSR-349) Bean Validation 2.0(JSR-380) 그래서 추가하기.. lemontia.tistory.com
Spring 및 mybatis가 세팅이 되어 있다는 가정 하에 사용법이다. (먼저 서비스단에서 DAO 가 DI 됨) 1. 서비스단 objectDAO.call("리소스이름", 파람데이터); if(!"식별값".equals(파람데이터.get("에러코드")) { throw 어떤Exception("~", 파람데이터.get("에러메시지").toString()); } 2. DAO @Autowired private SqlSessionTemplate sqlSession; public Object call(String sql, Map(또는 커스텀Object) map) throws Exception { return sqlSession.update(sql, map); } 3. XML {call 프로시저명( #{파람1,mode..
* 사용 시 주의사항 @Transactional 을 클래스 또는 메소드 레벨에 명시하면 해당 메서드 호출 시 지정된 트랜잭션에 작동하게 된다. 단 조건이 있다. 해당 클래스의 Bean을 다른 클래스의 Bean에서 호출할 때만 @Transactional을 인지하고 작동하게 된다. ( 같은 빈 내에서는 작동하지 않음), Spring은 내부적으로 AOP를 통해 어노테이션을 인지해서 프록시 생성을 하여 트랜잭션을 자동으로 관리하기 때문임. 1. 트랜잭션의 성질 1) 원자성(Atomicity) - 한 트랜잭션 내에 실행한 작업들은 하나로 간주한다. 즉 모두 성공 또는 실패 2) 일관성(Consistency) - 트랜잭션은 일관성 있는 데이터베이스 상태를 유지한다. 3) 격리성(isolation) - 동시에 실행되..
### Error querying database. Cause: java.lang.NumberFormatException: For input string: "Y" ### Cause: java.lang.NumberFormatException: For input string: "Y" 에러를 뿜뿜 뿜어대는 스프링 마이바티스 에러인데 위에 처럼 사용했더니 에러가 뜬다. 해결방법은 간단하다 싱글코트와 더블코트의 위치를 바꿔주면 된다.