guntaek 2024-07-29
Merge remote-tracking branch 'origin/master'
# Conflicts:
#	src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
@f2dc0eda18228da54e800e6495d2ceee6f2e47f7
gradle/wrapper/gradle-wrapper.properties
--- gradle/wrapper/gradle-wrapper.properties
+++ gradle/wrapper/gradle-wrapper.properties
@@ -1,7 +1,6 @@
+#Wed Jul 24 13:48:54 KST 2024
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
-networkTimeout=10000
-validateDistributionUrl=true
-zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
--- src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
+++ src/main/java/com/takensoft/ai_lms/common/confing/SecurityConfig.java
@@ -62,8 +62,14 @@
                 .requestMatchers( "/auth/**", "/auth/login.json").permitAll() // /user/** 경로는 모두 허용
                 .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() // swagger 진입 허용
                 .requestMatchers("/test/**").permitAll()
+                .requestMatchers("/text/**").permitAll() // 지문 정보 진입 허용
+                .requestMatchers("/schedule/**").permitAll() // 학습일정 정보 진입 허용
                 .requestMatchers("/studentInfo/**").permitAll() // 학생 정보 진입 허용(민수)
                 .requestMatchers("/board/**").permitAll() // 게시판 정보 진입 허용
+                .requestMatchers("/book/**").permitAll() // 교재 정보 진입 허용
+                .requestMatchers("/file/**").permitAll() // 파일 정보 진입 허용
+                .requestMatchers("/classes/**").permitAll() // 반 정보 진입 허용
+                .requestMatchers("/classBook/**").permitAll() // 반 - 책 정보 진입 허용
                 .requestMatchers("/unit/**").permitAll()
                 .requestMatchers("/photo/**").permitAll()
                 .anyRequest().authenticated()); // 나머지 경로는 인증 필요
src/main/java/com/takensoft/ai_lms/lms/board/web/BoardController.java
--- src/main/java/com/takensoft/ai_lms/lms/board/web/BoardController.java
+++ src/main/java/com/takensoft/ai_lms/lms/board/web/BoardController.java
@@ -3,6 +3,7 @@
 
 import com.takensoft.ai_lms.lms.board.service.BoardService;
 import com.takensoft.ai_lms.lms.board.vo.BoardVO;
+import com.takensoft.ai_lms.lms.file.service.FileService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.HttpStatus;
 
src/main/java/com/takensoft/ai_lms/lms/book/dao/BookDAO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/book/dao/BookDAO.java
@@ -0,0 +1,56 @@
+package com.takensoft.ai_lms.lms.book.dao;
+
+import com.takensoft.ai_lms.lms.book.vo.BookVO;
+import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
+
+import java.util.List;
+
+/**
+ * @author  : 구자현
+ * @since   : 2024.07.25
+ *
+ * 교재 관련 Mapper
+ */
+@Mapper("bookDAO")
+public interface BookDAO {
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 전체 교재 목록 출력
+     */
+    List<BookVO> getAllBooks();
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 책의 상세 정보
+     */
+    BookVO getBookById(String book_id);
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 등록
+     */
+    void insertBook(BookVO book);
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 제목 수정
+     */
+    void updateBook(BookVO book);
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 삭제
+     */
+    void deleteBook(String book_id);
+}
 
src/main/java/com/takensoft/ai_lms/lms/book/service/BookService.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/book/service/BookService.java
@@ -0,0 +1,53 @@
+package com.takensoft.ai_lms.lms.book.service;
+
+import com.takensoft.ai_lms.lms.book.vo.BookVO;
+import java.util.List;
+
+/**
+ * @author  : 구자현
+ * @since   : 2024.07.25
+ *
+ * 교재 관련 Service 클래스
+ */
+public interface BookService {
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 전체 교재 목록 출력
+     */
+    List<BookVO> getAllBooks();
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 책의 상세 정보
+     */
+    BookVO getBookById(String book_id);
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 등록
+     */
+    void insertBook(BookVO book);
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 제목 수정
+     */
+    void updateBook(BookVO book);
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 삭제
+     */
+    void deleteBook(String book_id);
+}
 
