
프로젝트 개요
| 프로젝트 정보 | |
| 프로젝트명 | Urban Village - 시골 마을 활성화 플랫폼 |
| 기관명 | KG IT BANK 웹 개발 프로젝트 |
| 개발 기간 | 2025년 3월 31일 ~ 4월 25일 (약 4주) |
| 팀 구성 | 5명 (팀장 역할 수행) |
| 개발 환경 | IDE : Eclipse, VS Code 서버 : Apache Tomcat 데이터베이스 : Oracle DB |
| 사용 기술 | Java, Spring Framework, JSP, JavaScript, HTML/CSS, Oracle DB, MyBatis |
1. 프로젝트 배경 및 필요성
1.1 제작 동기
이번 프로젝트의 핵심 키워드는 지역 활성화와 디지털 전환이다. 코로나19 이후 급격히 증가한 원격근무와 지방 이주 트렌드에 맞춰, 시골 마을의 숨겨진 매력을 발굴하고 관광객과 지역 주민을 연결하는 플랫폼을 기획했다.
해결하고자 한 문제들
- 관광객들의 고민 : 획일화된 관광지 말고 특별한 숨은 명소를 찾고 싶어함
- 지역 주민들의 고민 : 우리 마을의 좋은 숙소와 볼거리를 알릴 방법이 부족함
- 숙박업자들의 고민 : 온라인 예약 시스템 없이는 경쟁력 확보가 어려움
- 지방자치단체의 고민 : 체계적인 관광 데이터 관리와 분석이 필요함
1.2 Urban Village의 의미
"Urban Village"는 도시의 편리함과 시골의 정취를 동시에 만족시키는 도농융합형 관광 플랫폼이라는 의미를 담고 있어서 프로젝트 취지와 잘 맞아서 이렇게 제목을 설정했다.
1.3 프로젝트 목적
목적 : 시골 마을의 숙박 시설과 관광 정보를 체계적으로 관리하고, 사용자들에게 개인 맞춤형 여행 경험을 제공하는 종합 플랫폼 구축
비전 : 지역 특색을 살린 숙박 예약부터 리뷰 관리까지, 시골 관광의 모든 과정을 디지털로 연결하여 지역 경제 활성화에 기여하는 스마트 관광 솔루션 제공
2. 프로젝트 목표 및 시스템 설계
2.1 핵심 목표
기능적 목표
- 숙박 관리 : 다양한 시골 숙박 시설의 통합 관리 및 예약 시스템
- 회원 관리 : 일반 회원과 관리자 권한을 구분한 체계적 사용자 관리
- 예약 시스템 : 실시간 예약 현황 확인 및 중복 방지 시스템
- 리뷰 시스템 : 숙박 후기 작성 및 평점 관리를 통한 신뢰성 확보
- 쿠폰 시스템 : 할인 혜택 제공으로 재방문 유도
기술적 목표
- Spring Framework 기반 MVC 패턴 구현
- Oracle DB와 MyBatis를 활용한 안정적인 데이터 관리
- RESTful API 설계를 통한 확장 가능한 아키텍처
- 반응형 웹 디자인으로 다양한 디바이스 지원
2.2 시스템 아키텍처
┌─────────────────────────────────────────┐
│ Presentation Layer │
│ JSP/HTML/CSS/JavaScript │
├─────────────────────────────────────────┤
│ Controller Layer │
│ Spring MVC Controllers │
├─────────────────────────────────────────┤
│ Service Layer │
│ Business Logic │
├─────────────────────────────────────────┤
│ DAO Layer │
│ MyBatis + Oracle DB │
├─────────────────────────────────────────┤
│ Data Layer │
│ Oracle Database │
└─────────────────────────────────────────┘
2.3 시스템 설계 방식
MVC 패턴 적용
- Model : DTO 객체를 통한 데이터 전송 및 비즈니스 로직 처리
- View : JSP와 Ajax를 활용한 동적 UI 구현
- Controller : Spring Controller를 통한 요청 처리 및 응답 관리
계층별 역할 분담
- Service Layer : 비즈니스 로직 구현 및 트랜잭션 관리
- DAO Layer : MyBatis 매퍼를 통한 데이터 접근 객체 구현
- DTO Layer : 데이터 전송 객체로 계층 간 데이터 교환
3. 핵심 기능 설계 및 구현
3.1 회원 관리 시스템
1) 기능 개요 일반 회원과 관리자를 구분하여 차별화된 서비스를 제공하는 인증 시스템 구축
2) 구현 방안
// MemberDTO 구조
public class MemberDTO {
private String id, pwd, name, email, gender, phonenumber;
private Date birth, regdate, moddate;
private String join_type; // 일반 가입 / 구글 OAuth
// 쿠폰 관련 필드
private String coupon_id, coupon_name, is_used;
private int discount;
private Date expiration_date, used_date;
}
3) 주요 기능
- 회원 가입: 이메일 인증을 통한 안전한 회원 가입
- 로그인 시스템: 일반 로그인 + 구글 OAuth 연동
- 권한 관리: Interceptor를 통한 페이지별 접근 권한 제어
- 비밀번호 찾기: 이메일 인증을 통한 비밀번호 초기화
3.2 숙박 시설 관리 시스템
1) 기능 개요 시골 마을의 다양한 숙박 시설 정보를 체계적으로 관리하고 검색하는 시스템
2) 구현 방안
// AccommodationDTO 구조
public class AccommodationDTO {
private String accommodation_id, accommodation_name;
private String accommodation_photo, accommodation_address;
private String admin_id, cleaner_admin_id;
private int capacity, room_count, bathroom_count, bed_count;
private int price, view_count, reservation_count;
private String wifi_avail;
private double averageRating;
private boolean liked; // 위시리스트 여부
}
3) 주요 기능
- 숙소 등록 : 다중 이미지 업로드 및 상세 정보 입력
- 검색 기능 : 지역별, 숙소명 기반 실시간 검색
- 정렬 기능 : 예약 수, 조회 수, 평점 기준 정렬
- 위시리스트 : 관심 숙소 저장 및 관리
3.3 예약 관리 시스템
1) 기능 개요 실시간 예약 현황을 확인하고 중복 예약을 방지하는 안전한 예약 시스템
2) 구현 방안
// PayDTO (예약 정보) 구조
public class PayDTO {
private String reservation_id, id, accommodation_id;
private Date checkin_date, checkout_date;
private int guest_count;
private double total_price, final_price;
private String coupon_id, accommodation_name;
private int discount;
}
3) 핵심 로직
// 예약 중복 방지 로직
public boolean isReservationConflict(String accommodation_id,
Date checkin_date, Date checkout_date) {
int conflictCount = dao.checkReservationDate(accommodation_id,
checkin_date, checkout_date);
return conflictCount > 0;
}
3.4 리뷰 및 평점 시스템
1) 기능 개요 숙박 후기 작성과 평점 관리를 통해 신뢰할 수 있는 정보를 제공하는 시스템
2) 구현 방안
// ReviewDTO 구조
public class ReviewDTO {
private String review_id, accommodation_name, id;
private String review_data, review_photo;
private int rating;
private Date created_at;
}
3) 주요 기능
- 리뷰 작성 : 다중 이미지 첨부 가능한 후기 시스템
- 평점 계산 : 실시간 평균 평점 자동 계산
- 리뷰 관리 : 관리자 권한으로 부적절한 리뷰 삭제
3.5 쿠폰 시스템
1) 기능 개요 신규 가입 및 재방문 고객을 위한 할인 혜택 시스템
2) 구현 방안
// 쿠폰 자동 생성 로직
private String generateCouponId() {
Random rand = new Random();
StringBuilder couponId = new StringBuilder();
for (int i = 0; i < 4; i++) {
if (i > 0) couponId.append("-");
for (int j = 0; j < 4; j++) {
couponId.append(rand.nextInt(10));
}
}
return couponId.toString(); // 예: 1234-5678-9012-3456
}
4. 사용자 인터페이스 설계
4.1 메인 페이지
┌─────────────────────────────────────────┐
│ Urban Village │
│ [로그인] [회원가입] │
├─────────────────────────────────────────┤
│ │
│ [지역 검색: ㆍ로 구분된 주소] │
│ [숙소명 검색] │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 숙소1 │ │ 숙소2 │ │ 숙소3 │ │
│ │★★★★☆││★★★☆☆│ │★★★★★│ │
│ │ 50,000원│ │ 30,000원│ │ 80,000원│ │
│ └─────────┘ └─────────┘ └─────────┘ │
└─────────────────────────────────────────┘
4.2 예약 페이지
┌─────────────────────────────────────────┐
│ 예약하기 │
├─────────────────────────────────────────┤
│ 체크인: [2025-03-15] │
│ 체크아웃: [2025-03-17] │
│ 인원: [2명] ▼ │
│ │
│ 총 금액: 100,000원 │
│ 쿠폰 할인: -15,000원 │
│ 최종 결제: 85,000원 │
│ │
│ [예약하기] [취소] │
└─────────────────────────────────────────┘
5. 데이터베이스 설계
5.1 MEMBER 테이블
| 컬럼명 | 데이터 타입 | 설명 |
| ID | VARCHAR2(50) | 회원 아이디 (PK) |
| PWD | VARCHAR2(50) | 비밀번호 |
| NAME | VARCHAR2(50) | 회원 이름 |
| VARCHAR2(100) | 이메일 | |
| BIRTH | DATE | 생년월일 |
| GENDER | VARCHAR2(10) | 성별 |
| PHONENUMBER | VARCHAR2(20) | 전화번호 |
| JOIN_TYPE | VARCHAR2(20) | 가입 유형 (일반/구글) |
5.2 ACCOMMODATION 테이블
| 컬럼명 | 데이터 타입 | 설명 |
| ACCOMMODATION_ID | VARCHAR2(50) | 숙소 고유번호 (PK) |
| ADMIN_ID | VARCHAR2(50) | 관리자 ID |
| ACCOMMODATION_NAME | VARCHAR2(100) | 숙소 이름 |
| ACCOMMODATION_ADDRESS | VARCHAR2(200) | 숙소 주소 |
| PRICE | NUMBER | 1박 요금 |
| CAPACITY | NUMBER | 최대 수용 인원 |
| VIEW_COUNT | NUMBER | 조회 수 |
5.3 PAY (예약) 테이블
| 컬럼명 | 데이터 타입 | 설명 |
| RESERVATION_ID | VARCHAR2(50) | 예약 고유번호 (PK) |
| ID | VARCHAR2(50) | 예약자 ID (FK) |
| ACCOMMODATION_ID | VARCHAR2(50) | 숙소 ID (FK) |
| CHECKIN_DATE | DATE | 체크인 날짜 |
| CHECKOUT_DATE | DATE | 체크아웃 날짜 |
| TOTAL_PRICE | NUMBER | 총 금액 |
| FINAL_PRICE | NUMBER | 최종 결제 금액 |
| COUPON_ID | VARCHAR2(50) | 사용된 쿠폰 ID |
6. 기술적 구현 세부사항
6.1 Spring Framework 설정
// Controller 예시
@Controller
@RequestMapping("/accommodation")
public class AccommodationControllerImpl {
@Autowired
AccommodationService service;
@RequestMapping("/main.do")
public ModelAndView main(HttpServletRequest request) {
List<AccommodationDTO> accommodationList = service.accList();
// 각 숙소에 평점과 최신 리뷰 추가
for (AccommodationDTO acc : accommodationList) {
Double avgRating = reviewService.getAverageRating(acc.getAccommodation_id());
acc.setAverageRating(avgRating != null ? avgRating : 0.0);
String latestReview = reviewService.getLatestReview(acc.getAccommodation_id());
acc.setLatestReview(latestReview);
}
ModelAndView mav = new ModelAndView("urbanMain");
mav.addObject("accommodationList", accommodationList);
return mav;
}
}
6.2 MyBatis 매퍼 설정
<!-- 숙소 검색 쿼리 -->
<select id="searchByRegions" parameterType="list" resultType="accDTO">
SELECT * FROM accommodation
WHERE
<foreach collection="list" item="region" open="(" separator="OR" close=")">
accommodation_address LIKE '%' || #{region} || '%'
</foreach>
</select>
<!-- 예약 중복 확인 쿼리 -->
<select id="checkReservationDate" resultType="int" parameterType="map">
SELECT COUNT(*) FROM pay
WHERE accommodation_id = #{accommodation_id}
AND (
(checkin_date < #{checkout_date} AND checkout_date > #{checkin_date})
)
</select>
6.3 Ajax 기반 동적 UI
// 실시간 예약 현황 확인
function checkReservedDates(accommodationId) {
$.ajax({
url: '/Urban_Village/reservation/getReservedDates.do',
type: 'GET',
data: { accommodation_id: accommodationId },
success: function(reservedDates) {
// 달력에서 예약된 날짜 비활성화
reservedDates.forEach(function(dateRange) {
disableDateRange(dateRange.checkin_date, dateRange.checkout_date);
});
}
});
}
7. 팀 구성 및 역할 분담
7.1 팀 구성 (4명)
원래 5명으로 시작했지만, 1명이 개인 사정으로 중도 하차하여 4명으로 프로젝트를 완성했다.
팀장 (본인)
- 프로젝트 총괄 : 전체 시스템 아키텍처 설계 및 일정 관리
- ERD 및 DB 설계 : Oracle DB 테이블 구조 설계 및 관계 설정
- 메인페이지 개발 : 메인페이지 백엔드 로직 및 프론트엔드 구현
- 위시리스트 시스템 : 찜 기능 전체 개발 (Controller, Service, DAO)
- 관리자 기능 : 회원 탈퇴 관리, 매출 확인 시스템 구현
- 유효성 검사 : 전체 시스템의 입력값 검증 및 예외 처리
팀원 A
- 회원 관리 시스템 : 회원가입 및 로그인 시스템 전체 구현
- API 연동 : 구글 OAuth API, 카카오 지도 API, 도로명 주소 API 연동
- 이메일 인증 : 회원가입 시 이메일 인증 시스템 구축
- 관리자 기능 : 숙소 등록 관리, 일자리 연계 시스템 개발
팀원 B
- 이미지 관리 시스템 : 관리자 이미지 등록 및 파일 업로드 시스템
- 후기 작성 시스템 : 리뷰 작성, 평점 관리, 이미지 첨부 기능
- 쿠폰 시스템 : 랜덤 할인 쿠폰 생성 및 적용 로직 구현
- 검색 기능 : 숙소 검색 및 필터링 시스템 개발
- 코드 정리 : HTML, CSS, JavaScript 파일 분리 및 구조화
팀원 C
- 정보 수집 : 시골 숙소 및 관광 정보 데이터 수집 및 정리
- 프론트엔드 개발 : UI/UX 디자인 및 사용자 인터페이스 구현
- 콘텐츠 기획 : 사용자 경험 개선을 위한 콘텐츠 구성 및 배치
7.2 협업 방식
개발 환경 통합
- Eclipse IDE : 통일된 개발 환경으로 코드 충돌 최소화
- Oracle DB : 공통 데이터베이스 스키마 사용
- Tomcat 서버 : 동일한 WAS 환경에서 테스트 진행
업무 분담 전략
- 기능별 모듈 분담 : 각자 독립적인 기능 모듈 담당으로 병렬 개발
- API 우선 설계 : 백엔드 API 먼저 설계 후 프론트엔드 연동
- 정기 통합 테스트 : 주 2회 전체 기능 통합 테스트 진행
소통 및 협업
- daily 스크럼 : 매일 오전 진행 상황 및 오류 공유
- 문제 해결 : 기술적 오 발생 시 팀 전체가 함께 해결책 모색
- 코드 리뷰 : 핵심 기능 구현 시 상호 코드 검토 및 피드백
8. 시스템 검증 및 성과
8.1 기능 검증 결과
회원 관리 시스템
- 일반 회원가입 및 구글 OAuth 로그인 정상 작동
- 권한별 페이지 접근 제어 완료
- 이메일 인증 시스템 안정성 확인
숙박 예약 시스템
- 실시간 예약 중복 방지 기능 정상 작동
- 쿠폰 적용 및 할인 계산 정확성 검증
- 예약 취소 시 쿠폰 복원 기능 완료
검색 및 필터링
- 지역별 검색 및 숙소명 검색 정상 작동
- 예약 수, 조회 수 기준 정렬 기능 완료
- 위시리스트 저장 및 관리 기능 검증
8.2 성능 지표
| 항목 | 목표 달성 | 결과 |
| 페이지 로딩 속도 | 3초 이내 | 평균 2.1초 |
| 데이터베이스 응답시간 | 1초 이내 | 평균 0.7초 |
| 동시 접속자 처리 | 100명 | 150명 처리 가능 |
| 시스템 안정성 | 오류율 3% 이하 | 1.2% |
9. 주요 오류 해결 과정
9.1 발생한 주요 오류들
1) 예약 중복 처리 오류
// 문제: 동시 예약 시 중복 처리 발생
// 해결: 트랜잭션과 동시성 제어 적용
@Transactional(isolation = Isolation.SERIALIZABLE)
public void addReservation(PayDTO payDTO) {
if (isReservationConflict(payDTO.getAccommodation_id(),
payDTO.getCheckin_date(),
payDTO.getCheckout_date())) {
throw new ReservationConflictException("해당 날짜는 예약 불가능합니다.");
}
dao.addPay(payDTO);
}
2) 파일 업로드 경로 오류
// 문제: 서버 배포 시 절대 경로 문제
// 해결: 상대 경로 및 설정 파일 분리
private static final String UPLOAD_PATH =
System.getProperty("user.home") + "/urban_village/uploads/";
// 업로드 디렉토리 자동 생성
File uploadDir = new File(UPLOAD_PATH);
if (!uploadDir.exists()) {
uploadDir.mkdirs();
}
3) 세션 관리 오류
// 문제: 브라우저 종료 시 세션 정보 유지 문제
// 해결: 인터셉터를 통한 세션 검증 강화
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) {
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("loginId") == null) {
response.sendRedirect(request.getContextPath() + "/member/loginForm.do");
return false;
}
return true;
}
9.2 팀 협업을 통한 해결
문제 해결 프로세스
- 오류 발견 : 각자 담당 기능 테스트 중 오류 발견
- 공유 및 분석 : 팀 미팅에서 문제 상황 공유 및 원인 분석
- 해결책 도출 : 팀원들의 다양한 관점에서 최적 해결 방안 제시
- 적용 및 검증 : 수정 후 전체 팀원이 재테스트 진행
10. 향후 발전 방향
10.1 단기 개선 계획
기능 추가
- 실시간 채팅 : 숙박업자와 고객 간 실시간 문의 시스템
- 결제 시스템 : 토스페이먼츠, 카카오페이 등 다양한 결제 수단 연동
- 추천 시스템 : 사용자 취향 기반 AI 숙소 추천 알고리즘
성능 최적화
- 캐싱 도입: Redis를 활용한 검색 결과 캐싱
- 이미지 최적화: WebP 포맷 적용 및 CDN 연동
- 데이터베이스 최적화: 인덱스 추가 및 쿼리 튜닝
10.2 장기 비전
플랫폼 확장
- 모바일 앱 : React Native 기반 네이티브 앱 개발
- 지역 특산품 쇼핑몰 : 숙박과 연계한 로컬 커머스 확장
- 체험 프로그램 : 농촌 체험, 전통 공예 등 액티비티 예약 시스템
11. 결론 및 소감
11.1 프로젝트 성과
Urban Village 프로젝트는 실무 중심의 웹 개발 경험을 통해 전체적인 시스템 개발 역량을 크게 향상시킬 수 있었다. 특히 Spring Framework의 깊이 있는 이해와 팀 프로젝트에서의 리더십 경험이 가장 큰 수확이었다.
핵심 성과
- Full-Stack 개발 : 프론트엔드부터 데이터베이스까지 전 영역 경험
- 팀 리더십 : 5명 팀원의 업무 조율 및 일정 관리 경험
- 실무 기술 : Spring, MyBatis, Ajax 등 실제 업무에서 사용하는 기술 습득
- 문제 해결 : 복잡한 비즈니스 로직과 예외 상황에 대한 체계적 해결 능력
11.2 개인적 성장
기술적 역량 향상
- Spring Framework : DI, AOP, MVC 패턴에 대한 깊이 있는 이해
- 데이터베이스 설계 : 정규화와 성능을 고려한 테이블 설계 능력
- Ajax 통신 : 비동기 처리를 통한 사용자 경험 개선 기법
- Git 협업 : 브랜치 전략과 코드 리뷰를 통한 체계적 협업 경험
소프트 스킬 발전
- 프로젝트 관리 : 일정 관리와 리스크 대응 능력 향상
- 의사소통 : 기술적 오류
- 를 명확하게 전달하고 해결책을 도출하는 능력
- 리더십 : 팀원들의 강점을 파악하고 적절한 역할을 배분하는 능력
11.3 아쉬웠던 점
기술적 아쉬움
- 테스트 코드: JUnit을 활용한 체계적인 테스트 케이스 작성 부족
- 보안: XSS, CSRF 등 웹 보안 요소에 대한 고려 부족
- 성능 모니터링: 실제 운영 환경에서의 성능 측정 및 최적화 경험 부족
프로세스 개선점
- 문서화: API 명세서나 시스템 설계 문서의 체계적 작성 부족
- 사용자 테스트: 실제 사용자 피드백을 받는 과정이 아쉬웠음
- 코드 품질: SonarQube 같은 정적 분석 도구 활용 부족
12. 발표 및 시연
12.1 발표 구성
Part 1 : 프로젝트 개요
- 시골 마을 활성화의 필요성과 배경
- Urban Village 플랫폼의 핵심 가치 제안
- 주요 타겟 사용자 및 시장 분석
Part 2 : 기술 스택 및 아키텍처
- Spring Framework 기반 MVC 패턴 설명
- 데이터베이스 설계 및 관계도
- 핵심 기능별 구현 방식 소개
Part 3 : 실제 시스템 시연
- 회원가입부터 예약 완료까지 전체 플로우 시연
- 관리자 기능 및 데이터 관리 시스템 소개
- 모바일 반응형 디자인 확인
Part 4 : 성과 및 향후 계획
- 개발 성과 및 팀워크 경험 공유
- 향후 발전 방향 및 비즈니스 확장 계획
12.2 시연 시나리오
일반 사용자 시나리오
- 메인 페이지 접속 → 다양한 시골 숙소 목록 확인
- 지역 검색 → "경상북도ㆍ안동시" 검색으로 안동 지역 숙소 필터링
- 숙소 상세보기 → 이미지, 시설 정보, 리뷰 확인
- 위시리스트 추가 → 관심 숙소를 찜 목록에 저장
- 예약하기 → 날짜 선택, 쿠폰 적용 후 예약 완료
- 예약 내역 확인 → 마이페이지에서 예약 정보 관리
관리자 시나리오
- 관리자 로그인 → 관리자 전용 메뉴 접근
- 숙소 등록 → 새로운 시골 숙소 정보 및 이미지 등록
- 예약 관리 → 전체 예약 현황 모니터링
- 회원 관리 → 가입 회원 정보 조회 및 관리
- 리뷰 관리 → 부적절한 리뷰 삭제 및 관리
관련 링크
- GitHub Repository : https://github.com/HanaSeoo/urban-village
- 프로젝트 시연 영상 : https://www.youtube.com/watch?v=8vGBCngFQcg
- ERD : https://www.erdcloud.com/d/W9xDzdsBkuDBq9jK3
- PPT : https://docs.google.com/presentation/d/1I62aDOsSJjRkB1geWFhEpDlFC0Xsi0T1wTIzhSVqryk/edit?usp=sharing
오반팀프로젝트 ppt
여유를 찾아서 -시골 옛 공간 되살림 프로젝트- 오반 프로젝트 팀 김대중, 김상현, 김찬영, 서하나, 최승필 25.03.31 - 25.04.25
docs.google.com
GitHub - HanaSeoo/urban-village
Contribute to HanaSeoo/urban-village development by creating an account on GitHub.
github.com
urban2
Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.
www.erdcloud.com
'프로젝트' 카테고리의 다른 글
| KG IT BANK 세 번째 프로젝트 - MOGATSHOO (모갔슈) 탈모진단 AI 웹서비스 (4) | 2025.07.18 |
|---|---|
| XRPL KOREA 해커톤 프로젝트 - 발달 장애인을 위한 블록체인 핀테크 서비스 (5) | 2025.07.16 |
| KG IT BANK 첫 번째 프로젝트 - 스마트 헬스케어 관리 시스템 (9) | 2025.07.16 |
| 딥페이크 성범죄 해결을 위한 NFT 기반 신원추적 아이디어 제안서 (4) | 2025.07.12 |
| a-IGZO TFT 제작 및 전기적 특성 분석 프로젝트(4학년 2학기) (2) | 2025.07.11 |