본문 바로가기
[ 전자정부프레임워크 ]

전자정부프레임워크 spring boot로 환경 세팅하기

by 히앤님 2024. 7. 4.
반응형
SMALL

기존 샘플에 추가 샘플을 붙이는 방식으로 하려고 했으나...

공수가 좀 들더라도 새로운 기술을 적용해보는 방식도 도전해보는 것으로 결정되었다.

 

따라서 변경된 샘플은 총 두가지.

 

1. 기존 spring 방식인 3.10에 추가 샘플을 붙인다.(jsp 작업만 하면 됨)

2. 새로운 방식인 spring boot로 4.2 샘플을 새롭게 생성한다.

 

또한 인증용 샘플도 4.2로 만들 예정이기 때문에 boot로 생성해보기로 했다.


일단 뭐부터 해볼까 하다가 GPT에게 물어봄.

 

Q. egovframework 4.2에서 java 17 버전으로 spring boot로 프로젝트를 만들고 싶어 최초 설정 방법을 알려줘

 

 

전자정부 프레임워크 4.2에서 Java 17 버전을 사용하여 Spring Boot 프로젝트를 생성하는 방법을 단계별로 설명하겠습니다. 전자정부 프레임워크는 기본적으로 Spring 기반으로 되어 있으므로, Spring Boot를 사용하는 것이 가능합니다. 다음 단계에 따라 설정을 진행하면 됩니다.

 

1. 개발 환경 준비

필수 도구 설치:

  • Java 17 (JDK 17)
  • IntelliJ IDEA 또는 Eclipse IDE
  • Maven 또는 Gradle
  • 전자정부 프레임워크 4.2 라이브러리

2. Spring Boot 프로젝트 생성

Spring Initializr 사용: Spring Initializr를 사용하여 기본 Spring Boot 프로젝트를 생성할 수 있습니다.

  • 웹 브라우저에서 Spring Initializr로 이동합니다.
  • 다음과 같이 설정합니다:
    • Project: Maven Project
    • Language: Java
    • Spring Boot: 2.7.x 또는 3.x (Spring Boot 최신 버전)
    • Project Metadata: 그룹, 아티팩트, 이름, 설명 등을 입력합니다.
    • Packaging: Jar
    • Java: 17
    • Dependencies: Spring Web, Spring Data JPA, MySQL Driver 등 필요한 의존성을 추가합니다.
  • Generate 버튼을 클릭하여 프로젝트를 다운로드하고 압축을 풉니다.

3. 프로젝트에 전자정부 프레임워크 설정 추가

전자정부 프레임워크 라이브러리를 Maven 의존성으로 추가합니다. pom.xml 파일을 열고, 필요한 의존성을 추가합니다.

xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>egov-board</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>egov-board</name>
    <description>Demo project for Spring Boot and eGovFramework</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- eGovFramework Dependencies -->
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.ptl.mvc</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.fdl.cmmn</artifactId>
            <version>4.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.fdl.idgnr</artifactId>
            <version>4.2.0</version>
        </dependency>

        <!-- Additional Dependencies -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

4. 애플리케이션 설정

application.properties 설정: src/main/resources/application.properties 파일에 데이터베이스 설정과 기타 설정을 추가합니다.

properties
# Database configuration
spring.datasource.url=jdbc:mysql://localhost:3306/yourdatabase
spring.datasource.username=yourusername
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA properties
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

 

5. 엔티티, 레포지토리, 서비스 및 컨트롤러 작성

엔티티 클래스 작성: src/main/java/com/example/egovboard/domain/Board.java

java
package com.example.egovboard.domain;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Entity
public class Board {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String content;
    private String author;
    private LocalDateTime createdDate = LocalDateTime.now();

    // Getters and Setters
}

 

 

 

레포지토리 인터페이스 작성: src/main/java/com/example/egovboard/repository/BoardRepository.java

java
package com.example.egovboard.repository;

import com.example.egovboard.domain.Board;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BoardRepository extends JpaRepository<Board, Long> {
}
 
 

서비스 인터페이스 및 구현 작성: src/main/java/com/example/egovboard/service/BoardService.java

java
package com.example.egovboard.service;

import com.example.egovboard.domain.Board;
import java.util.List;

public interface BoardService {
    List<Board> getAllBoards();
    Board getBoardById(Long id);
    Board saveBoard(Board board);
    void deleteBoard(Long id);
}
 
 
 

src/main/java/com/example/egovboard/service/BoardServiceImpl.java

java
package com.example.egovboard.service;

import com.example.egovboard.domain.Board;
import com.example.egovboard.repository.BoardRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BoardServiceImpl implements BoardService {

    @Autowired
    private BoardRepository boardRepository;

    @Override
    public List<Board> getAllBoards() {
        return boardRepository.findAll();
    }

    @Override
    public Board getBoardById(Long id) {
        return boardRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Board not found"));
    }

    @Override
    public Board saveBoard(Board board) {
        return boardRepository.save(board);
    }

    @Override
    public void deleteBoard(Long id) {
        boardRepository.deleteById(id);
    }
}
 
 

컨트롤러 클래스 작성: src/main/java/com/example/egovboard/controller/BoardController.java

java
package com.example.egovboard.controller;

import com.example.egovboard.domain.Board;
import com.example.egovboard.service.BoardService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/boards")
public class BoardController {

    @Autowired
    private BoardService boardService;

    @GetMapping
    public List<Board> getAllBoards() {
        return boardService.getAllBoards();
    }

    @GetMapping("/{id}")
    public Board getBoardById(@PathVariable Long id) {
        return boardService.getBoardById(id);
    }

