Firo 트러블슈팅 가이드
일반적인 문제 해결
1. Firo 초기화 실패
문제: "Failed to initialize Firo" 오류
Caused by: java.lang.RuntimeException: Azure Blob Storage initialization failed
해결 방법:
Azure 설정 확인:
properties# 필수 속성들이 모두 설정되어 있는지 확인 firo.azure.connection-string=DefaultEndpointsProtocol=https;AccountName=... firo.azure.container=your-container-name
Connection String 유효성 검증:
- Azure Portal에서 Storage Account의 Access Keys 확인
- Connection String이 정확히 복사되었는지 확인
- 특수문자나 줄바꿈이 포함되지 않았는지 확인
Container 존재 여부 확인:
- Azure Storage에서 지정된 Container가 생성되어 있는지 확인
- Container 이름이 정확한지 확인 (대소문자 구분)
문제: "Azure connection string is required" 오류
java.lang.IllegalArgumentException: Azure connection string is required but not provided
해결 방법:
firo.azure.connection-string
속성이 설정되어 있는지 확인- 속성 값이 비어있지 않은지 확인
2. S3 관련 문제
문제: S3 Adapter 초기화 실패
com.amazonaws.services.s3.model.AmazonS3Exception: The AWS Access Key Id you provided does not exist
해결 방법:
AWS 인증 정보 확인:
propertiesfiro.s3.access-key=AKIA... # 올바른 Access Key firo.s3.secret-key=... # 올바른 Secret Key firo.s3.region=us-west-2 # 올바른 리전 firo.s3.bucket=your-bucket # 존재하는 버킷명
IAM 권한 확인:
- 필요한 S3 권한이 있는지 확인 (GetObject, PutObject, DeleteObject, ListBucket)
- IAM 정책이 올바르게 설정되었는지 확인
버킷 존재 확인:
- 지정된 버킷이 올바른 리전에 생성되어 있는지 확인
3. MyBatis 관련 문제
문제: "Result Maps collection does not contain value" 오류
org.apache.ibatis.builder.IncompleteElementException: Could not find result map
해결 방법:
Type Alias 충돌 확인:
- 외부 프로젝트와 Firo의 Type Alias가 충돌하지 않는지 확인
- Firo는
Firo
접두사를 가진 Type Alias를 사용합니다
패키지 설정 확인:
properties# 이 설정은 필요하지 않습니다 (Firo가 자동 관리) # mybatis.type-aliases-package=com.unvus.firo.core.module.service.domain
Mapper XML 확인:
- Mapper XML에서 올바른 Type Alias를 사용하고 있는지 확인
4. 파일 업로드 문제
문제: 파일 업로드 시 권한 오류
java.nio.file.AccessDeniedException: /var/uploads/temp/
해결 방법:
디렉토리 권한 확인:
bashsudo chown -R your-user:your-group /var/uploads/ sudo chmod -R 755 /var/uploads/
디렉토리 존재 확인:
bashmkdir -p /var/uploads/temp/
설정 확인:
propertiesfiro.directory.base-dir=/var/uploads/ firo.directory.tmp-dir=/var/uploads/temp/
문제: 파일 크기 제한 오류
org.springframework.web.multipart.MaxUploadSizeExceededException
해결 방법:
properties
# Spring Boot 파일 업로드 크기 제한 설정
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
5. Bean 충돌 문제
문제: "Parameter 0 of constructor required a single bean, but 2 were found"
Parameter 0 of constructor in com.unvus.firo.core.module.service.FiroService required a single bean of type 'com.unvus.firo.core.module.repository.FiroFileRepository', but 2 were found
해결 방법:
데이터베이스 타입 명시:
properties# JPA 사용 시 firo.db.type=jpa # MyBatis 사용 시 firo.db.type=mybatis
조건부 Bean 로딩 확인:
firo.db.type
설정에 따라 하나의 Repository 구현체만 로드됩니다- 설정이 누락되면 기본적으로 JPA가 사용됩니다
문제: "Unable to read meta-data for class FiroAzureConfiguration"
java.lang.IllegalStateException: Unable to read meta-data for class com.unvus.firo.web.config.FiroAzureConfiguration
해결 방법:
Azure 의존성 확인:
gradledependencies { implementation 'com.azure:azure-storage-blob:12.25.0' }
Azure 설정 누락 허용:
- Azure 설정이 없어도 Firo는 정상적으로 초기화됩니다
- Azure를 사용하지 않는 경우 관련 설정을 제거하세요
조건부 로딩 확인:
- Azure 클래스가 classpath에 있을 때만 Configuration이 로드됩니다
6. 설정 관련 문제
문제: "Property 'firo.db.type' not found" 오류
해결 방법:
properties
# 데이터베이스 타입 설정 (기본값: jpa)
firo.db.type=jpa # 또는 mybatis
문제: Bean 생성 실패
No qualifying bean of type 'com.unvus.firo.core.module.service.FiroService'
해결 방법:
Auto Configuration 확인:
@EnableAutoConfiguration
또는@SpringBootApplication
이 있는지 확인
의존성 확인:
gradledependencies { implementation 'com.unvus.firo:firo-core:1.2.0-SNAPSHOT' implementation 'com.unvus.firo:firo-jpa:1.2.0-SNAPSHOT' // 또는 firo-mybatis implementation 'com.unvus.firo:firo-web:1.2.0-SNAPSHOT' }
7. 정적 리소스 문제
문제: "No static resource attach-direct/view/default" 오류
해결 방법:
엔드포인트 확인:
GET /assets/firo/attach-direct/view/{refDomain}/{refCategory}?path={filePath} GET /assets/firo/attach-direct/view/default?path={filePath} # default 경로 GET /assets/firo/attach-direct/download/{refDomain}/{refCategory}?path={filePath}
도메인/카테고리 등록 확인:
java@PostConstruct public void setupFiroDomains() { FiroDomain defaultDomain = FiroDomain.builder("default").build(); defaultDomain.addCategory("default"); FiroRegistry.add(defaultDomain); }
파일 경로 확인:
- 파일이 실제로 존재하는지 확인
- 권한이 올바르게 설정되어 있는지 확인
- SecureAccessFunc을 통한 접근 제어 확인
8. iflex 1.8.0 호환성 문제
문제: iflex와 함께 사용 시 초기화 실패
해결 방법:
Firo 활성화 설정:
properties# Firo 활성화 (기본값: true) firo.enabled=true # 데이터베이스 타입 명시 firo.db.type=mybatis # iflex는 주로 MyBatis 사용
의존성 순서 확인:
gradledependencies { implementation 'com.unvus.firo:firo-core:1.2.0-SNAPSHOT' implementation 'com.unvus.firo:firo-mybatis:1.2.0-SNAPSHOT' // iflex 의존성은 firo 이후에 추가 }
Auto Configuration 확인:
@EnableAutoConfiguration
이 활성화되어 있는지 확인- Firo Configuration이 올바르게 로드되는지 확인
9. 로깅 설정
디버깅을 위한 로깅 설정:
properties
# Firo 관련 로깅
logging.level.com.unvus.firo=DEBUG
# MyBatis 쿼리 로깅 (MyBatis 사용 시)
logging.level.com.unvus.firo.mybatis.mapper=DEBUG
# JPA 쿼리 로깅 (JPA 사용 시)
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
# 파일 업로드 관련 로깅
logging.level.org.springframework.web.multipart=DEBUG
7. 성능 최적화
대용량 파일 처리
properties
# 임시 파일 위치 설정 (충분한 디스크 공간 확보)
firo.directory.tmp-dir=/var/tmp/firo/
# JVM 메모리 설정
-Xmx2g -XX:+UseG1GC
데이터베이스 연결 풀 최적화
properties
# HikariCP 설정 (JPA 사용 시)
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.minimum-idle=5
spring.datasource.hikari.connection-timeout=20000
지원 및 문의
추가적인 문제가 발생하면 다음을 확인하세요:
- 로그 분석: DEBUG 레벨 로그를 활성화하여 상세한 오류 정보 확인
- 설정 검증: 모든 필수 설정이 올바르게 되어 있는지 확인
- 의존성 확인: 올바른 버전의 의존성을 사용하고 있는지 확인
- 환경 확인: 개발/테스트/프로덕션 환경별 설정이 적절한지 확인