Initialize Spring Boot (feat. msghub)

ILOV-IT·2025년 3월 19일

Spring Boot

1. Chocolatey 설치 (관리자 권한)

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

다음과 같이 설치 여부를 확인

관리자 권한 PS C:\Windows\System32> choco
Chocolatey v2.4.3
Please run 'choco -?' or 'choco <command> -?' for help menu.

2. mvn 설치

관리자 권한 PS> choco install maven -y

Chocolatey v2.4.3
.
.
Chocolatey installed 1/1 packages.
See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
  • 사용자변수 (변수이름: MAVEN_HOME, 변수값: 경로)
  • 시스템변수 (Path: %MAVEN_HOME%\bin)
  • 파워쉘 다시 시작!
C:\ProgramData\chocolatey\lib\maven\apache-maven-3.9.9\bin
  • vscode 파워셀에서도
$env:Path += ";C:\ProgramData\chocolatey\lib\maven\apache-maven-3.9.9\bin"
PS C:\DEV\code\win\project-msghub> $env:JAVA_HOME="C:\Program Files\Java\jdk-21"
PS C:\DEV\code\win\project-msghub> $env:Path="C:\Program Files\Java\jdk-21\bin;" + $env:Path

3. vscode에서 특정 mvn 경로 설정

project-root/.vscode/settings.json

{
    "java.compile.nullAnalysis.mode": "automatic",
    "java.configuration.updateBuildConfiguration": "interactive",
    "terminal.integrated.env.windows": {
        "Path": "C:\\ProgramData\\chocolatey\\lib\\maven\\apache-maven-3.9.9\\bin;C:\\Program Files\\Java\\jdk-21\\bin;$env:Path",
        "JAVA_HOME": "C:\\Program Files\\Java\\jdk-21"
    }
}

4. spring-config.xml

src/main/resources 밑에 spring-config.xml 추가

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="exampleBean" class="java.lang.String">
        <constructor-arg value="Hello, Spring XML!"/>
    </bean>

</beans>

5. 디렉토리 생성

src/main/java/com/domain/project
├── config # 설정 관련 클래스 (예: SecurityConfig, WebConfig 등)
├── controllers # 컨트롤러 (예: UserController, AuthController 등)
├── enums # 열거형 타입 (예: UserRole, Status 등)
├── models # 엔티티 및 DTO (예: User, Order, UserDTO 등)
├── repositories # JPA Repository 인터페이스 (예: UserRepository 등)
├── services # 서비스 클래스 (예: UserService, EmailService 등)
├── utils # 공통적으로 사용하는 유틸리티 클래스 (예: DateUtil, JwtUtil 등)
└── Application.java # 스프링 부트 메인 클래스


6. 실행 테스트

<컴파일해서 실행하는 방법>

PS C:\DEV\code\win\project> mvn clean package
PS C:\DEV\code\win\project> java -jar target/myproject-0.0.1-SNAPSHOT.jar

<한번에 실행하는 방법>

* application.properties
spring.application.name=project-msghub
server.port=53001
server.address=0.0.0.0

* Dockerfile
FROM openjdk:21-jdk-slim
WORKDIR /app
COPY target/project-msghub-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 53001
ENTRYPOINT ["java", "-jar", "app.jar"]

* compose.yaml
version: "3.8"  
services:
  app:
    build: .
    ports:
      - "53001:53001"
      # 1. Spring Boot 앱이 컨테이너 내부에서 53001 포트에서 실행됨.
      # 2. Dockerfile의 EXPOSE 53001은 단순히 컨테이너 내부에서 포트를 개방하는 역할 (호스트에서 접근 불가).
      # 3. Docker Compose의 ports: - "53001:53001" 설정 덕분에, 호스트의 53001 포트와 컨테이너 내부의 53001 포트가 연결됨.
      # 4. 따라서, 호스트(로컬)에서 http://localhost:53001로 접근하면 컨테이너 내부의 Spring Boot 애플리케이션으로 요청이 전달됨.

7. Log4j2, UTF-8

Log4j2를 사용하려면 기본 로깅 시스템을 exclusion 해야함

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.21.0</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.21.0</version>
</dependency>
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j2-impl</artifactId>
	<version>2.21.0</version>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
	<!--  : Log4j2를 사용하려면 기본 로깅 시스템을 제외해야 함 -->
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<!--  : Log4j2를 사용하려면 기본 로깅 시스템을 제외해야 함 -->
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-logging</artifactId>
		</exclusion>
	</exclusions>
</dependency>
  • 설정하지 않으면 컴파일할 때 글자가 깨져서 나옴
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
    <configuration>
	    <!-- 한글 지원 처리 -->
		<encoding>UTF-8</encoding>

8. 파일명 변경

src/main/resources

application.properties -> application.yaml

9. RabbitMQ (Erlang 함께 설치됨)

PS C:\> choco install rabbitmq
.
.
Offline change; changes will take effect at broker restart.
  rabbitmq may be able to be automatically uninstalled.
Environment Vars (like PATH) have changed. Close/reopen your shell to
 see the changes (or in powershell/cmd.exe just type `refreshenv`).
 The install of rabbitmq was successful.
  Software installed as 'exe', install location is likely default.

Chocolatey installed 2/2 packages.
 See the log for details (C:\ProgramData\chocolatey\logs\chocolatey.log).
profile
because we know you'll love it

0개의 댓글