반응형

파일 업로드를 할 때, TIF , TIFF와 같은 썸네일을 뽑아내야 하는 상황이 생겼습니다.

 

처음에는 단순하게

import javax.imageio.ImageIO;

기본적으로 제공되는 위 라이브러리만 불러와서 사용하면 되는줄 알았습니다.

 

하지만, 모든 확장자에 대해 가능한 것이 아닌 대중적으로 사용하는 JPEG, PNG, BMP ..등등 에 대한 것만 가능하다는 것을 알게되었습니다.

 

여기서 조금 해매다가 얻은 결과로는 추가적으로 라이브러리가 필요하다는 정보를 얻었습니다.

 

https://mvnrepository.com/artifact/com.twelvemonkeys.imageio

 

위 사이트에서 필요한 파일 확장자에 대해서만 maven에 등록하여도 되고, 그냥 전체적으로 파일에 대한 모든 확장자들을 추가하고싶으면 

 

Maven 프로젝트의 경우 

<dependency>
    <groupId>com.twelvemonkeys.imageio</groupId>
    <artifactId>imageio-core</artifactId>
    <version>3.8.2</version>
</dependency>

의 내용을 pom.xml 에 추가해주시고,

 

Gadle 프로젝트의 경우

implementation group: 'com.twelvemonkeys.imageio', name: 'imageio-core', version: '3.8.2'

위 내용을 build.gradle 에 추가해주시면 될 것 같습니다.

 

 

공식 라이센스 제공 사이트

https://github.com/haraldk/TwelveMonkeys#license 

 

GitHub - haraldk/TwelveMonkeys: TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO

TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO - GitHub - haraldk/TwelveMonkeys: TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO

github.com

 

반응형

'Spring > 새롭게 얻은 정보들' 카테고리의 다른 글

[MaBatis] MyBatis 란?  (0) 2020.12.15
Spring - @Autowired & @Qualifier  (0) 2020.05.04
Spring - 의존(Dependency Injection)  (0) 2020.05.04
반응형

MyBatis 란?

자바 오브젝트와 SQL문 사이의 자동 매핑기능을 지원하는 ORM 프레임워크이다.

 

- MyBatis는 SQL을 별도의 파일로 분리해서 관리

- JDBC 코드의 불편함을 해소 해줌

- SQL이 변경되어도 자바 코드를 수정할 필요가 없다.

 

MyBatis 컴포넌트

- SqlMapConfig.xml : DB 접속 주소 정보나 Mapping 파일의 경로 제공

- SqlSession FactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성

- SqlSessionFactory : SqlSession을 생성

- SqlSession : SQL 실행 또는 트랜잭션 관리

- Mapping 파일 : SQL문과 ORM 설정

 

MyBatis-Spring의 컴포넌트

- sqlMapConfig.xml : VO 객체의 정보 설정

- SqlSessionFactoryBean : MyBatis 설정파일을 바탕으로 SqlSessionFactory 생성 후 Spring Bean으로 등록

- SqlSessionTemplate SQL 실행이나 트랜잭션 관리

- Mapping 파일 : SQL문과 ORM 설정

- Bean 파일 : SqlSessionFactoryBean  SqlSessionTemplate을 Bean으로 설정

반응형
반응형

 

Autowired 란?

의존 대상을 설정 코드에서 직접 주입하지 않고 스프링이 자동으로 의존하는 빈 객체에 주입해주는 것을 자동 주입해주는 것 을 뜻합니다.

 

Autowired 설정하는 방법은 간단합니다.

 

1
2
3
4
5
6
7
8
9
10
11
@Service
public class GogekService {
    
    @Autowired
    private GogekDao GogekDao;
 
    
    public void setGogekDao(GogekDao gogekDao) {
        this.gogekDao = gogekDao;
    }
}
 

 

4 행에서 GogekDao 필드에 @Autowired 어노테이션을 추가해주었습니다.

@Autowired 어노테이션을 붙이면 설정 클래스에서 의존 주입을 하지 않아도 됩니다.

 

필드에 어노테이션이 붙어있으면 스프링이 해당 타입의 객체를 찾아 할당합니다.

 

 

Qualifier

 

자동 주입 가능한 빈이 2개 이상이면 주입할 빈을 따로 지정할 때 사용하는 어노테이션 종류입니다.

 

@Qualifier 어노테이션 사용 방법 1.

