FineReport FCA 개념 정리 — 매개변수부터 보고서 설계, 데이터 입력, Tomcat 배포까지
개요
FineReport FCA 학습 자료를 기준으로 기본 개념을 정리했다.
범위는 매개변수와 셀 설정부터 SQL, 데이터 입력, 서버 배포까지 꽤 넓다. 메뉴 이름만 외우면 비슷한 보기에서 헷갈리기 쉽다.
특히 실제 값과 표시 값, 데이터 연결과 데이터셋, 반복 제목과 틀 고정은 따로 구분해서 봐야 한다.
그래서 이번에는 보고서를 만드는 흐름에 맞춰 내용을 묶었다.
데이터 연결
→ 데이터셋 구성
→ 매개변수로 조회 조건 전달
→ 셀 확장과 보고서 설계
→ 차트 구성 또는 데이터 입력
→ 내보내기와 서버 배포
기준 자료는 일반 FCA인 FanRuan Certified Reporting Engineer – Associate 학습본이다. 총 71문항에 등장하는 개념을 중심으로 정리했으며, 공식 시험 답안이 아니라 학습용 개념 정리다. 버전에 따라 달라지거나 문제 표현이 모호한 부분은 뒤에서 따로 다룬다.
1. 데이터 연결과 데이터셋
두 용어가 비슷해 보이지만 역할이 다르다.
데이터 연결은 어디에 접속할지, 데이터셋은 어떤 데이터를 가져와 사용할지를 정하는 부분이다.
| 구분 | 역할 | 예시 |
|---|---|---|
| 데이터 연결 | 서버 주소, 계정, 연결 방식 설정 | 회사 MySQL 서버 연결 |
| 데이터셋 | 보고서에 사용할 데이터 구성 | 매출 테이블에서 날짜·지역·금액 조회 |
DB 연결 하나로 보고서마다 필요한 데이터셋을 만들 수 있다.
예를 들어 같은 데이터베이스를 사용하더라도 월별 매출 보고서는 날짜와 금액이 필요하고, 고객 목록은 고객명과 연락처가 필요하다. 연결 정보는 같아도 가져오는 데이터는 달라진다.
데이터셋 유형
학습 자료에서 구분해야 할 항목은 다음과 같다.
| 항목 | 데이터셋으로 사용 |
|---|---|
| DB Query | 가능 |
| Stored Procedure | 가능 |
| File Dataset | 가능 |
| Trigger | 데이터셋 유형이 아님 |
트리거는 데이터베이스에서 특정 이벤트가 발생했을 때 실행하는 기능이다. 저장 프로시저와 같이 DB에서 동작한다고 해서 같은 데이터셋 유형으로 보면 안 된다.
사용 범위에 따라서도 나뉜다. 서버 데이터셋은 프로젝트 내 여러 템플릿에서 사용하고, 템플릿 데이터셋은 해당 템플릿에 속한다. FineReport 데이터셋 공식 문서
JDBC만 가능한가?
FineReport는 JDBC 외에도 JNDI 등의 연결 설정을 제공한다. 따라서 “JDBC를 통해서만 연결할 수 있다”는 설명은 맞지 않는다.
다만 JNDI를 사용한다고 해서 내부의 JDBC 드라이버가 필요 없어지는 것은 아니다. 연결을 설정하고 관리하는 방식과 내부 드라이버는 구분해서 봐야 한다. 데이터 연결 공식 문서
2. 매개변수와 위젯
매개변수(Parameter)는 보고서에 전달하는 값이다. 조회할 지역이나 날짜처럼 사용자가 바꿀 조건을 담는 데 사용한다.
위젯(Widget)은 사용자가 그 값을 입력하거나 선택하는 화면 요소다.
지역 드롭다운에서 '서울' 선택
→ 지역 매개변수에 값 전달
→ 해당 값을 조회 조건에 사용
→ 서울 데이터 표시
기본 유형과 이름
학습 자료에서 새 매개변수의 기본 유형은 문자열(String)로 정리되어 있다.
기본 이름은 p1과 P1을 구분해야 한다. 10.0 영문 구판에는 p1이 명시되어 있고, 가지고 있는 학습본에는 11.0 문서의 P1 표기와 차이가 있다고 기록되어 있다. 대소문자만 묻는 문제는 사용하는 버전을 함께 확인하는 편이 좋다. 10.0 매개변수 공식 문서
위젯 이름과 매개변수 이름
학습 자료의 핵심은 위젯 이름과 매개변수 이름을 일치시켜 연결한다는 것이다.
예를 들어 지역 매개변수를 region으로 만들었다면, 해당 값을 입력하는 위젯 이름도 맞춰준다.
매개변수 이름: region
위젯 이름: region
매개변수 패널에는 위젯을 끌어다 놓을 수 있다. 따라서 “패널에 위젯을 직접 드래그할 수 없다”는 보기는 잘못된 설명이다.
실제 값과 표시 값 (핵심)
사용자에게 보여주는 값과 내부에서 사용하는 값은 다를 수 있다.
| 실제 값 | 표시 값 |
|---|---|
D001 |
개발팀 |
D002 |
영업팀 |
D003 |
경영지원팀 |
사용자는 개발팀을 선택하지만, 조회 조건에는 D001이 전달되는 식이다.
학습 자료의 보기에서는 드롭다운과 라디오 버튼 그룹이 이 구분을 지원하는 위젯이다. 화면에서 코드를 부서명으로 보여준다고 해서 DB의 코드가 부서명으로 바뀌는 것은 아니다.
3. 셀 확장과 부모 셀
데이터 열을 셀에 넣으면 데이터 개수에 맞춰 보고서가 늘어난다. 이때 먼저 확인할 설정이 확장 방향이다.
| 설정 | 의미 |
|---|---|
| No Expansion | 확장하지 않음 |
| Vertical Expansion | 세로로 확장 |
| Horizontal Expansion | 가로로 확장 |
개별 데이터 열의 확장 방향은 이 세 가지다. 보고서 전체가 가로와 세로로 커질 수 있다는 사실과, 한 데이터 열에서 양방향 확장을 선택한다는 설명은 구분해야 한다.
부모 셀은 하위 셀의 데이터가 어떤 기준에 따라 배치될지 이해할 때 중요하다. 예를 들어 부서별 직원 목록이라면 부서가 상위 기준이고 직원이 그 아래에 놓인다. 공식 문서는 같은 데이터셋의 부모·자식 셀에서 부모 셀을 필터 조건으로 사용하는 설정도 설명한다. 데이터 열 속성 공식 문서
개발팀
김OO
이OO
영업팀
박OO
이런 보고서에서 직원이 어느 부서 아래에 나오는지 확인하려면, 확장 방향과 함께 부모 셀 관계를 살펴보면 된다.
4. 반복 제목, 틀 고정, 빈 행 채우기
이 세 기능은 결과 화면에서 해결하는 문제가 다르다.
| 기능 | 사용하는 상황 |
|---|---|
| 반복 제목 | 페이지가 바뀌어도 제목을 다시 표시 |
| 틀 고정 | 스크롤해도 제목 행·열을 계속 표시 |
| 빈 행 채우기 | 데이터가 적을 때 지정한 행 수를 맞춤 |
모든 페이지에 첫 행 표시하기
첫 번째 행을 모든 페이지에 표시하려면 Repeat Title Rows를 설정한다.
매 페이지에 제목을 복사해서 붙이는 작업이 아니다. 템플릿의 반복 제목으로 지정해 처리한다.
데이터 입력에서도 틀 고정 가능
FineReport의 Repeat and Freeze에는 페이지 미리보기뿐 아니라 데이터 입력 미리보기의 행·열 고정 설정도 있다.
따라서 “데이터 입력 보고서는 틀 고정을 지원하지 않는다”는 설명은 틀리다. 반복 및 틀 고정 공식 문서
마지막 페이지에 들어갈 빈 행 수
학습 자료의 조건은 다음과 같다.
- 페이지당 최대 4행
- 실제 데이터 5행
- 마지막 페이지도 4행으로 맞춤
그러면 첫 페이지에 실제 데이터 4행이 들어가고, 마지막 페이지에는 1행이 남는다.
첫 페이지: 실제 데이터 4행
마지막 페이지: 실제 데이터 1행 + 빈 행 3행
정답은 3행이다. 전체 데이터가 5행이라는 숫자보다, 마지막 페이지에 남는 행이 몇 개인지 먼저 계산하면 된다.
5. 셀 값과 표시 설정
현재 셀 값은 $$$
FineReport의 사용자 정의 표시에서 $$$는 현재 셀의 값을 뜻한다.
$$$
다른 셀을 직접 지정하는 참조와 구분해서 기억하면 된다. 데이터 열 속성의 Custom Displays
표시 변경과 값 변경
숫자 10000에 통화 형식을 적용하면 화면에는 ₩10,000처럼 보이게 할 수 있다.
그렇다고 원본 숫자를 문자로 수정하거나 DB 값을 바꾸는 작업은 아니다.
다만 사용자 정의 표시를 적용한 셀을 다른 셀에서 참조할 때의 결과까지 “항상 원본 값이다”라고 생각하면 안 된다. 공식 문서는 사용자 정의 표시 값이 참조되는 사례도 안내한다. 표시와 원본 데이터의 차이, 수식 참조 결과는 나눠서 확인해야 한다. Custom Displays의 참조 동작
QR 코드와 사선 셀
학습 자료에서 QR 코드 표시는 Barcode 항목에서 QR Code 유형을 고르는 것으로 정리되어 있다.
사선 셀의 제목 내용을 나누는 구분자는 파이프 문자다.
구분|항목
/는 사선이라는 기능 이름에서 떠올리기 쉽지만, 내용을 구분하는 문자와는 다르다.
OR 함수 확인
다음 수식도 나온다.
=OR(1+7=9, 5+7=11)
각 조건을 먼저 계산하면 간단하다.
1 + 7 = 9 → 8 = 9 → FALSE
5 + 7 = 11 → 12 = 11 → FALSE
OR(FALSE, FALSE) → FALSE
둘 중 하나라도 참이어야 OR 결과가 참이다. 여기서는 둘 다 거짓이다.
6. 차트와 셀 요소
학습 자료에서는 차트의 대표적인 데이터 원본을 셀 데이터와 데이터셋으로 구분한다.
| 원본 | 이해하는 방법 |
|---|---|
| Cell Data | 보고서 셀의 데이터를 차트에 연결 |
| Dataset | 데이터셋의 필드를 차트에 연결 |
셀에서 이미 계산한 결과를 사용할지, 데이터셋 필드로 차트를 구성할지에 따라 접근이 달라진다.
또한 셀 요소와 부동 요소도 구분해서 나온다.
| 구분 | 학습 자료에서 다루는 요소 |
|---|---|
| 셀에 삽입 | 데이터 열, 서식 있는 텍스트, 하위 보고서, 차트 |
| 부동 요소 | 차트, 이미지 |
“차트는 셀에 넣는 것 아닌가?”라고 생각할 수 있지만, 같은 차트라도 배치하는 방식이 다를 수 있다.
내보내기까지 고려하면 이 차이가 더 중요해진다. 공식 Export API 문서는 Word 내보내기에서 부동 요소가 제외될 수 있으므로 셀 요소로 변경하는 방법을 안내한다. Export API의 Word 내보내기 설명
차트 계열 색상 변경과 하이퍼링크 설정도 학습 자료에서 지원 기능으로 정리되어 있다. “사용자 정의를 지원하지 않는다”는 문장을 보면 무엇을 바꿀 수 없다는 것인지 확인하면 된다.
7. 데이터 입력 보고서
데이터 입력(Data Entry)은 보고서 화면에서 값을 입력하고 저장하도록 구성하는 기능이다.
학습 자료의 기본 순서는 다음과 같다.
보고서 설계
→ 입력 위젯 추가
→ 데이터 입력 속성 설정
→ 데이터 입력 미리보기 및 입력
여기서 중요한 부분은 입력 위젯과 저장 설정이 별개라는 것이다.
텍스트 입력칸이 있다고 해서 그 값이 어느 테이블, 어느 컬럼에 저장될지 자동으로 결정되지는 않는다. 데이터 입력 속성에서 저장 대상을 연결해야 한다.
위젯과 검증
| 필요한 기능 | 확인할 항목 |
|---|---|
| 문자열 입력 | 텍스트 위젯 |
| 비밀번호 입력 | 비밀번호 위젯 |
| 파일 업로드 | 파일 위젯 |
| 이메일 형식 확인 | 텍스트 위젯의 입력 규칙 |
텍스트 위젯의 입력 규칙에는 이메일 검증이 있다. 입력칸을 만드는 것과 값이 올바른 형식인지 확인하는 것은 나눠서 설정한다. Text Widget 공식 문서
학습 자료에서는 다중 시트 입력과 틀 고정도 지원 기능으로 다룬다. Excel처럼 여러 시트를 오가며 입력하는 상황을 생각하면 이해하기 쉽다.
제출 유형을 묻는 보기에서는 Smart Submit, Insert Submit, Delete Submit과 Form Submit을 구분한다. 자료상 정답은 Form Submit이 해당 제출 유형 분류에 포함되지 않는다는 것이다.
8. SQL 기본 문법
FineReport 설정 외에도 기본 SQL 문항이 포함되어 있다.
SQL은 Structured Query Language, 구조화된 질의 언어의 약어다.
조회와 집계
-- 학생 정보 조회
SELECT NAME, AGE
FROM STUDENT;
-- 전체 행 수 조회
SELECT COUNT(*)
FROM STUDENT;
조회는 SELECT, 행 수 집계는 COUNT(*)를 사용한다.
COUNT(*), SUM(*), MAX(*), AVG(*) 중 올바른 표현을 고르는 문제에서는 COUNT(*)가 답이다. 나머지는 일반적으로 SUM(AMOUNT)처럼 계산할 열이나 식을 지정한다.
추가·수정·삭제
아래는 구문을 구분하기 위한 예시다.
-- 새 데이터 추가
INSERT INTO STUDENT (NAME, AGE)
VALUES ('홍길동', 20);
-- 모든 학생의 나이를 1씩 증가
UPDATE STUDENT
SET AGE = AGE + 1;
두 번째 구문에는 WHERE가 없으므로 모든 행이 수정된다. 학습 자료에서도 “모든 나이를 1씩 증가”시키는 조건이므로 이 형태가 맞다.
삭제는 대상이 무엇인지 구분해야 한다.
| 목적 | 구문 |
|---|---|
| 조건에 맞는 행 삭제 | DELETE FROM STUDENT WHERE ... |
| 테이블 자체 삭제 | DROP TABLE STUDENT |
SQL의 논리적 처리 순서
문제의 보기 네 가지 절만 비교하면 다음 순서다.
WHERE → GROUP BY → HAVING → ORDER BY
WHERE에서 개별 행을 걸러내고, GROUP BY로 묶는다. 이후 HAVING으로 집계 결과를 걸러내고 ORDER BY로 정렬한다.
SELECT DEPARTMENT, COUNT(*) AS STUDENT_COUNT
FROM STUDENT
WHERE AGE >= 20
GROUP BY DEPARTMENT
HAVING COUNT(*) >= 3
ORDER BY STUDENT_COUNT DESC;
이 예시는 20세 이상 학생만 대상으로 학과별 인원을 센 다음, 3명 이상인 학과를 인원수 내림차순으로 보여준다.
문장에서 작성하는 위치와 논리적으로 처리되는 순서가 다르다는 점이 핵심이다. 실제 DB 엔진의 물리적 실행 계획과도 구분해야 한다.
9. Tomcat 배포 구조
FineReport를 Tomcat에 배포하는 문제는 폴더 구조로 보면 외우기 쉽다.
Tomcat/
├── bin/
├── conf/
│ └── server.xml
└── webapps/
└── webroot/
└── WEB-INF/
├── lib/
└── reportlets/
webapps는 웹 애플리케이션을 배치하는 경로이고, webroot는 FineReport 프로젝트 폴더다.
따라서 질문이 “webroot를 어디에 넣는가?”라면 webapps, “webapps에 어떤 폴더를 넣는가?”라면 webroot다. 같은 구조를 반대 방향으로 묻는 문제다. FineReport 독립 배포 공식 문서
포트 설정
Tomcat 서비스 포트 설정 파일은 다음과 같다.
Tomcat/conf/server.xml
Connector의 포트를 변경하는 방식이다. 별도 Tomcat 인스턴스를 같은 서버에서 동시에 실행한다면, 같은 주소와 포트를 함께 사용하지 않도록 설정해야 한다. Tomcat 배포 및 포트 설정 안내
접속 주소 구조
기본 프로젝트명이 webroot인 경우 접속 주소는 다음 형태다.
http://서버주소:포트/webroot/decision
주소에 있는 포트는 서버 접속 지점을, webroot는 프로젝트 경로를 나타낸다.
원격 설계
학습 자료에서는 작업 디렉터리를 원격 서버로 전환해 보고서를 작성하는 기능도 다룬다.
이때 확인할 항목은 디자이너와 서버의 버전이다. 자료의 “양쪽 JAR 패키지가 달라도 작업에 영향이 없다”는 설명은 오답으로 정리되어 있다.
새 템플릿을 추가하는 것과 서버의 JAR 또는 설정을 교체하는 것도 구분해야 한다. 일반적인 보고서 추가·수정마다 서버를 재시작해야 한다는 의미는 아니다.
10. 템플릿 파일과 내보내기 파일
“FineReport가 생성하는 파일 형식”이라는 표현은 범위가 모호하다.
설계한 템플릿을 말하는지, 보고서를 실행한 뒤 내보내는 결과를 말하는지 먼저 봐야 한다.
| 구분 | 예시 |
|---|---|
| 템플릿 파일 | .cpt, .frm |
| 내보내기 결과 | PDF, Excel, Word, 이미지 등 |
따라서 보기의 CPT, FRM, DOC, XLS 중 템플릿 파일을 묻는 의도라면 CPT와 FRM이다. 하지만 “생성 가능한 모든 파일”을 묻는다면 DOC와 XLS를 무조건 제외하기 어렵다.
이미지 형식도 같은 방식으로 구분한다. 공식 Export API 문서는 PNG·JPG·GIF·BMP를 지원하며, 이미지 기본 내보내기 형식은 JPG라고 안내한다. PNG 지원 여부와 기본값이 PNG인지 여부는 서로 다른 질문이다. 내보내기 공식 문서
11. 정답 암기 전에 확인할 부분
빨간 삼각형과 조건부 서식
학습 자료에는 셀 왼쪽 위의 빨간 삼각형을 묻는 문제가 있다. 보기에는 조건부 서식, 매개변수 주입, 필터, 페이지 나누기가 나온다.
그런데 공식 문서의 설명은 다음과 같다.
| 표시 | 의미 |
|---|---|
| 왼쪽 위 빨간 삼각형 | 하이퍼링크 |
| 왼쪽 위 자홍색 삼각형 | 조건부 서식 |
하이퍼링크가 보기에 없으므로 원문 그대로라면 답을 고르기 어렵다. 출제자가 자홍색을 빨간색으로 표현했다면 조건부 서식을 의도했을 수 있지만, 이는 추정이다. 하이퍼링크 표식, 조건부 서식 표식
이 부분은 “빨간 삼각형 = 조건부 서식”으로 외우면 잘못 기억하게 된다.
병합 후 기본 정렬
학습본은 병합 전 첫 번째 셀을 기준으로 유지한다는 답을 추정하고 있지만, 검증 필요로 표시되어 있다. 사용하는 디자이너에서 서로 다른 정렬을 가진 셀을 병합해 확인할 항목이다.
디자이너 사용과 서버 등록
디자이너를 사용할 수 있는지와 배포 서버가 정식 등록되었는지는 다른 문제다.
공식 등록 안내에서는 미등록 웹 애플리케이션의 제한과 7일 주기 일시 중지 동작을 설명한다. 이 조건을 보고 “디자이너를 시작하려면 무조건 먼저 라이선스를 구매해야 한다”로 이해하면 안 된다. 실제 운영 조건은 사용하는 버전의 등록 안내를 확인해야 한다. Registration Introduction
마무리
FCA 자료에서 반복해서 나오는 부분은 기능 이름 자체보다 비슷한 설정 사이의 차이였다.
- 매개변수는 값이고, 위젯은 값을 입력하는 화면 요소다.
- 반복 제목은 페이지가 바뀔 때, 틀 고정은 스크롤할 때 사용한다.
- 표시 형식을 바꾸는 것과 원본 데이터를 수정하는 것은 다르다.
- 템플릿 파일과 내보내기 결과는 구분해야 한다.
webapps와webroot는 같은 배포 구조에서 서로 다른 위치다.
실습할 때는 작은 보고서 하나에 지역 드롭다운, 세로로 확장되는 데이터 목록, 반복 제목, 간단한 차트를 차례로 넣어보면 좋다. 각 기능이 어느 단계에서 쓰이는지 연결해서 볼 수 있다.
특히 버전별 기본값이나 색상처럼 표현에 민감한 항목은, 문제의 답 한 글자보다 실제 메뉴와 공식 문서의 설명을 같이 확인하는 편이 기억하기 좋다.