[프로젝트] Spring Security + OAuth + JWT + Redis를 활용한 로그인 및 회원가입 구현 (2) - 프로젝트 생성

김찬미·2024년 7월 1일
0
post-thumbnail

프로젝트 전체 코드: https://github.com/kcm02/JWT_OAuth_Login.git

이번 게시물에서는 프로젝트를 생성해보고 초기 설정을 완성해보려고 한다. 우선 필수적인 의존성들을 추가하고 설명한 다음, Git 저장소까지 만드는 과정이 될 것이다.

💻 개발 환경

  • Windows 10 64-bit
  • IntelliJ Ultimate
  • JDK 17
  • Spring Boot 3.3.1
  • MySQL 8.0.35
  • Maven

Gradle이 아닌 Maven을 선택한 이유

기존 프로젝트에서는 Gradle을 사용하였지만 이번엔 Maven을 사용하려고 한다. Gradle이 빌드 시간이 짧고 유연해 복잡한 프로젝트에 적합한 반면, Maven은 비교적 설정이 간편하고 표준화된 구조를 제공한다는 점에서 간단한 미니 프로젝트에는 더 적합하다고 판단했다.

Gradle과 Maven의 차이에 대해선 Gradle vs. Maven 무엇을 써야할까? 글을 참고하자.

JDK 17을 도입한 이유

현재까지도 JDK 8이 가장 많이 쓰이는 것이 사실이지만, 난 Java+Spring Boot 조합으로 개발하는 개발자인 만큼 Spring Boot 3.1버전 이후(Spring Framework 6 이후)부터는 최소 JDK 17부터 지원한다는 사실이 크리티컬했다.

물론 현업에선 좀 더 낮은 버전을 사용하는 경우도 많다고 하지만 개인 프로젝트에서 굳이 성능 개선이 된 버전을 마다할 이유가 없어 선택하게 되었다.


프로젝트 생성

기본 설정

  • Name: secure-login
  • Type: Maven
  • Language: Java
  • Group: com.project
    • 다른 프로젝트와의 통일성을 위해 개인 프로젝트에는 'com.project'를 써준다.
  • Project SDK: 17
  • Java: 17
  • Packaging: Jar

의존성 추가

  • Spring Web spring-boot-starter-web

    • 스프링 MVC를 사용하는 RESTful 애플리케이션을 만들기 위한 의존성
    • 내장 톰캣Tomcat이 포함되어 있어 jar 형식으로 실행 가능
    • 웹 애플리케이션을 개발하기 위해 필요한 모든 의존성을 자동으로 가져온다.
  • Spring Boot DevTools spring-boot-devtools

    • 개발 환경에서의 편의성을 제공하는 의존성
    • 자동으로 라이브 릴로드를 지원하며 개발 중에 유용한 기능들을 제공
  • Lombok lombok

    • 자바 코드의 반복적인 코드를 줄여주는 라이브러리
    • 자동 생성자, getter/setter 등의 코드를 자동으로 생성해주는 기능을 제공
  • Spring Data JPA spring-boot-starter-data-jpa

    • 하이버네이트를 활용한 JPA 기능을 제공
    • JPA를 기반으로 데이터베이스와의 연동을 쉽게 처리할 수 있다.
  • MySQL Driver mysql-connector-java

    • MySQL 데이터베이스와의 연결을 위한 JDBC 드라이버
    • Spring Data JPA를 사용할 때 MySQL 데이터베이스와 연동하기 위해 필요하다.

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.project</groupId>
    <artifactId>secure-login</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>secure-login</name>
    <description>Demo project for Spring Boot</description>
    
    <!-- 기타 필요한 정보 생략 -->
    
    <dependencies>
        <!-- 스프링 부트 Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- 개발 편의성을 위한 의존성 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        
        <!-- MySQL 연동을 위한 JDBC 드라이버 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        
        <!-- Lombok 라이브러리 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- 테스트 의존성 (옵션) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!-- Maven Build 설정 -->
    <build>
        <plugins>
            <!-- Spring Boot Maven Plugin 설정 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!-- Lombok 관련 설정 제외 -->
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

application.properties

server.port=9090
spring.datasource.url=jdbc:mysql://localhost:3306/db_name
spring.datasource.username=db_username
spring.datasource.password=db_password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

마치며

이번 게시물에서는 프로젝트 생성을 해보았다. 이번에는 기초적인 의존성들만 추가했는데, 나중에 기능을 개발할 때 해당 기능에 필요한 의존성을 추가할 것이다. 다음 게시물에서는 새로운 프로젝트를 GitHub와 연동해 보려고 한다.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보