1
2
3
4
5
6
7
8
9
@Configuration
public class Gogek {
 
    @Bean
    @Qualifier("info")
    public GogekInfo gogekInfo() {
        return new GogekInfo();
    }
}

 

해당 소스코드에서 gogekInfo() 메서드에 "info" 값인 @Qualifier 어노테이션을 붙여 해당 빈의 한정하여 "info" 로 준다.

 

 

@Qualifier 어노테이션을 사용 방법 2.

1
2
3
4
5
6
7
8
9
10
11
12
public class Gogek {
    private GogekDao gogekDao;
    private GogekInfo info;
 
    ....
 
    @Autowired
    @Qualifier("info")
    public void setGogekInfo(GogekInfo info) {
        this.info = info;
    }
}
 

 

해당 소스코드는 setGogekInfo() 메서드에 @Autowired 어노테이션을 붙였으므로 GogekInfo타입의 빈을 자동으로 주입해줍니다.

여기서 Qualifier 값은 "info" 이므로 한정 값을 info로 의존 주입 후보로 지정합니다.

 

- 빈 이름과 기본 한정자

 

1
2
3
4
5
6
7
8
@Configuration
public class Gogek {
 
    @Bean
    public GogekInfo gogekInfo() {
        return new GogekInfo();
    }
}

 

Qualifier로 별도 지정해주지 않은 메소드의 경우는 메소드의 이름을 빈 이름으로 사용하게 됩니다.

 

여기서는 gogekInfo가 한정자가 됩니다.

 

Autowired는 필수사항일까 ?

 

Autowired는 붙인 타입에 해당하는 빈이 존재하지 않으면 오류를 출력한다.

 

이렇게 자동 주입할 빈이 없으면 불필요하게 Autowired를 사용할 필요가 없는 것이다. 그런 경우 Autowired의 속성을 false로 지정해주면 해결된다.

 

@Autowired(required = false)

반응형
반응형

스프링에서의 의존이란 ?

 

- DI (Dependency Injection)의 약자로 '의존 주입'이라고 합니다.

 

- 의존하는 객체를 직접 생성하는 것이 아닌 의존하는 객체를 전달받는 방식입니다 

 

- 기존 의존 객체를 직접 생성하는 방법은 new 연산자를 이용합니다.

 

- 여러 코드에서 사용하는 경우, 직접 생성하지 않고 DI를 이용하면 직접 생성했던 방식 (코드마다 수정이 필요한 방법)에 비하여 의존 주입 대상이 되는 객체에서 생성한 코드의 부분에서만 변경하면 됩니다.

 

- 객체를 생성하고 의존 객체를 주입해 주는 클래스를 따로 작성하는 방법을 조립기라고도 합니다.

 

 

- DI 방식 2가지

 

방법 1. 생성자 방식

 

1
2
3
4
5
6
7
8
9
@Service
public class GogekService {
 
    private GogekDao gogekDao;
 
// 생성자 통해서 의존 객체 주입 받기
    public GogekService(GogekDao gogekDao) {
        this.gogekDao = gogekDao;
    }
 

 

- 생성자 방식은 빈 객체를 생성하는 곳에서 모든 의존 객체가 주입

 

- 이 방식의 단점은 생성자의 파라미터 개수가 많으면 각 인자가 어떤 의존 객체를 정하는지 확인 하려면 생성자의 코드를 확인해야 합니다.

 

방법 2. 세터 메서드 방식

 

1
2
3
4
5
6
7
8
9
10
@Service
public class GogekService {
 
    private GogekDao GogekDao;
 
    @Autowired
    public void setGogekDao(GogekDao gogekDao) {
        this.gogekDao = gogekDao;
    }
}
 

 

- 세터 방식은 세터 메서드 이름을 통해 어떤 의존 객체가 주입되는지 알 수 있다.

 

- 이 방식의 단점은 필요한 의존 객체를 전달하지 않아도 불필요한 객체가 생성되기 때문에 널포인트에러가 발생할 수 있습니다.

반응형

'Spring > 새롭게 얻은 정보들' 카테고리의 다른 글

[Spring] FileUpload 썸네일 확장자 dependency  (0) 2022.04.15
[MaBatis] MyBatis 란?  (0) 2020.12.15
Spring - @Autowired & @Qualifier  (0) 2020.05.04

+ Recent posts