개인 프로젝트/프로젝트

KAS_Self Project_Day1

Leo.K 2023. 12. 14. 17:56

 

매번 개인 프로젝트를 시작해야지, 해야지 하지만 시작은 하지 않고 놀기만 했던 것 같다.. 
그러다가 성당에서 행사때마다 간단하게 경량형 프로그램을 개발해서 사용하긴 했는데 이번에는 조금 더 각 잡고
천천히 그리고 꼼꼼하게 하나의 시스템을 개발해보려고 한다. 

배포까지는 정식 서비스 등록은 어렵겠지만,,, 스프링 부트 프로젝트를 윈도우용 실행파일(.exe)로 만들어서
로컬 PC에서 실행할 수 있는 웹페이지를 제작해보고자 한다. 

메인 기능은 자산 관리 시스템이다. 제목에서 보면 알겠지만 
Kuui Asset Management System이다. 
내가 속한 봉사단체가 학생들을 대상으로 교리 및 행사를 하다 보니 이런저런 물질적인 재산이 엄청 많다...
매번 행사 때마다 물품을 빼서 쓰고, 빌려주고 하면서 주기는 해놓긴 하지만 너무 아날로그 감성이라 관리 및 유지보수가 어렵다.

그래서 이번 기회에 큰 맘먹고 페이지 시스템에서 관리할 수 있도록 로컬 데이터베이스를 활용하여 관리시스템을 만들어 볼 것이다.

개인적인 프로젝트 진행 순서이기 때문에 간단히 참고만 하면 좋을 것 같다.

1. 깃 리포지토리 생성 

그렇게나 오래 걸릴 프로젝트는 아니지만 러프하게 1년을 잡고 짬 내서 만들 생각이라 그래도 형상관리는 해야겠지?
리포지토리를 생성하는 방법은 어렵지 않게 Public으로 생성하면 되기 때문에 생략하도록 하겠다. 
https://github.com/yhn032/KAS

 

GitHub - yhn032/KAS: Kuui Asset management System

Kuui Asset management System. Contribute to yhn032/KAS development by creating an account on GitHub.

github.com

현재는 빈 리포지토리만 생성했지만, 앞으로 개발하면서 차차 요구사항 정의서 및 다이어그램을 readme.md에 추가할 예정이다.

2. 원격 저장소와 로컬 저장소 연결 

이건 나만의 야매 방법이긴 하지만,,, 간단해서 애용하는 방법 중의 하나이다. 
필자는 InteliJ Idea Ultra버전을 사용하기 때문에 Spring initializer를 활용해서 의존성을 초기해 추가하여 프로젝트를 생성한다. 이때 주의할 상황은 프로젝트를 생성하면서 깃 리포지토리를 자동으로 생성할 수 있는데, 이 기능의 체크박스를 체크해 버리면 1에서 생성한 원격 리포지토리와 연결이 안 되기 때문에 프로젝트만 생성하자. 

프로젝트를 생성하는 경우에는 최신 릴리즈된 버전으로만 가능하기 때문에 일단 만들고 나중에 build.gradle에서 스프링부트 버전과 jdk버전을 수정한 후에 재빌드하면 된다. 최신 릴리즈 버전은 아직 안정화되지 않은 서비스가 많기 때문에 필자는 보통 학습용으로는 3.0, 개발용으로는 2.7대 버전을 사용한다. 

기본적으로 초기에 설정하는 의존성은 아래와 같이 7가지를 설정해 준다. 

 

성공적으로 프로젝트를 생성했다면, One Drive의 동기화 영향을 받지 않는 D드라이브(없다면 저장공간 파티션을 설정하여 하나 만들어두자.)에 원격 저장소를 연결할 빈파일을 만든다.

원격 리포지토리를 로컬에 클론 하는 경우 빈 디렉터리에만 가능하기 때문이다. 필자는 소스트리를 형상관리툴로 사용하기 때문에 소스트리로 예시를 들도록 하겠다. 

 

소스트리를 설치하는 방법 또한 어렵지 않기 때문에 생략하도록 하겠다. 
위의 이미지는 상단의 + 탭을 누르면 나타나는 화면이다. 자격 증명이 완료된 원격 리포지토리의 계정이 나타나게 되는데 
계정 이름을 선택한 후에 1에서 생성한 리포지토리의 이름을 검색하면 나타나게 된다. 
우측 하단의 Clone을 누르면 간단하게 원격 리포지토리의 내용을 로컬 리포지토리에 복사하면서 연결할 수 있다.
처음에는 readme파일밖에 없을 것이다. 

