서버 초기 설정

Jongwon·2023년 2월 3일
2

DMS

목록 보기
3/18
post-thumbnail

DB설정

DB는 MySQL을 사용할 예정입니다. MySQL 8.0 Community 버전으로 설치하였습니다.

MySQL 설치법은 다른 블로그들에서 자세히 소개하고 있기 때문에 생략하겠습니다.


Workbench에서 Database > Connect to Database를 클릭하여 DB를 root계정으로 연결해줍니다.

Users and Previleges탭에서 Add Account를 클릭합니다.

dms_admin이라는 계정을 생성했습니다. 저는 이 계정으로 DMS 프로젝트 DBA역할을 부여할 것이기 때문에 권한설정에서 DBA를 체크하고 적용해줍니다.

Home 화면으로 돌아와 Connection 추가버튼을 누릅니다. dms_admin을 이용한 연결을 설정해줍니다. 이때 꼭 Test Connection 버튼을 눌러 에러가 발생하지 않는지 확인합니다.

dms_admin계정이 계속 접근 거부 에러가 떠서 어떤 문제인지 찾아보던 중 아래의 블로그처럼 Bitnami WAMP가 실행되고 있어서 3306번 포트에 접근할 수가 없던 문제가 있었습니다.
https://oneul-losnue.tistory.com/108


이제 새로운 Connection에 접속하고, 스키마를 생성합니다.




서버 설정

Springboot 프로젝트로, Depenencies에 아래의 라이브러리를 추가했습니다.

  • Spring Boot DevTools
  • Spring Web
  • Lombok
  • Spring Security
  • OAuth2 Client
  • OAuth2 Resource Server
  • Spring Data JPA
  • MySQL Driver


MySQL에 연결하기 위해 application.properties에 아래의 코드를 추가합니다.

application.properties

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/dms
spring.datasource.username=dms_admin
spring.datasource.password=****
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
  • url에는 본인이 생성한 스키마를 지정합니다.
  • username에는 본인이 설정한 DB User이름을 작성합니다.
  • password에는 User의 비밀번호를 작성합니다.

연결설정이 정상적으로 되었는지 확인하기 위해 테스트 코드를 작성하였습니다.

dbSettingsTests

@SpringBootTest
public class dbSettingTests {
    @Test
    public void testConnection() {

        try(Connection connection =
                    DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/dms",
                            "dms_admin",
                            "****")){            //****에 패스워드 입력
            System.out.println(connection);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

✨ SpringBoot도 실행해서 정상적으로 실행되는지, 강제종료 되지는 않는지 확인하고 진행합니다!





Github 연동

Github에서 Repository를 생성한 후, IntelliJ에서 터미널을 실행하여 아래의 명령을 실행합니다.

git init
git remote add origin https://github.com/UOS-Capstone/DMS_Server.git  //본인의 레포지토리 링크
git branch -M main
git add .
git commit -m "Set Up Server"
git push origin main

아래에서 첫번째 커밋을 삭제할 예정이기 때문에, 좀 더 쉽게 진행하시려면 아직 commit하지 않는 것을 추천드립니다.



여기까지 진행한 도중 중요한 부분을 놓쳤다는걸 깨달았습니다. 바로 application.properties에 있는 민감정보입니다. DBA의 권한을 가진 USER의 비밀번호와 DB 주소가 담겨져 있는데, 이 부분을 github에 올리지 않자니 코드 자체가 정상적으로 실행되지 않습니다.


이전의 Nomad Coder의 유튜브 클론코딩을 하면서 .env(환경변수) 파일에 민감정보를 넣고, 변수로 지정해주어 github에는 env를 제외한 파일만 올리도록 설정한 적이 있었습니다. 이때의 기억을 떠올려 민감정보를 별도의 properties로 빼내고, gitignore시키도록 하겠습니다.


  1. 별도의 profile 생성, application-profile명.properties로 파일을 생성해야 함.
    application-mysql.properties
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/dms
spring.datasource.username=dms_admin
spring.datasource.password=****
  1. 공개가능한 properties부분만 원래의 application.properties에 남김. 생성한 profile을 불러옴.
    application.properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.show-sql: true
spring.profiles.include=mysql

💡 Github에 민감정보를 올리지 않으면 코드가 동작하지 않기 때문에 CI/CD 환경에서는 별도로 지정을 해주어야 합니다.
하지만 현재 백엔드 개발자가 저밖에 없기 때문에 CI/CD 환경은 이후 필요시 설정하도록 하겠습니다.

마지막으로 test코드도 mysql profile에서 가져온 변수를 이용하도록 변경합니다. *.properties파일에 있는 외부 변수들은 @Value어노테이션을 통해 가져올 수 있습니다.

dbSettingTests

@SpringBootTest
public class dbSettingTests {

    @Value("${spring.datasource.url}")
    private String DB_URL;
    @Value("${spring.datasource.username}")
    private String DB_USERNAME;
    @Value("${spring.datasource.password}")
    private String DB_PASSWORD;
    
    @Test
    public void testConnection() {

        try(Connection connection =
                    DriverManager.getConnection(
                            DB_URL,
                            DB_USERNAME,
                            DB_PASSWORD)){
            System.out.println(connection);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

위에서 commit을 진행하지 않으신 분들은 아래 부분은 생략하셔도 됩니다.

현재 이미 Github 원격저장소에 커밋을 했다면, 첫번째 커밋에 이미 민감정보가 들어간 것을 확인할 수 있습니다. 중간에 한 커밋인 경우 git reset HEAD를 이용하여 삭제할 수 있지만, 첫번째 커밋은 reset명령이 불가능합니다.

해결 방법은 HEAD가 참조하는 주소를 삭제하고, 원격 저장소의 cache를 삭제한 뒤 다시 커밋하는 것입니다.

git update-ref -d HEAD
git rm --cached -r -f .
git add .
git commit -m "Set Up Server"
git push origin main --force

완성본
Github 커밋 - Set Up Server






참고자료
https://spring.io/guides/gs/accessing-data-mysql/
https://www.baeldung.com/spring-boot-properties-env-variables
https://www.youtube.com/watch?v=wMEDLJ5UGMo
https://oneul-losnue.tistory.com/108
https://kelly-tech.tistory.com/38
https://virtualtech.tistory.com/365#:~:text=%ED%95%B4%EC%84%9C%20%EC%B2%AB%EB%B2%88%EC%A7%B8%20commit%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%84%20%ED%8F%AC%EC%8A%A4%ED%8C%85%20%ED%95%A9%EB%8B%88%EB%8B%A4.&text=%24%20git%20rm%20%2D%2Dcached%20%2Dr,%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4.

profile
Backend Engineer

0개의 댓글