본문 바로가기

빈수 개발자 개발 일기

(898)
Sql Mapper (mybatis) 의 단점 요약 ! Sql Mapper 는 java 와 xml 이 완전히 분리되어 있어 JDBC 를 사용하는 것에 비해 편리하다. 하지만 Sql Mapper 프레임워크도 단점이 존재한다. 그 단점에 대해 알아보려 한다. 반복되는 코드와 SQL SQL 을 직접 사용하므로 테이블이 많아지면 Value 클래스가 많이 필요하다. 또한 테이블이 많아질수록 SELECT, INSERT, UPDATE, DELETE 기본 쿼리도 테이블 개수만큼 작성해야 한다. SELECT 구문이 복잡해지거나 조인 쿼리를 사용할 때마다 객체 클래스 들이 더 필요하게 되다. 이와 비례하여 XML Mapper 에 쿼리 결과와 값 객체 클래스의 속성을 매핑하는 구문이 추가된다. DAO 클래스의 메서드가 늘어나면 메서드 개수에 비례하여 SQL 코드양이 증가한다. ..
[Spring] Spring Bean 에 대한 기록 SpringBean ? Spring 을 말할 때 빼먹을 수 없는 용어이다. Spring Bean 스프링에서는 스프링이 제어권을 가지고 직접 만들고 관계를 부여하는 오브젝트를 빈이라고 칭한다. 또한, 스프링 컨테이너가 생성과 관계설정, 사용들을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 말이다. 면접용 질문에 대한 답으로는 아래와 같이 명확한 답이 준비되어있다. '스프링 빈은 스프링 컨테이너에 의해 관리되는 자바 객체(POJO)를 의미한다.' Spring Container 스프링 컨테이너는 스프링 빈의 생명 주기를 관리하며, 생성된 스프링 빈들에게 추가적인 기능을 제공하는 역할을 한다. IoC와 DI의 원리가 스프링 컨테이너에 적용된다. 개발자는 new 연산자, 인터페이스 호출, 팩토리 호출 방식..
Criteria API 에 대해 알아보기 - Criteria 란 ? Criteria 는 JPQL 의 작성을 도와주는 빌더 클래스이다. 문자열로 JPQL 을 작성하면 런타임이 되어야 문법 오류를 알 수 있지만 Criteria 는 자바 코드 기반이기 때문에 안전하게 JPQL 을 작성할 수 있다. 하지만 코드가 복잡해서 직관적으로 이해하기 힘들다는 의견도 있다. 대부분의 내용이 JPQL 과 중복되므로 사용법위주로 살펴보자. - Criteria 의 장점 문자가 아닌 query,select(m).shere(...) 처럼 프로그래밍 코드로 JPQL 을 사용할 수 있다. 컴파일 시점에 오류를 발견할 수 있다. IDE 를 사용하면 코드 자동 완성을 지원한다. 동적 쿼리를 작성하기 편하다. - Criteria 의 단점 이것만 보면 Criteria가 가진 장점이..
[Retrofit 에러] com.fasterxml.jackson.databind.exc.InvalidDefinitionException com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `com.rsn.test.api.retrofit.Repo` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator) at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 1, column: 3] (through reference chain: java.util.ArrayList[0]) at com.fasterxml.jackson.d..
[JAVA] 문자열 받고, 초성으로 반환해주자. 초코렛 > ㅊㅋㄹ 자바 > ㅈㅂ 안녕 > ㅇㄴ 안녕하세요. 저는 개발중이에요. > ㅇㄴㅎㅅㅇㅈㄴㄱㅂㅈㅇㅇㅇ /** * 초성 반환 */ public String getInitialSound(String word){ String[] CHO = {"ㄱ","ㄲ","ㄴ","ㄷ","ㄸ","ㄹ","ㅁ","ㅂ","ㅃ","ㅅ","ㅆ","ㅇ","ㅈ","ㅉ","ㅊ","ㅋ","ㅌ","ㅍ","ㅎ"}; return Arrays.stream(word.split("")).map( x -> { char cho = (char)((x.charAt(0) - 0xAC00) / 28 / 21); return ((int)cho > 19 || (int)cho < 0) ? "" : CHO[(int)cho]; }).collect(Collectors...
[Spring] 스프링 생성자 주입 방법 3가지 스프링에서는 의존성 주입이라는 특징이 있는데, 의존성을 주입하기 위한 세 가지 방법을 알아보자. 1. 생성자 주입(Constructor Injection) 클래스의 생성자가 하나이고, 그 생성자로 주입받을 객체가 빈으로 등록되어 있다면 @Autowired를 생략 할 수 있다. @Controller public class binsooController { private final BinsooService binsooService; @Autowired public binsooController(BinsooService binsooService) { this.binsooService = binsooService; } } 2. 필드 주입(Field Injection) 필드에 @Autowired 어노테이션만 붙여..
[QueryDsl 에러] java.lang.NoSuchFieldError: TREATED_PATH java.lang.NoSuchFieldError: TREATED_PATH at com.querydsl.jpa.JPQLTemplates.(JPQLTemplates.java:147) ~[querydsl-jpa-5.0.0.jar:na] at com.querydsl.jpa.JPQLTemplates.(JPQLTemplates.java:51) ~[querydsl-jpa-5.0.0.jar:na] at com.querydsl.jpa.JPQLTemplates.(JPQLTemplates.java:46) ~[querydsl-jpa-5.0.0.jar:na] at com.querydsl.jpa.impl.JPAProvider.(JPAProvider.java:59) ~[querydsl-jpa-5.0.0.jar:na] at com...
[Spring Data JPA] No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call 에러 해결 No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'persist' call @Transactional 어노테이션을 명시하지 않아서 발생하는 에러이다. 기본적으로 JPA는 transaction을 기반으로 작동하게 되어있다. transaction 단위에 따라 1차캐시영역..