여기까지 왔다면 거의 다 왔다. 이제 2에서 만들어둔 프로젝트 디렉토리 내부에 관련된 프로젝트 파일들을 전부 다 복사해서 로컬 저장소에 붙여 넣는다. 
그렇게 되면 로컬저장소에서 새롭게 들어온 파일을 소스트리가 추적하면서 commit 할 내역들이 나타날 텐데, 
적당히 .gitingore파일을 수정한 후에 모든 파일을 커밋&푸시해버리면 연동은 끝이다.
필자는 이 사이트에서 간단하게 깃 이그노어 파일을 생성한다.
이후에는 기능별로 브랜치를 만들어서 푸시한 후에 병합해 버리면 된다. 

깃허브의 보안정책 강화로 가장 처음 푸시하는 경우에는 자격 증명이 되지 않았다고 하면서 에러가 발생할 수 있다. 
그럴 때는 당황하지 말고 침착하게 아래의 루트대로 따라서 설정해 주자. 

선수 조건으로는  프로필 이미지 클릭 > settings > 왼쪽 네비 최하단 Developer Settings > Personal Access Tokens > Tokens(classic) > Generate New Token > 본인 깃허브 비밀번호 입력 > 만료기간 없이 토큰 생성 

위의 루트대로 개인 토큰을 생성해야 한다. 생성한 토큰은 처음 생성한 시점에만 조회가 가능하기 때문에 별도의 경로에 따로 추가해서 저장해 두자. 

- 로컬 리포지토리의 경로(.git 숨김 폴더가 있는 곳)에 가서 마우스 우클릭 하여 "git bash here"을 클릭하면 현재 경로를 시작으로 배시 프롬프트가 열리게 된다. 

위의 경로에서 git bash prompt가 열렸다면 아래의 명령어를 실행하여 원격 연결에 대한 토큰을 지정해 주자. 

git remote -v 		//현재 연결된 원격 저장소 링크 조회 
git remote remove origin
git remote add origin https://{새로 생성한 개인 토큰}@github.com/{본인 깃허브 계정명}/{원격저장소 이름}.it

위처럼 설정한 후에 다시 푸시를 하면 에러 없이 잘 푸시가 될 것이다.

 

3. build.gradle

자, 이제 저장소를 만들어 연결하고 프로젝트까지 생성을 마쳤다. 
본격적으로 프로젝트 세팅을 시작해 보자. 

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.7'
    id 'io.spring.dependency-management' version '1.0.15.RELEASE'
}

group = 'com.kuui'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '1.8'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-devtools'
    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'

    runtimeOnly 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
    useJUnitPlatform()
}

기본적으로 세팅한 결과가 위와 같다. 서론에서 이야기한 것처럼 spring boot version은 2.7.7 jdk는 1.8로 수정해서 빌드를 해주자. 

4. application.yml

의존성으로 jpa를 추가했기 때문에 프로젝트를 실행하기 위해선 반드시 DB정보가 있어야 한다. 
mysql에서 별도의 로컬 계정을 생성(혹시 방법을 모른다면 아래 참조 부분의 링크를 확인하면 좋겠다.)한 뒤에 연결 정보 및 JPA 세팅을 아래와 같이 설정해 주자. 

# DB Setting
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/dbName?serverTimezone=UTC&characterEncoding=UTF-8&createDatabaseIfNotExist=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: {Yout host id}
    password: {Yout host pw}

  #JPA Setting
  jpa:
    database-platform: org.hibernate.dialect.MySQL8Dialect
    open-in-view: true
    hibernate:
      ddl-auto: update
      use-new-id-generator-mappings: false
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
    properties:
      hibernate:
        show_sql: true
        format_sql: true
    defer-datasource-initialization: true

  thymeleaf:
    cache: false
  sql:
    init:
      mode: always
logging:
  level:
    org.hibernate.sql: debug
    org.hibernate.type: trace
    org.springframework.security: DEBUG
server:
  port: 8633

여기까지 왔으면 프로젝트를 실행하기 위한 기본적인 설정은 끝났다. 

다음 시간에는 회원 엔티티를 하나 만들어서 자동으로 테이블을 생성해 보고 
QueryDsl 설정과 스프링 시큐티리 설정 및 개발을 하나씩 정리하면서 진행해보고자 한다.

 

Reference

- 깃허브 원격 리포지토리 생성 : https://www.lainyzine.com/ko/article/how-to-create-a-new-remote-git-repository-on-github/
- 소스트리 다운로드 방법 : https://www.biew.co.kr/entry/GIT-GUI%EC%86%8C%EC%8A%A4%ED%8A%B8%EB%A6%ACSourceTree-%EC%84%A4%EC%B9%98%EB%B0%A9%EB%B2%95-1%ED%8E%B8
- 소스트리에 원격 리포지토리 계정 연결 : https://devyihyun.tistory.com/41
- mysql workbench 계정 생성 : https://clgnsdl94.tistory.com/49