src/main/java/com/takensoft/ai_lms/lms/book/service/Impl/BookServiceImpl.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/book/service/Impl/BookServiceImpl.java
@@ -0,0 +1,82 @@
+package com.takensoft.ai_lms.lms.book.service.Impl;
+
+import com.takensoft.ai_lms.common.idgen.service.IdgenService;
+import com.takensoft.ai_lms.lms.book.dao.BookDAO;
+import com.takensoft.ai_lms.lms.book.service.BookService;
+import com.takensoft.ai_lms.lms.book.vo.BookVO;
+import lombok.RequiredArgsConstructor;
+import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.stereotype.Service;
+import java.util.List;
+
+/**
+ * @author  : 구자현
+ * @since   : 2024.07.25
+ *
+ * 교재 관련 ServiceImpl 클래스
+ */
+@Service
+@RequiredArgsConstructor
+public class BookServiceImpl extends EgovAbstractServiceImpl implements BookService {
+
+    private final BookDAO bookDAO;
+
+    private final IdgenService bookIdgn;
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 전체 교재 목록 출력
+     */
+    @Override
+    public List<BookVO> getAllBooks() {
+        return bookDAO.getAllBooks();
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 책의 상세 정보
+     */
+    @Override
+    public BookVO getBookById(String book_id) {
+        return bookDAO.getBookById(book_id);
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 등록
+     */
+    @Override
+    public void insertBook(BookVO book) {
+        String book_id = bookIdgn.getNextStringId();
+        book.setBook_id(book_id);
+        bookDAO.insertBook(book);
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 제목 수정
+     */
+    @Override
+    public void updateBook(BookVO book) {
+        bookDAO.updateBook(book);
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 삭제
+     */
+    @Override
+    public void deleteBook(String book_id) {
+        bookDAO.deleteBook(book_id);
+    }
+}(No newline at end of file)
 
src/main/java/com/takensoft/ai_lms/lms/book/vo/BookVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/book/vo/BookVO.java
@@ -0,0 +1,23 @@
+package com.takensoft.ai_lms.lms.book.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author  : 구자현
+ * @since   : 2024.07.25
+ *
+ * 교재 관련 VO
+ */
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class BookVO {
+    // 교재 아이디
+    private String book_id;
+    // 교재 제목
+    private String book_nm;
+}
 
src/main/java/com/takensoft/ai_lms/lms/book/web/BookController.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/book/web/BookController.java
@@ -0,0 +1,77 @@
+package com.takensoft.ai_lms.lms.book.web;
+
+import com.takensoft.ai_lms.lms.book.service.Impl.BookServiceImpl;
+import com.takensoft.ai_lms.lms.book.vo.BookVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * @author  : 구자현
+ * @since   : 2024.07.25
+ *
+ * 교재 관련 Controller 클래스
+ */
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/book")
+public class BookController {
+
+    private final BookServiceImpl bookServiceImpl;
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 전체 교재 목록 출력
+     */
+    @GetMapping
+    public List<BookVO> getAllBooks() {
+        return bookServiceImpl.getAllBooks();
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 책의 상세 정보
+     */
+    @GetMapping("/{book_id}")
+    public BookVO getBookById(@PathVariable String book_id) {
+        return bookServiceImpl.getBookById(book_id);
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 등록
+     */
+    @PostMapping
+    public void insertBook(@RequestBody BookVO book) {
+        bookServiceImpl.insertBook(book);
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 제목 수정
+     */
+    @PutMapping
+    public void updateBook(@RequestBody BookVO book) {
+        bookServiceImpl.updateBook(book);
+    }
+
+    /**
+     * @author  : 구자현
+     * @since   : 2024.07.25
+     *
+     * 교재 삭제
+     */
+    @DeleteMapping("/{book_id}")
+    public void deleteBook(@PathVariable String book_id) {
+        bookServiceImpl.deleteBook(book_id);
+    }
+}(No newline at end of file)
 
src/main/java/com/takensoft/ai_lms/lms/class_book/dao/ClassBookDAO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/class_book/dao/ClassBookDAO.java
@@ -0,0 +1,22 @@
+package com.takensoft.ai_lms.lms.class_book.dao;
+
+
+import com.takensoft.ai_lms.lms.class_book.vo.ClassBookVO;
+import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
+
+/**
+ * @author  : 박세훈
+ * since   : 2024.07.20
+ *
+ *  class - book관련 Mapper
+ */
+
+@Mapper("classBookDAO")
+public interface ClassBookDAO {
+
+    // 책 등록
+    int registerBook(ClassBookVO classBookVO) throws Exception;
+
+    // 책 삭제
+    int deleteClassBook(ClassBookVO classBookVO) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/class_book/service/ClassBookService.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/class_book/service/ClassBookService.java
@@ -0,0 +1,20 @@
+package com.takensoft.ai_lms.lms.class_book.service;
+
+import com.takensoft.ai_lms.lms.class_book.vo.ClassBookVO;
+
+
+/**
+ * @author  : 박세훈
+ * since   : 2024.07.20
+ *
+ *  class - book관련 Service
+ */
+
+public interface ClassBookService {
+
+    // 책 등록
+    int registerBook(ClassBookVO classBookVO) throws Exception;
+
+    // 책 삭제
+    int deleteClassBook(ClassBookVO classBookVO) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/class_book/service/Impl/ClassBookServiceImpl.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/class_book/service/Impl/ClassBookServiceImpl.java
@@ -0,0 +1,32 @@
+package com.takensoft.ai_lms.lms.class_book.service.Impl;
+
+
+import com.takensoft.ai_lms.lms.class_book.dao.ClassBookDAO;
+import com.takensoft.ai_lms.lms.class_book.service.ClassBookService;
+import com.takensoft.ai_lms.lms.class_book.vo.ClassBookVO;
+import lombok.RequiredArgsConstructor;
+import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * @author  : 박세훈
+ * since   : 2024.07.20
+ *
+ *  class - book관련 ServiceImpl
+ */
+@Service("classBookService")
+@RequiredArgsConstructor
+public class ClassBookServiceImpl extends EgovAbstractServiceImpl implements ClassBookService {
+
+    private final ClassBookDAO classBookDAO;
+
+    @Override
+    public int registerBook(ClassBookVO classBookVO) throws Exception {
+        return classBookDAO.registerBook(classBookVO);
+    }
+    @Override
+    public int deleteClassBook(ClassBookVO classBookVO) throws Exception {
+        return classBookDAO.deleteClassBook(classBookVO);
+    }
+}
 
src/main/java/com/takensoft/ai_lms/lms/class_book/vo/ClassBookVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/class_book/vo/ClassBookVO.java
@@ -0,0 +1,20 @@
+package com.takensoft.ai_lms.lms.class_book.vo;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class ClassBookVO {
+    // 반 아이디
+    private String sclsId;
+
+    // 책 아이디
+    private String bookId;
+
+}
 
src/main/java/com/takensoft/ai_lms/lms/class_book/web/ClassBookController.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/class_book/web/ClassBookController.java
@@ -0,0 +1,67 @@
+package com.takensoft.ai_lms.lms.class_book.web;
+
+import com.takensoft.ai_lms.lms.class_book.service.ClassBookService;
+import com.takensoft.ai_lms.lms.class_book.vo.ClassBookVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.HashMap;
+
+@RestController
+@RequiredArgsConstructor
+@RequestMapping(value = "/classBook")
+public class ClassBookController {
+
+    private final ClassBookService classBookService;
+
+    /**
+     * @author  박세훈
+     * @since   2024.07.29
+     * param   ClassBookDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 책 등록
+     */
+    @PostMapping("/register.json")
+    public String registerBook(@RequestBody ClassBookVO classBookVO) throws Exception {
+        try {
+            int result = classBookService.registerBook(classBookVO);
+            if (result > 0) {
+                return "success";
+            } else {
+                return "fail";
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "Error";
+        }
+    }
+
+
+    /**
+     * @author  박세훈
+     * @since   2024.07.29
+     * param   ClassBookDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 책 삭제
+     */
+    @DeleteMapping("/deleteClassBook.json")
+    public String deleteClassBook(@RequestBody ClassBookVO classBookVO) throws Exception {
+        try {
+            int result = classBookService.deleteClassBook(classBookVO);
+            System.out.println("result = " + result);
+            if (result > 0) {
+                return "success";
+            } else {
+                return "fail";
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "Error";
+        }
+    }
+
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/dao/ClassDAO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/dao/ClassDAO.java
@@ -0,0 +1,30 @@
+package com.takensoft.ai_lms.lms.classes.dao;
+
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * @author  : 정다정
+ * @since   : 2024.07.25
+ *
+ * 반 관련 Mapper
+ */
+@Mapper()
+public interface ClassDAO {
+    // 반 조회
+    public List<ClassVO> selectClass(String userId) throws Exception;
+
+    // 반 생성
+    public int insertClass(ClassVO classVO) throws Exception;
+
+    // 반 수정
+    public int updateClass(ClassVO classVO) throws Exception;
+
+    // 반 삭체
+    public int deleteClass(String sclsId) throws Exception;
+
+    // 반 아이디(scls_id) 존재 확인
+    public int existsClassById(String sclsId) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/service/ClassService.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/service/ClassService.java
@@ -0,0 +1,28 @@
+package com.takensoft.ai_lms.lms.classes.service;
+
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+
+import java.util.List;
+
+/**
+ * @author  : 정다정
+ * since   : 2024.07.25
+ *
+ * 반 조회 관련 인터페이스
+ */
+public interface ClassService {
+    // 반 조회
+    public List<ClassVO> selectClass(String userId) throws Exception;
+
+    // 반 생성
+    public int insertClass(ClassVO classVO) throws Exception;
+
+    // 반 수정
+    public int updateClass(ClassVO classVO) throws Exception;
+
+    // 반 삭제
+    public int deleteClass(String sclsId) throws Exception;
+
+    // 반 아이디(scls_id) 존재 확인
+    boolean existsClassById(String sclsId) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/service/Impl/ClassServiceImpl.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/service/Impl/ClassServiceImpl.java
@@ -0,0 +1,67 @@
+package com.takensoft.ai_lms.lms.classes.service.Impl;
+
+import com.takensoft.ai_lms.common.idgen.service.IdgenService;
+import com.takensoft.ai_lms.lms.classes.dao.ClassDAO;
+import com.takensoft.ai_lms.lms.classes.service.ClassService;
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+public class ClassServiceImpl implements ClassService {
+
+    private final ClassDAO classDAO;
+
+    private final IdgenService classIdgn;
+
+    /**
+     * 반 조회
+     */
+    @Override
+    @Transactional
+    public List<ClassVO> selectClass(String userId) throws Exception{
+        return classDAO.selectClass(userId);
+    }
+
+    /**
+     * 반 생성
+     */
+    @Override
+    @Transactional
+    public int insertClass(ClassVO classVO) throws Exception{
+        String sclsId = classIdgn.getNextStringId();
+        classVO.setSclsId(sclsId);
+        return classDAO.insertClass(classVO);
+    }
+
+    /**
+     * 반 수정
+     */
+    @Override
+    @Transactional
+    public int updateClass(ClassVO classVO) throws Exception{
+        return classDAO.updateClass(classVO);
+    }
+
+    /**
+     * 반 삭제
+     */
+    @Override
+    @Transactional
+    public int deleteClass(String sclsId) throws Exception {
+        return classDAO.deleteClass(sclsId);
+    }
+
+    /**
+     * 반 아이디(scls_id) 존재 확인
+     */
+    @Override
+    @Transactional
+    public boolean existsClassById(String sclsId) throws Exception {
+        return classDAO.existsClassById(sclsId) > 0;
+    }
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/vo/ClassVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/vo/ClassVO.java
@@ -0,0 +1,20 @@
+package com.takensoft.ai_lms.lms.classes.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+
+public class ClassVO {
+    // 반 아이디
+    public String sclsId;
+    // 사용자 아이디(선생)
+    public String userId;
+    // 반 이름
+    public String sclsNm;
+}
 
src/main/java/com/takensoft/ai_lms/lms/classes/web/ClassController.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/classes/web/ClassController.java
@@ -0,0 +1,174 @@
+package com.takensoft.ai_lms.lms.classes.web;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.takensoft.ai_lms.lms.classes.service.ClassService;
+import com.takensoft.ai_lms.lms.classes.vo.ClassVO;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(value="/classes")
+public class ClassController {
+
+    private final ClassService classService;
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 조회
+     */
+    @PostMapping("/selectClass.json")
+    @Operation(summary = "반 조회")
+    public String selectClass(@RequestBody Map<String, Object> params) throws Exception {
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try {
+            String userId = params.get("userId").toString();
+            List<ClassVO> result = classService.selectClass(userId);
+
+            response.addProperty("status", "success");
+            response.add("data", gson.toJsonTree(result));
+
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 생성
+     */
+    @PostMapping("/insertClass.json")
+    @Operation(summary = "반 생성")
+    public String insertClass(@RequestBody ClassVO classVO) throws Exception{
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try{
+            // userId 또는 sclsNm(반 이름)이 비어있으면 fail
+            if (classVO.getUserId() == null || classVO.getUserId().isEmpty() ||
+                    classVO.getSclsNm() == null || classVO.getSclsNm().isEmpty()) {
+                response.addProperty("status", "fail");
+                response.addProperty("message", "userId 또는 반 이름이 비어있습니다.");
+                return gson.toJson(response);
+            }
+
+            int result = classService.insertClass(classVO);
+
+            if(result == -1){
+                response.addProperty("status", "fail");
+                return gson.toJson(response);
+            }
+
+            response.addProperty("status", "success");
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 수정
+     */
+    @PostMapping("/updateClass.json")
+    @Operation(summary = "반 수정")
+    public String updateClass(@RequestBody ClassVO classVO) throws Exception{
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try{
+            // 반 아이디(scls_id)가 존재하는지 확인
+            if (!classService.existsClassById(classVO.getSclsId())) {
+                // 반 아이디(scls_id)가 db에 존재 하지 않으면 수정 실패
+                response.addProperty("status", "fail");
+                response.addProperty("message", "존재 하지 않는 반 아이디(sclsId)입니다.");
+                return gson.toJson(response);
+            }
+
+            int result = classService.updateClass(classVO);
+
+            if(result == -1){
+                response.addProperty("status", "fail");
+                return gson.toJson(response);
+            }
+
+            response.addProperty("status", "success");
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+
+    /**
+     * @author  정다정
+     * @since   2024.07.25
+     * param   ClassDAO
+     * @return
+     * @throws  Exception
+     *
+     * 반 삭제
+     */
+    @DeleteMapping("/deleteClass.json")
+    @Operation(summary = "반 삭제")
+    public String deleteClass(@RequestBody Map<String, Object> params) throws Exception{
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try {
+            String sclsId = params.get("sclsId").toString();
+            classService.deleteClass(sclsId);
+            response.addProperty("status", "success");
+            return gson.toJson(response);
+        } catch (Exception e) {
+            e.printStackTrace();
+
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+
+            return gson.toJson(response);
+        }
+    }
+
+
+}
 
src/main/java/com/takensoft/ai_lms/lms/file/dao/FileDAO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/file/dao/FileDAO.java
@@ -0,0 +1,22 @@
+package com.takensoft.ai_lms.lms.file.dao;
+
+
+import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author  : 홍아랑
+ * since   : 2024.07.26
+ *
+ * 파일 관련 Mapper
+ */
+
+@Mapper("FileDAO")
+
+public interface FileDAO {
+
+    // 파일 정보 조회
+    List<HashMap<String, Object>> findByFileId(HashMap<String, Object> params) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/file/service/FileService.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/file/service/FileService.java
@@ -0,0 +1,16 @@
+package com.takensoft.ai_lms.lms.file.service;
+
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author  : 홍아랑
+ * since   : 2024.07.26
+ *
+ * 파일 관련 Service
+ */
+public interface FileService {
+    // 파일 정보 조회
+    List<HashMap<String, Object>> findByFileId(HashMap<String, Object> params) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/file/service/impl/FileServiceImpl.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/file/service/impl/FileServiceImpl.java
@@ -0,0 +1,22 @@
+package com.takensoft.ai_lms.lms.file.service.impl;
+
+import com.takensoft.ai_lms.lms.file.dao.FileDAO;
+import com.takensoft.ai_lms.lms.file.service.FileService;
+import lombok.RequiredArgsConstructor;
+import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+
+@Service("FileService")
+@RequiredArgsConstructor
+public class FileServiceImpl extends EgovAbstractServiceImpl implements FileService {
+    private final FileDAO fileDAO;
+
+    // 파일 정보 조회
+    // @Override
+    public List<HashMap<String, Object>> findByFileId(HashMap<String, Object> params) throws Exception {
+        return fileDAO.findByFileId(params);
+    }
+}
 
src/main/java/com/takensoft/ai_lms/lms/file/vo/FileVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/file/vo/FileVO.java
@@ -0,0 +1,46 @@
+package com.takensoft.ai_lms.lms.file.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+/**
+ * @author  : 홍아랑
+ * since   : 2024.07.26
+ *
+ * 파일 관련 VO
+ */
+
+
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class FileVO {
+
+    // 파일 아이디
+    private String fileId;
+    // 파일 관리 아이디
+    private String fileMngId;
+    // 파일명
+    private String fileNm;
+    // 마스크명
+    private String fileEncptNm;
+    // 절대 경로
+    private String fileApath;
+    // 상대 경로
+    private String fileRpath;
+    // 확장자
+    private String fileExtn;
+    // 파일 크기
+    private String fileSz;
+    // 파일 타입
+    private String fileClsf;
+    // 등록자
+    private String reg;
+    // 등록 일자
+    private String regDt;
+
+}
 
src/main/java/com/takensoft/ai_lms/lms/file/web/FileController.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/file/web/FileController.java
@@ -0,0 +1,39 @@
+package com.takensoft.ai_lms.lms.file.web;
+
+import com.takensoft.ai_lms.lms.file.service.FileService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+
+/**
+ * @author  : 홍아랑
+ * since   : 2024.07.26
+ * 파일 관련 Controller
+ */
+@RestController
+//@Slf4j
+@RequiredArgsConstructor
+@RequestMapping(value = "/file")
+public class FileController {
+    private final FileService fileService;
+
+    /**
+     * @author 홍아랑
+     * @since 2024.07.26
+     *
+     * 파일 정보 조회
+     */
+    @PostMapping("/find.json")
+    public ResponseEntity<?> findByFileId(@RequestBody HashMap<String, Object> params) throws Exception {
+        HashMap<String, Object> result = new HashMap<>();
+
+        result.put("list", fileService.findByFileId(params));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+}
src/main/java/com/takensoft/ai_lms/lms/student/dao/StudentInfoDAO.java
--- src/main/java/com/takensoft/ai_lms/lms/student/dao/StudentInfoDAO.java
+++ src/main/java/com/takensoft/ai_lms/lms/student/dao/StudentInfoDAO.java
@@ -4,6 +4,8 @@
 import org.apache.ibatis.annotations.Param;
 import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
 
+import java.util.List;
+
 /**
  * @author 권민수
  * @since 2024.07.25
src/main/java/com/takensoft/ai_lms/lms/student/service/Impl/StudentInfoServiceImpl.java
--- src/main/java/com/takensoft/ai_lms/lms/student/service/Impl/StudentInfoServiceImpl.java
+++ src/main/java/com/takensoft/ai_lms/lms/student/service/Impl/StudentInfoServiceImpl.java
@@ -6,6 +6,8 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author 권민수
  * @since 2024.07.25
 
src/main/java/com/takensoft/ai_lms/lms/student/vo/HistoryVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/student/vo/HistoryVO.java
@@ -0,0 +1,25 @@
+package com.takensoft.ai_lms.lms.student.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.sql.Timestamp;
+
+/**
+ * @author 권민수
+ * @since 2024.07.26
+ *
+ * 학생 최근 학습 정보 VO 클래스
+ */
+
+@Getter
+@Setter
+public class HistoryVO {
+
+    private String bookId;
+    private String bookName;
+    private String unitId;
+    private String unitName;
+    private String completionTime;
+
+}
src/main/java/com/takensoft/ai_lms/lms/student/vo/StudentInfoVO.java
--- src/main/java/com/takensoft/ai_lms/lms/student/vo/StudentInfoVO.java
+++ src/main/java/com/takensoft/ai_lms/lms/student/vo/StudentInfoVO.java
@@ -3,6 +3,8 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.List;
+
 /**
  * @author 권민수
  * @since 2024.07.25
@@ -10,14 +12,17 @@
  * 학생 불러오는 정보 VO 클래스
  */
 
-@Setter
 @Getter
+@Setter
 public class StudentInfoVO {
+
     private String studentName;
     private String institutionName;
-    private String grade;
+    private int grade;
     private String className;
     private String studentQuestion;
+    private int totalProblemsSolved;
+    private List<HistoryVO> history;
 
 }
 
 
src/main/java/com/takensoft/ai_lms/lms/text/dao/TextDAO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/text/dao/TextDAO.java
@@ -0,0 +1,37 @@
+package com.takensoft.ai_lms.lms.text.dao;
+
+import com.takensoft.ai_lms.lms.text.vo.TextVO;
+import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author  : 이은진
+ * @since   : 2024.07.25
+ *
+ * 지문 관련 Mapper
+ */
+@Mapper("TextDAO")
+public interface TextDAO {
+    // 지문 등록
+    int insertText(TextVO TextVO) throws Exception;
+
+    // 지문 리스트 조회
+    List<HashMap<String, Object>> selectTextList(HashMap<String, Object> params) throws Exception;
+
+    // 지문 수 조회
+    int textCount(HashMap<String, Object> params) throws Exception;
+
+    // 지문 출력
+    List<HashMap<String, Object>> selectOneText(HashMap<String, Object> params) throws Exception;
+
+    // 지문 수정
+    int textUpdate(TextVO TextVO) throws Exception;
+
+    // 지문 삭제
+    int textDelete(String textId) throws Exception;
+
+    // 지문 검색
+    List<HashMap<String, Object>> searchText(HashMap<String, Object> params) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/text/service/Impl/TextServiceImpl.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/text/service/Impl/TextServiceImpl.java
@@ -0,0 +1,92 @@
+package com.takensoft.ai_lms.lms.text.service.Impl;
+
+import com.takensoft.ai_lms.common.idgen.service.IdgenService;
+import com.takensoft.ai_lms.lms.text.dao.TextDAO;
+import com.takensoft.ai_lms.lms.text.service.TextService;
+import com.takensoft.ai_lms.lms.text.vo.TextVO;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author : 이은진
+ * @since : 2024.07.25
+ */
+
+@Service("textService")
+@RequiredArgsConstructor
+public class TextServiceImpl implements TextService {
+
+    private final TextDAO textDAO;
+    private final IdgenService textIdgn;
+
+    /**
+     * 지문 등록
+     */
+    @Override
+    @Transactional
+    public int insertText(TextVO textVO) throws Exception {
+        String textID = textIdgn.getNextStringId();
+        textVO.setTextId(textID);
+        return textDAO.insertText(textVO);
+    }
+
+    /**
+     * 지문 리스트 조회
+     */
+    @Override
+    public List<HashMap<String, Object>> selectTextList(HashMap<String, Object> params) throws Exception {
+        int page = Integer.parseInt(params.get("page").toString());
+        int pageSize = Integer.parseInt(params.get("pageSize").toString());
+
+        int startIndex = (page - 1) * pageSize;
+        params.put("startIndex", startIndex);
+        params.put("pageSize", pageSize);
+        return textDAO.selectTextList(params);
+    }
+
+    /**
+     * 지문 수 조회
+     */
+    @Override
+    public int textCount(HashMap<String, Object> params) throws Exception {
+        return textDAO.textCount(params);
+    }
+
+    /**
+     * 지문 출력
+     */
+    @Override
+    public List<HashMap<String, Object>> selectOneText(HashMap<String, Object> params) throws Exception {
+        return textDAO.selectOneText(params);
+    }
+
+    /**
+     * 지문 수정
+     */
+    @Override
+    public int textUpdate(TextVO textVO) throws Exception {
+        return textDAO.textUpdate(textVO);
+    }
+
+    /**
+     * 지문 삭제
+     */
+    @Override
+    public int textDelete(String textId) throws Exception {
+        return textDAO.textDelete(textId);
+    }
+
+
+    /**
+     * 지문 검색
+     */
+    @Override
+    public List<HashMap<String, Object>> searchText(HashMap<String, Object> params) throws Exception {
+        return textDAO.searchText(params);
+    }
+}
 
src/main/java/com/takensoft/ai_lms/lms/text/service/TextService.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/text/service/TextService.java
@@ -0,0 +1,35 @@
+package com.takensoft.ai_lms.lms.text.service;
+import com.takensoft.ai_lms.lms.text.vo.TextVO;
+
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author  : 이은진
+ * since   : 2024.07.25
+ *
+ * 지문 관련 인터페이스
+ */
+
+public interface TextService {
+    // 지문 등록
+    int insertText(TextVO textVO) throws Exception;
+
+    // 지문 리스트 조회
+    List<HashMap<String, Object>> selectTextList(HashMap<String, Object> params) throws Exception;
+
+    // 지문 수 조회
+    int textCount(HashMap<String, Object> params) throws Exception;
+
+    // 지문 출력
+    List<HashMap<String, Object>> selectOneText(HashMap<String, Object> params)  throws Exception;
+
+    // 지문 수정
+    int textUpdate(TextVO textVO) throws Exception;
+
+    // 지문 삭제
+    int textDelete(String textId) throws Exception;
+
+    // 지문 검색
+    public List<HashMap<String, Object>> searchText(HashMap<String, Object> params) throws Exception;
+}
 
src/main/java/com/takensoft/ai_lms/lms/text/vo/TextVO.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/text/vo/TextVO.java
@@ -0,0 +1,34 @@
+package com.takensoft.ai_lms.lms.text.vo;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.time.LocalDateTime;
+
+/**
+ * @author  : 이은진
+ * since   : 2024.07.26
+ *
+ * 지문 관련 VO
+ */
+
+@Setter
+@Getter
+@NoArgsConstructor
+@AllArgsConstructor
+public class TextVO {
+
+    // 지문 아이디
+    private String textId;
+    // 지문 내용
+    private String textCnt;
+    // 등록일
+    private String regDt;
+    // 파일 관리 아이디
+    private String fileMngId;
+    // 유형 아이디
+    private String textTypeId;
+
+}
 
src/main/java/com/takensoft/ai_lms/lms/text/web/TextController.java (added)
+++ src/main/java/com/takensoft/ai_lms/lms/text/web/TextController.java
@@ -0,0 +1,156 @@
+package com.takensoft.ai_lms.lms.text.web;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.takensoft.ai_lms.lms.text.service.TextService;
+import com.takensoft.ai_lms.lms.text.vo.TextVO;
+import io.swagger.v3.oas.annotations.Operation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author 이은진
+ * @since 2024.07.25
+ */
+
+
+@RestController
+@RequiredArgsConstructor
+@Slf4j
+@RequestMapping(value = "/text")
+public class TextController {
+
+    private final TextService TextService;
+
+    /**
+     * 지문 등록
+     */
+    @PostMapping("/insertText.json")
+    @Operation(summary = "지문 등록")
+    public String insertText(@RequestBody TextVO textVO) throws Exception {
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try {
+            int result = TextService.insertText(textVO);
+            if (result > 0) {
+                response.addProperty("status", "success");
+                response.addProperty("message", "지문이 등록되었습니다.");
+                return gson.toJson(response);
+            } else {
+                response.addProperty("message", "지문 등록 실패");
+                return gson.toJson(response);
+            }
+        } catch (Exception e) {
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+            return gson.toJson(response);
+        }
+    }
+
+
+    /**
+     * 지문 리스트 조회
+     */
+    @GetMapping("/selectTextList.json")
+    @Operation(summary = "지문 리스트 조회")
+    public HashMap<String, Object> getTextList(@RequestBody HashMap<String, Object> params) throws Exception {
+        HashMap<String, Object> result = new HashMap<>();
+
+        int page = Integer.parseInt(params.get("page").toString());
+        int pageSize = Integer.parseInt(params.get("pageSize").toString());
+
+        int totalText = TextService.textCount(params);
+        result.put("totalText", totalText);
+        result.put("texts", TextService.selectTextList(params));
+
+        return result;
+    }
+
+    /**
+     * 지문 출력
+     */
+    @GetMapping("/selectOneText.json")
+    @Operation(summary = "지문 출력")
+    public List<HashMap<String, Object>> selectOneText(@RequestParam HashMap<String, Object> textId) throws Exception {
+        return TextService.selectOneText(textId);
+    }
+
+
+    /**
+     * 지문 수정
+     */
+    @PutMapping(value = "/textUpdate.json")
+    @Operation(summary = "지문 수정")
+    public String textUpdate(@RequestBody TextVO textVO) throws Exception {
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        try {
+            int result = TextService.textUpdate(textVO);
+            if (result > 0) {
+                response.addProperty("status", "success");
+                response.addProperty("message", "지문이 수정되었습니다.");
+                return gson.toJson(response);
+            } else {
+                response.addProperty("message", "수정 실패");
+                return gson.toJson(response);
+            }
+        } catch (Exception e) {
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+            return gson.toJson(response);
+        }
+    }
+
+
+    /**
+     * 지문 삭제
+     */
+    @DeleteMapping(value = "/textDelete.json")
+    @Operation(summary = "지문 삭제")
+    public String textDelete(@RequestBody Map<String, String> request) throws Exception {
+        Gson gson = new Gson();
+        JsonObject response = new JsonObject();
+
+        String textId = request.get("textId");
+        int result = TextService.textDelete(textId);
+        try {
+            if (result > 0) {
+                response.addProperty("status", "success");
+                response.addProperty("message", "사용자가 삭제되었습니다.");
+                return gson.toJson(response);
+            } else {
+                response.addProperty("message", "삭제 실패");
+                return gson.toJson(response);
+            }
+        } catch (Exception e) {
+            response.addProperty("status", "error");
+            response.addProperty("message", e.getMessage());
+            return gson.toJson(response);
+        }
+    }
+
+
+    /**
+     * 지문 검색
+     */
+    @GetMapping("/textSearch.json")
+    @Operation(summary = "지문 검색")
+    public HashMap<String, Object> searchText(@RequestBody HashMap<String, Object> params) throws Exception {
+        HashMap<String, Object> result = new HashMap<>();
+        List<HashMap<String, Object>> textList = TextService.searchText(params);
+        result.put("list", textList);
+        return result;
+    }
+
+}
+
src/main/resources/mybatis/mapper/lms/board-SQL.xml
--- src/main/resources/mybatis/mapper/lms/board-SQL.xml
+++ src/main/resources/mybatis/mapper/lms/board-SQL.xml
@@ -1,19 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.takensoft.ai_lms.lms.board.dao.BoardDAO">
-    <!--
-        작 성 자 : 박민혁
-        작 성 일 : 2024.07.25
-        내   용 : 경로 생성을 위해 만들어 놓은 xml,
-        CRUD를 이용하는데 삭제하거나 수정해서 사용해주세요
-    -->
+
     <resultMap id="boardMap" type="BoardVO">
         <result property="bbsId" column="bbs_id"/>
-        <result property="bbsTitle" column="bbs_ttl"/>
-        <result property="bbsCategory" column="bbs_cls"/>
-        <result property="bbsContents" column="bbs_cnt"/>
-        <result property="bbsTime" column="bbs_tm"/>
-        <result property="fileManageId" column="file_mng_id"/>
+        <result property="bbsTtl" column="bbs_ttl"/>
+        <result property="bbsCls" column="bbs_cls"/>
+        <result property="bbsCnt" column="bbs_cnt"/>
+        <result property="bbsTm" column="bbs_tm"/>
+        <result property="fileMngId" column="file_mng_id"/>
         <result property="sclsId" column="scls_id"/>
     </resultMap>
 
@@ -24,8 +19,20 @@
         내 용 : 게시글 등록 관련
     -->
     <insert id="insertBoard" parameterType="BoardVO">
-        INSERT INTO board(bbs_id, bbs_ttl, bbs_cls, bbs_cnt,bbs_tm,  file_mng_id, scls_id)
-        VALUES ( #{bbsId}, #{bbsTitle}, #{bbsCategory}, #{bbsContents}, now(), #{fileManageId}, #{sclsId});
+        INSERT INTO board(bbs_id,
+                    bbs_ttl,
+                    bbs_cls,
+                    bbs_cnt,
+                    bbs_tm,
+                    file_mng_id,
+                    scls_id)
+        VALUES (#{bbsId},
+                #{bbsTtl},
+                #{bbsCls},
+                #{bbsCnt},
+                now(),
+                #{fileMngId},
+                #{sclsId});
     </insert>
 
     <!--
@@ -75,10 +82,10 @@
         WHERE 1 = 1
         <if test="option != null and keyword != null">
             <choose>
-                <when test="option == 'bbsTitle'">
+                <when test="option == 'bbsTtl'">
                     AND bbs_ttl LIKE CONCAT('%', #{keyword}, '%')
                 </when>
-                <when test="option == 'bbsCategory'">
+                <when test="option == 'bbsCls'">
                     AND bbs_cls LIKE CONCAT('%', #{keyword}, '%')
                 </when>
                 <otherwise>
@@ -97,11 +104,11 @@
     -->
     <update id="updateBoard" parameterType="BoardVO">
         UPDATE board
-        SET bbs_ttl = #{bbsTitle},
-            bbs_cls = #{bbsCategory},
-            bbs_cnt = #{bbsContents},
+        SET bbs_ttl = #{bbsTtl},
+            bbs_cls = #{bbsCls},
+            bbs_cnt = #{bbsCnt},
             bbs_tm = now(),
-            file_mng_id = #{fileManageId}
+            file_mng_id = #{fileMngId}
         WHERE
             bbs_id = #{bbsId}
     </update>
 
src/main/resources/mybatis/mapper/lms/book-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/lms/book-SQL.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.takensoft.ai_lms.lms.book.dao.BookDAO">
+
+    <resultMap id="bookMap" type="BookVO">
+        <result property="book_id" column="book_id"/>
+        <result property="book_nm" column="book_nm"/>
+    </resultMap>
+
+    <!--
+        작 성 자 : 구자현
+        작 성 일 : 2024.07.25
+        내   용 : 전체 교재 목록 출력
+    -->
+    <select id="getAllBooks" resultMap="bookMap">
+        SELECT
+            book_id,
+            book_nm
+         FROM book
+    </select>
+
+    <!--
+        작 성 자 : 구자현
+        작 성 일 : 2024.07.25
+        내   용 : 책의 상세 정보
+    -->
+    <select id="getBookById" parameterType="String" resultMap="bookMap">
+        SELECT
+            book_id,
+            book_nm
+         FROM book
+        WHERE book_id = #{book_id}
+    </select>
+
+    <!--
+        작 성 자 : 구자현
+        작 성 일 : 2024.07.25
+        내   용 : 교재 등록
+    -->
+    <insert id="insertBook" parameterType="bookVO">
+        INSERT INTO book (book_id, book_nm)
+             VALUES (#{book_id}, #{book_nm})
+    </insert>
+
+    <!--
+        작 성 자 : 구자현
+        작 성 일 : 2024.07.25
+        내   용 : 교재 제목 수정
+    -->
+    <update id="updateBook" parameterType="bookVO">
+        UPDATE book
+           SET book_nm = #{book_nm}
+         WHERE book_id = #{book_id}
+    </update>
+
+    <!--
+        작 성 자 : 구자현
+        작 성 일 : 2024.07.25
+        내   용 : 교재 삭제
+    -->
+    <delete id="deleteBook" parameterType="String">
+        DELETE FROM book
+         WHERE book_id = #{book_id}
+    </delete>
+</mapper>(No newline at end of file)
 
src/main/resources/mybatis/mapper/lms/class_book-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/lms/class_book-SQL.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.takensoft.ai_lms.lms.class_book.dao.ClassBookDAO">
+
+
+    <resultMap id="classBookMap" type="ClassBookVO" >
+        <result property="sclsId" column="scls_id"/>
+        <result property="sclsNm" column="scls_nm"/>
+    </resultMap>
+
+    <!--
+         작성자 : 박세훈
+         작성일 : 2024.07.26
+         내 용 : 반에 책 등록
+     -->
+    <insert id="registerBook" parameterType="String" >
+        INSERT INTO class_book( book_id,
+                                scls_id
+        ) VALUES ( #{bookId},
+                    #{sclsId}
+        );
+    </insert>
+
+    <!--
+         작성자 : 박세훈
+         작성일 : 2024.07.26
+         내 용 : 반에 등록 된 책 삭제
+     -->
+    <delete id="deleteClassBook" parameterType="String">
+        DELETE FROM class_book
+        WHERE
+            book_id = #{bookId} AND 
+            scls_id = #{sclsId}
+    </delete>
+
+</mapper>(No newline at end of file)
 
src/main/resources/mybatis/mapper/lms/classes-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/lms/classes-SQL.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.takensoft.ai_lms.lms.classes.dao.ClassDAO">
+
+    <resultMap id="classMap" type="ClassVO">
+        <result property="sclsId" column="scls_id"/>
+        <result property="userId" column="user_id"/>
+        <result property="sclsNm" column="scls_nm"/>
+    </resultMap>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.25
+         내 용 : 반 조회
+     -->
+    <select id="selectClass" parameterType="String" resultMap="classMap">
+        SELECT scls_id
+             , user_id
+             , scls_nm
+        FROM
+            class
+        WHERE
+            user_id = #{userId}
+    </select>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 생성
+     -->
+    <insert id="insertClass" parameterType="ClassVO">
+        INSERT INTO class( scls_id
+                         , user_id
+                         , scls_nm
+        ) VALUES ( #{sclsId}
+                 , #{userId}
+                 , #{sclsNm}
+        );
+    </insert>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 수정
+     -->
+    <update id="updateClass" parameterType="ClassVO">
+        UPDATE class
+        SET
+            scls_nm = #{sclsNm}
+        WHERE
+            scls_id = #{sclsId}
+    </update>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 삭제
+     -->
+    <delete id="deleteClass" parameterType="String">
+        DELETE FROM class
+        WHERE
+            scls_id = #{sclsId}
+    </delete>
+
+    <!--
+         작성자 : 정다정
+         작성일 : 2024.07.26
+         내 용 : 반 아이디(scls_id) 존재 확인
+     -->
+    <select id="existsClassById" parameterType="String" resultType="int">
+        SELECT
+            COUNT(*)
+        FROM
+            class
+        WHERE
+            scls_id = #{sclsId}
+    </select>
+
+</mapper>(No newline at end of file)
 
src/main/resources/mybatis/mapper/lms/files-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/lms/files-SQL.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.takensoft.ai_lms.lms.file.dao.FileDAO">
+    <!--
+        작 성 자 : 박민혁
+        작 성 일 : 2024.07.25
+        내   용 : 경로 생성을 위해 만들어 놓은 xml,
+        CRUD를 이용하는데 삭제하거나 수정해서 사용해주세요
+    -->
+    <resultMap id="FileMap" type="FileVO">
+        <result property="fileId" column="file_id"/>
+        <result property="fileMngId" column="file_mng_id"/>
+        <result property="fileNm" column="file_nm"/>
+        <result property="fileEncptNm" column="file_encpt_nm"/>
+        <result property="fileApath" column="file_apath"/>
+        <result property="fileRpath" column="file_rpath"/>
+        <result property="fileExtn" column="file_extn"/>
+        <result property="fileSz" column="file_sz"/>
+        <result property="fileClsf" column="file_clsf"/>
+        <result property="reg" column="reg"/>
+        <result property="regDt" column="reg_dt"/>
+    </resultMap>
+
+    <!--
+            작성자 : 홍아랑
+            작성일 : 2024.07.26
+            내 용 : 파일 정보 조회
+        -->
+    <select id="findByFileId"  parameterType="FileVO" resultMap="FileMap">
+        SELECT
+            file_id,
+            file_mng_id,
+            file_nm,
+            file_encpt_nm,
+            file_apath,
+            file_rpath,
+            file_extn,
+            file_sz,
+            file_clsf,
+            reg,
+            reg_dt
+        FROM cmmn_file
+        WHERE file_mng_id = #{file_mng_id}
+    </select>
+</mapper>(No newline at end of file)
src/main/resources/mybatis/mapper/lms/student-SQL.xml
--- src/main/resources/mybatis/mapper/lms/student-SQL.xml
+++ src/main/resources/mybatis/mapper/lms/student-SQL.xml
@@ -13,20 +13,49 @@
         <result property="institutionName" column="institutionName"/>
         <result property="grade" column="grade"/>
         <result property="className" column="className"/>
+        <result property="totalProblemsSolved" column="totalProblemsSolved"/>
         <result property="studentQuestion" column="studentQuestion"/>
+        <collection property="history" ofType="com.takensoft.ai_lms.lms.student.vo.HistoryVO">
+            <result property="bookName" column="bookName"/>
+            <result property="bookId" column="bookId"/>
+            <result property="unitName" column="unitName"/>
+            <result property="unitId" column="unitId"/>
+            <result property="completionTime" column="completionTime"/>
+        </collection>
     </resultMap>
 
-    <select id="getStudentInfo" resultType="com.takensoft.ai_lms.lms.student.vo.StudentInfoVO">
+    <select id="getStudentInfo" resultMap="StudentInfoResultMap">
         SELECT
             u.user_nm AS studentName,
             i.ednst_nm AS institutionName,
             ui.grd_no AS grade,
             ui.scls_nm AS className,
-            uc.stn_qna AS studentQuestion
+            (SELECT COUNT(*) FROM problem_log pl WHERE pl.std_id = u.user_id) AS totalProblemsSolved,
+            uc.stn_qna AS studentQuestion,
+            hu.book_id AS bookId,
+            hu.book_nm AS bookName,
+            hu.unit_id AS unitId,
+            hu.unit_nm AS unitName,
+            hu.cmptn_tm AS completionTime
         FROM users u
                  JOIN user_institution ui ON u.user_id = ui.user_id
                  JOIN institution i ON ui.ednst_id = i.ednst_id
                  JOIN user_class uc ON u.user_id = uc.user_id
+                 LEFT JOIN (
+            SELECT
+                uu.user_id,
+                b.book_id,
+                b.book_nm,
+                un.unit_id,
+                un.unit_nm,
+                uu.cmptn_tm
+            FROM user_unit uu
+                     JOIN unit un ON uu.unit_id = un.unit_id
+                     JOIN book b ON un.book_id = b.book_id
+            WHERE uu.user_id = #{userId}
+            ORDER BY uu.cmptn_tm DESC
+                LIMIT 3
+        ) hu ON u.user_id = hu.user_id
         WHERE u.user_id = #{userId}
     </select>
 
 
src/main/resources/mybatis/mapper/lms/text-SQL.xml (added)
+++ src/main/resources/mybatis/mapper/lms/text-SQL.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.takensoft.ai_lms.lms.text.dao.TextDAO">
+
+    <resultMap id="textMap" type="TextVO">
+        <result property="textId" column="text_id"/>
+        <result property="textCnt" column="text_cnt"/>
+        <result property="regDt" column="reg_dt"/>
+        <result property="fileMngId" column="file_mng_id"/>
+        <result property="textTypeId" column="text_type_id"/>
+    </resultMap>
+
+
+    <!--
+         작성자 : 이은진
+         작성일 : 2024.07.26
+         내 용 : 지문 등록
+     -->
+    <insert id="insertText" parameterType="TextVO">
+        INSERT INTO text (text_id
+                         ,text_cnt
+                         ,reg_dt
+                         ,file_mng_id
+                         ,text_type_id
+        ) VALUES (#{textId}
+                 ,#{textCnt}
+                 ,now()
+                 ,#{fileMngId}
+                 ,#{textTypeId}
+                 );
+    </insert>
+
+    <!--
+         작성자 : 이은진
+         작성일 : 2024.07.26
+         내 용 : 지문 수 조회
+     -->
+    <select id="textCount" resultType="Integer">
+        SELECT COUNT(*)
+        FROM text
+    </select>
+
+    <!--
+         작성자 : 이은진
+         작성일 : 2024.07.26
+         내 용 : 지문 리스트 조회
+     -->
+    <select id="selectTextList"  resultMap="textMap">
+        SELECT text_id
+              ,text_cnt
+              ,reg_dt
+              ,file_mng_id
+              ,text_type_id
+        FROM text
+        ORDER BY text_id DESC
+        LIMIT #{pageSize}
+        OFFSET #{startIndex}
+    </select>
+
+    <!--
+         작성자 : 이은진
+         작성일 : 2024.07.26
+         내 용 : 지문 출력
+     -->
+    <select id="selectOneText" parameterType="HashMap" resultType="HashMap">
+        SELECT text_id
+             , text_cnt
+             , reg_dt
+             , file_mng_id
+             , text_type_id
+
+        FROM text
+        WHERE text_id = #{textId}
+        ORDER BY text_id DESC
+    </select>
+
+    <!--
+         작성자 : 이은진
+         작성일 : 2024.07.26
+         내 용 : 지문 수정
+     -->
+    <update id="textUpdate" parameterType="TextVO">
+        UPDATE text
+        SET text_cnt = #{textCnt}
+          , file_mng_id = #{fileMngId}
+          , text_type_id = #{textTypeId}
+        WHERE text_id = #{textId}
+    </update>
+
+    <!--
+         작성자 : 이은진
+         작성일 : 2024.07.26
+         내 용 : 지문 삭제
+     -->
+    <delete id="textDelete" parameterType="String">
+    DELETE FROM text
+    WHERE text_id = #{textId}
+    </delete>
+
+
+    <!--
+        작성자 : 이은진
+        작성일 : 2024.07.26
+        내 용 : 지문 검색
+    -->
+    <select id="searchText" parameterType="TextVO" resultMap="textMap">
+        SELECT *
+        FROM text
+        WHERE 1 = 1
+        <if test="option != null and keyword != null">
+            <choose>
+                <when test="option == 'textId'">
+                    AND text_id LIKE CONCAT('%', #{keyword}, '%')
+                </when>
+                <when test="option == 'textCnt'">
+                    AND text_cnt LIKE CONCAT('%', #{keyword}, '%')
+                </when>
+                <when test="option == 'regDt'">
+                    AND TO_CHAR(reg_dt, 'YYYY-MM-DD HH24:MI:SS') LIKE CONCAT('%', #{keyword}, '%')
+                </when>
+            </choose>
+        </if>
+        ORDER BY text_id DESC
+        LIMIT #{pageSize} OFFSET #{startIndex}
+    </select>
+
+</mapper>
src/main/resources/mybatis/mapper/test/test-SQL.xml
--- src/main/resources/mybatis/mapper/test/test-SQL.xml
+++ src/main/resources/mybatis/mapper/test/test-SQL.xml
@@ -4,7 +4,7 @@
     <!--
         작 성 자 : 방선주
         작 성 일 : 2024.07.05
-        내   용 : 테스트 xml
+        내   용 : 테스트 xml2
     -->
     <select id="testList" resultType="HashMap">
         SELECT test_data
Add a comment
List