JSP에서 SpEL 사용 시 null 인 경우 예외 발생

배경 Spring Framework에서는 view가 JSP 인 경우에 대한 여러 가지 기능을 tag 기능으로 제공해주고 있다. 그 중 eval 태그를 사용하면 JSP에서 변수를 할당하거나 출력할 수 있다. <spring:eval expression="someVariable" /> 위 예시에서 someVariable이 null 인 경우에 SpelEvaluationException 가 발생한다. 해결 방법 이를 해결하기 위해서는 사용할 변수의 scope를 명확하게 명시해야 된다고 한다. <spring:eval expression="requestScope['someVariable']?.bytes"/> 참고 자료 https://github.com/spring-projects/spring-framework/issues/13211 https://stackoverflow.com/questions/16289341/how-to-pass-a-null-variable-into-a-spring-expression-in-jsp https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/spring-tld.html#spring.tld.eval

2024-09-15 · 1 min · 57 words

JdbcTemplate와 템플릿 콜백 패턴

템플릿/콜백 패턴: 전략 패턴의 기본 구조에 익명 내부 클래스를 활용한 방식이다. 템플릿/콜백 패턴은 DI 방식의 전략 패턴 구조다. 클라이언트가 템플릿 메소드를 호출하면서 콜백 오브젝트를 전달하는 방식으로 메소드 레벨에서 일어나는 DI다. 템플릿: 어떤 목적을 위해 미리 만들어둔 모양이 있는 틀을 가리킨다. 템플릿 메소드 패턴은 고정된 틀의 로직을 가진 템플릿 메소드를 슈퍼클래스에 두고, 바뀌는 부분을 서브 클래스의 메소드에 두는 구조로 이루어진다. 콜백: 실행되는 것을 목적으로 다른 오브젝트의 메소드에 전달되는 오브젝트를 말한다. 자바에선 메소드 자체를 파라미터로 넘기지 못하기 때문에 메소드가 담긴 오브젝트를 넘긴다....

2024-09-15 · 1 min · 136 words

FactoryBean

상황 코드에서 FactoryBean이라는 인터페이스를 빈으로 등록하는 부분이 있었는데, 어떤 용도인지 궁금했다. Factory Bean의 역할 다른 Bean을 생성하고 Spring IoC 컨테이너에 등록하는 Bean이다. 사용 예시 JndiObjectFactoryBean: JNDI에서 데이터 소스를 조회하는데 사용 ProxyFactoryBean: AOP를 사용하여 bean에 대한 프록시를 생성하는데 사용 Factory Bean 생성하는 방법 FactoryBean 인터페이스의 구현체를 빈으로 등록한다. AbstractFactoryBean을 확장한다. 이 추상 클래스는 getObjectType()과 createInstance() 메서드만 구현하면된다. 해당 추상 클래스에서는 싱글톤 패턴을 사용하고 있어 쉽게 싱글톤으로 빈을 관리할 수 있게해준다. 참고 자료 https://www....

2024-09-15 · 1 min · 72 words

EJB, Java Bean, POJO, Spring Bean

EJB(Enterprise JavaBeans): J2EE(Java EE)가 자바 웹 애플리케이션 시장을 차지하고 있을 때, 사용되었던 애플리케이션측의 컴포넌트 모델. 여기에는 Session Bean, Entity Bean, Message-driven Bean 등이 있다. 하지만 이는 객체지향적이지 못하고 특정 환경/기술에 종속적이라는 단점이 있다. Java Bean: J2EE(Java EE)에서는 데이터를 표현하기 위해서 어떤 규약을 지켜야했다. 이 규약을 Java Bean이라고 부른다. POJO: 위의 EJB의 단점을 지적하여 일반 자바 객체로 비즈니스 로직을 구현하자는 주장이 만들어졌다(마틴 파울러). 이 때 이 자바 객체를 POJO라고 부른다. Spring Bean: 컨테이너에 의해서 생명주기가 관리되는 객체로 이 때 객체를 POJO 형식을 따르고 있다....

2024-09-15 · 1 min · 83 words

ConditionalOnProperty

배경 @ConditionalOnProeprty라는 어노테이션을 코드에서 봤는데 동작 방식을 분명하게 이해하지 못 하고 있었다. 목적 configuration property의 값에따라 조건부로 빈을 생성할 때 사용할 수 있다. 클래스 위나 메서드 위에 붙일 수 있다. 각 필드 설명 prefix: 공통적으로 사용되는 property의 prefix name: property의 이름 value: name과 같다. havingValue: property의 값. 만약 명시하지 않거나 빈 값이면, property의 값이 false만 아니면 된다. matchIfMissing: property가 존재하지 않으면 match되는지 여부의 설정. 참고 자료 https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/condition/ConditionalOnProperty.html

2024-09-15 · 1 min · 67 words

CommandLineRunner

구동 시점으로 받은 커맨드 인자를 기반으로 코드를 실행시킬 수 있다. https://www.daleseo.com/spring-boot-runners/

2024-09-15 · 1 min · 11 words

build 후에 실행 시 no main manifest attribute 에러 해결

대부분 SpringBoot 플러그인을 추가해주지 않아서 발생하는 문제다. SpringBoot 플러그인에는 Spring Boot 애플리케이션을 jar 파일로 패키징을 도와주기 위한 플러그인이므로 필요하다. 참고 자료 https://dingue.tistory.com/17 https://kotlinworld.com/323 https://stackoverflow.com/questions/54121894/executing-springboot-application-as-jar-gives-no-main-manifest-attribute

2024-09-15 · 1 min · 24 words