    @PostMapping
    public Board createBoard(@RequestBody Board board) {
        return boardService.saveBoard(board);
    }

    @PutMapping("/{id}")
    public Board updateBoard(@PathVariable Long id, @RequestBody Board boardDetails) {
        Board board = boardService.getBoardById(id);
        board.setTitle(boardDetails.getTitle());
        board.setContent(boardDetails.getContent());
        board.setAuthor(boardDetails.getAuthor());
        return boardService.saveBoard(board);
    }

    @DeleteMapping("/{id}")
    public void deleteBoard(@PathVariable Long id) {
        boardService.deleteBoard(id);
    }
}
 
 
 

6. 애플리케이션 실행

모든 설정이 완료되었으면, 애플리케이션을 실행합니다. src/main/java/com/example/egovboard/EgovBoardApplication.java 파일을 생성하고 메인 클래스를 작성합니다.

java
package com.example.egovboard;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class EgovBoardApplication {

    public static void main(String[] args) {
        SpringApplication.run(EgovBoardApplication.class, args);
 
 

 


 

흠...  Spring Initializr 사용: Spring Initializr를 사용하여 기본 Spring Boot 프로젝트를 생성할 수 있습니다.

여기서부터 시작해본다.

 

 

 

빌드 자동화 툴인 maven을 사용했지만 spring boot는 gradle이 기본설정값이고 요즘은 거의 gradle을 쓴다.

https://leedohyun1985.tistory.com/39

 

maven과 gradle 사이에서 고민했는데, 1차적 목표가 호환성 확인 샘플을 제작하는 것이므로 이미 4.2로 호환성 확인을 한 타사 가이드 문서를 참조했더니 Maven을 사용하고 있었다.

전자정부프레임워크는 spring framework의 maven을 기본적으로 채용했기 때문에 기존부터 사용되는 것인데, 이 부분은 따로 변경하지 않고 그대로 하기로 했다.

 

snapshot은 dev 버전이라 보통 안쓴다고 함.

생성해보려고 버전을 보는데 2점대가 없다.

 

찾다가 Spring Initializr로 만드는 것은 포기함...

 

 

 

실행환경 2.7.12 지원이니 spring boot 3점대는 지원하지 않는다는 말이다.

스프링 부트 3.2.0 버전은
JDK17 이상이 필요하며 21까지 호환되고
스프링 프레임워크도 6.1.1 이상이 필요합니다.
참고) https://docs.spring.io/spring-boot/docs/3.2.0/reference/html/getting-started.html#getting-started

표준프레임워크 4.2 버전은
JDK 1.8을 기본으로
스프링 프레임워크 5.3.27 버전이 적용되었으므로
스프링 부트 3.2.0 버전과의 호환은 어렵습니다.
참고) https://www.egovframe.go.kr/home/sub.do?menuNo=13

 

Q&A에 이렇게 있는거 보니 initializr에 있는 3.3.1을 못쓰는 것 같음... 지금 보니까 버전별 구성에도 이렇게 써있네.... SpringBoot 2.7.12 지원이라고. 부트 버전을 맞춰줘야 할 듯.

 

 

https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?pagerOffset=0&searchKey=&searchValue=&menuNo=69&qaId=QA_00000000000023372

 

묻고 답하기 | 표준프레임워크 포털 eGovFrame

처리중입니다. 잠시만 기다려주십시오.

www.egovframe.go.kr

 

 

https://egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000023597

 

묻고 답하기 | 표준프레임워크 포털 eGovFrame

처리중입니다. 잠시만 기다려주십시오.

egovframe.go.kr

 


문의글 찾아보니... 지금 spring 5.3.27인데 spring 6에 spring boot 3을 지원하려면 다음 버전이 나와야하는 것. 2024-03-13 문의이니까 현재는 그렇게 못쓰는게 결론이다.

 

스프링 6이랑 자카르타 전환 업그레이드는 추후에 오니까 지금 완전 최신으로는 또 못한다는거임.

 

Tip) 표준프레임워크가 잘 적용되었는지 확인해주는 적용지원 서비스가 있다고 함.
https://www.egovframe.go.kr/home/sub.do?menuNo=67
https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000021972
위에 게시글 보고 boot 프로젝트에서 라이브러리 추가하고 해서 할 수 있다고 함.

 

 


 

 

 

ㅇㅋ... BOOT로 다시 만들어봅니다.

 

나중에 비교할 수 있게 group id는 맞춰줬음.

 

 

 

 next 눌러서 예제 만들면 예제소스 포함해서 만들어짐.

 

 

얘는 Run As 에서 첫번쨰꺼 실행이 아님. 저번에 보니까 boot는 실행버튼이 다르더만.

 

spring boot app 으로 실행하니 콘솔에 spring 마크가 뜨면서 실행되다가 failed to start가 뜬다.

 

일단 8080 부터 변경해주자. 이거 server.xml 말고 application.properties 를 수정해줘야한다고 함.

 

server.port=8080

# 수동 Bean이 자동 Bean을 오버라이딩하게 설정
spring.main.allow-bean-definition-overriding=true

# open-in-view(혹은 Open-Session-In-View(OSIV))
# true(기본값) : 사용자에게 응답 또는 view가 렌더링될 때까지 영속성 컨텍스트 유지
# false : 트랜젝션이 종료될 때 영속성 컨텍스트 종료
spring.jpa.open-in-view=false

 

이거 10002로 안겹치게 수정해줌.

 

jdk 맞춰주고 실행해주니까 샘플 실행이 된다.

카테고리 id 누르면 수정페이지로도 들어가지고 crud가 된다.

이 샘플 데이터 가지고 기본적으로 호환성 샘플을 만들어봐야함.

반응형
LIST

댓글