backend 4

[Effective Java : Item 2] 생성자에 매개변수가 많다면 빌더를 고려하라

개요 생성자와 정적 팩터리 메서드에는 공통적인 제약이 하나 있는데, 바로 매개변수가 많을 경우 적절히 대응하기 힘들다는 점이다. 식품 포장의 영양정보를 표현하는 클래스가 있다고 가정하자. 이 클래스에는 다양한 영양 정보를 표시하기 위해 수많은 필드들이 있을 것이다. 만약 특정 식품 포장에 영양정보를 표현하기 위해 이 클래스를 사용한다면 대부분의 제품은 필수 값을 제외하고 선택 항목들의 값이 0이 될 것이다. 위와 같은 문제를 해결하기 위해 다음과 같은 대안이 있다. 점층적 생성자 패턴(telescoping constructor pattern) 자바 빈즈 패턴(JavaBeans pattern) 빌더 패턴(Builder pattern) 빌더 패턴이 가장 권장되는 것처럼 제목에서부터 언급하지만, 그 이유를 알..

Backend/Java 2024.01.19

[IntelliJ] Resources 폴더를 찾지 못할 때 해결 방법 (application.properties 인식 방법)

개발 환경 IntelliJ 2022.2.2 Ultimate Spring Framework Maven 오류 메시지 및 원인 Error creating bean with name 'rootController': Injection of autowired dependencies failed; 프로젝트를 Git에서 클론하여 처음 빌드하는 중 위와 같은 오류가 발생하며 빌드가 진행되지 않았다. 원인을 살펴보니 Spring Bean이 제대로 주입되지 않고 있었고, 이는 application.properties를 제대로 인식하지 못하여 발생하고 있었으며, 결론적으로 IntelliJ가 src/main 하위의 resources 폴더를 제대로 찾지 못하고 있었기 때문이었다. 해결 방법 비교적 간단하게 해결이 가능하다. In..

Backend 2023.01.27

[SQL] Select절에 별칭(AS) 사용 후 Where절 Unknown Column 발생 이유

에러 메시지 SQL 오류 (1054): Unknown column 'xxx' in 'where clause' 원인 한 마디로 요약하자면 Select절 이전에 Where절이 실행되기 때문이다. 작성 순서상에는 Select 다음에 Where 절이라 실제 실행 순서를 간과한게 문제였다. 해결 방법 MySQL의 경우 각 절의 실행 순서는 아래와 같다. (Oracle 등 다른 DB의 경우 다를 수 있다.) FROM WHERE SELECT GROUP BY HAVING ORDER BY LIMIT 따라서, Where 대신 Having을 사용하여 문제를 해결할 수 있다. SELECT id AS userId FROM users HAVING userId = 272

Backend/SQL 2022.12.06

[Spring / MyBatis] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

오류 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 문제 MyBatis를 사용하는 Spring Boot 프레임워크에서 DB 커넥션 테스트 이후 Service를 테스트하는데 위 오류와 마주하게 되었다. 서칭 결과 다음과 같이 원인을 정리할 수 있었다. Mapper.xml 파일 쿼리문에 오타가 존재 쿼리문의 메서드 id가 mapper 인터페이스와 불일치할 때 Mapper.xml 경로 설정이 잘못되어 불러오지 못할 경우 필자의 경우 Mapper.xml 파일을 resources 밑이 아닌 java 패키지 밑에 작성하였었는데, 별도 설정을 하지 않아 Maven 에서 Mapper를 resources 패키지 하위에서만 불..

Backend/Spring 2022.10.05
반응형