노력과 삽질 퇴적물

스프링부트: 기초 및 입문 (1) 본문

프로그래밍note/언어. JAVA & JDK 계열

스프링부트: 기초 및 입문 (1)

MTG 2023. 3. 16. 23:47

 

목차
 필요한 파일
 환경설정
 라이브러리 연동
 구동 및 배포
 ???
기초 및 입문 (3)
 ???

 

 



0. 필요한 파일

파일명
 예시경로
 eclipse-jee-2022-09-R-win32-x86_64.zip  D:\dev_ide\eclipse_jee
 JDK  C:\Java\jdk_17.0.4.1





1. 환경설정

1) JDK
개발용 환경변수 설정(Path 설정) 참조.
JDK를 여러 버전으로 사용해야 할 경우, JAVA: 멀티 jdk 스위칭 참조.


2) 이클립스&Spring Tools 4


3) Spring Initializr
[#Spring Initializr](설정이 포함된 공유링크)에서 선택 가능한 Java버전은 19/17/11/8입니다. (2022년 10월 기준.)
다른 분들의 정리글을 참조하면,
Java 8: ~ 2030-12-??까지 지원 연장됨.
Java 11: ~ 2026-09-??까지 지원 연장됨.
Java 17: ~ 2029-09-??까지 지원 연장됨.
Java 19: ~ 2023-05-??까지 지원 예정. (LTS X.)
한글이 지원되는 JDK중 가장 최신버전이 15이나, JDK를 스위칭 가능하게 설정해뒀으니 17로 갑니다.
 
Spring Initializr에서 받은 zip파일을 백업해두거나, 초기 생성한 프로젝트를 버전관리 툴에 등록해둡니다.[2020-08-25 기준]
앞서 언급했듯, 초기 생성 설정은 공유한 링크에 포함되어 있습니다.


3) 추가설정, pom.xml
-> java 17
-> 인코딩
-> jar배포 지정
-> 추가 의존성
: jackson
: swagger
: com.auth0 (JWT)





2. 라이브러리 연동
 
* 주요 라이브러리에 대한 XxxxConfiguration.java라던가 전체적인 내부 배치는 아래와 같이 구성했습니다.

 
0) 롬북 이슈
-> lombok 1.18에 있는 이슈로 이전 버전 혹은 수정된 이후 버전이면 생략해도 될겁니다.
-> XSlf4j를 사용해보려 했는데, 도무지 적용이 안 되서 @Slf4j로 사용.
 
 
1) redis
-> 로컬환경일 경우, NoSQL: 윈도우용 레디스 참조.
1
2
3
4
5
6
7
8
9
#    IN application.properties
spring.cache.type=redis
spring.data.redis.host=127.0.0.1
spring.data.redis.port=6379
spring.data.redis.password=this_is_password
 
custom.redis.default.ttl.sec=600
custom.redis.ping.key=ping
custom.redis.ping.ttl.sec=60
 
cs
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
//com.analoggreen.interlocking.config.RedisConfiguration.java
... ... ...
@Slf4j
@EnableCaching
@Configuration
public class RedisConfiguration
{
    @Value("${spring.data.redis.host}")
    private String REDIS_HOST;
    @Value("${spring.data.redis.port}")
    private int REDIS_PORT;
    @Value("${spring.data.redis.password}")
    private String REDIS_PASSWORD;
    
    @Value("${custom.redis.ping.key}")
    private String REDIS_PING;
    @Value("${custom.redis.ping.ttl.sec}")
    private long REDIS_PING_TTL;
    
    @Value("${custom.redis.default.ttl.sec}")
    private long DEFAULT_TTL;
 
    
    @Bean
     public RedisConnectionFactory redisCacheConnectionFactory()
    {
            RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
            config.setHostName(REDIS_HOST);
            config.setPort(REDIS_PORT);
            config.setPassword(REDIS_PASSWORD);
            return new LettuceConnectionFactory(config);
     }
    
    @Bean
    public RedisCacheConfiguration  cacheConfiguration()
    {
        return RedisCacheConfiguration.defaultCacheConfig()
                                                  .entryTtl(Duration.ofSeconds(DEFAULT_TTL))
                                                  .disableCachingNullValues()
                                                  .serializeValuesWith(SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
    }
    
     @Bean
     public RedisCacheManagerBuilderCustomizer redisCacheManagerBuilderCustomizer()
     {
         return (builder) -> builder.withCacheConfiguration(REDIS_PING, cacheConfiguration().entryTtl(Duration.ofSeconds(REDIS_PING_TTL)));
     }
}
cs
 

2) mariaDB
-> 로컬환경일 경우, SQL: 마리아 디비(mariaDB) zip버전 윈도우 로컬서버 참조.
1
2
3
4
5
#    IN application.properties
spring.datasource.url=jdbc:mariadb://localhost:3306/springboot_interlocking
spring.datasource.username=root
spring.datasource.password=this_is_password
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
cs
 
 
3) mongoDB
1
2
3
4
5
#    IN application.properties
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.username=springbootSystem
spring.data.mongodb.password=this_is_password
cs
 
 
4) 로그파일 처리
 
스프링부트에서는 logback-spring.xml을 통해 설정을 하면 application.properties에서 설정한 값을 스프링의 환경변수를 시스템 환경변수로서 사용할 수 있고, 프로필에 따라 로그 설정할 수 있습니다.
이를 "Spring Boot Logback Extension"라고 합니다.   - (shawnhansh, 2022/06/03)
 
-> 서버 구동시 명령어에 넣은 옵션으로 빌드된 jar에 포함된 application.properties이 아닌 별도의 application.properties로 구동이 가능하다보니, 프로퍼티 파일로 제어가 안 되는 일부 설정만 logback-spring.xml에 입력했습니다. 제가 알기로는 설정파일 읽는 순서도 xml보다 application.properties를 먼저 읽더군요.
 
 
 
 
* DB와 스프링부트를 로컬 구동시킨채로 DB쪽을 정지시키면, 콘솔 로그상 redis/mariaDB/mongoDB중 접속불가 메시지가 곧장 나온건 mongoDB이더군요. 지금은 이정도 연결까지 해놓고 jar배포로 넘어가겠습니다.
 
 
 
 
 
3. 구동 및 배포
 
1) 로컬 구동
-> 프로젝트 우클릭/Debug As/Spring Boot App으로 구동시킵니다.
-> mac환경에서는 어노테이션인 @SpringBootApplication이 붙은 클래스 파일에서 자바 어플리케이션 실행으로 로컬 구동이 되지만, 윈도우에서는 조금 다릅니다.
 
2) jar배포
* 빌드시 나오는 메뉴명이랑 로그로는 maven 빌드가 정식 명칭인거 같은데, 따로 명령어를 치는거 아닙니다.
* jar로 배포하려는 이유는 톰캣이 내장된 배포형식이여서입니다. 톰캣을 따로 쓰신다면, war로 배포.
 
Run As 혹은 Debug As -> Maven build

Goals에 [package] 입력.
 
프로젝트내 하위 폴더중, target에 jar파일이 생성되어 있을겁니다.
확장자가 jar.original인쪽이 아닙니다.

 
 


기타. 참조자료

1) 스프링부트
[구멍가게 코딩단] 코드로 배우는 스프링 웹 프로젝트 (개정판) 강의
갓대희의 작은공간 :: [스프링부트 (1)] 스프링부트 시작하기 (SpringBoot 프로젝트 설정 방법)
[Spring]Eclipse로 Spring Boot 시작하기


2) SQL - mariaDB
 
 
3) NoSQL - mongoDB
 
 
4) 레디스
 
 
6) HTTP Client-Side
 
 
7) 로깅
 
 
 
8) 미분류 및 기타
 
[Spring-Boot] Lombok "log" cannot be resolved 해결

(영문) Core Features





기타. 변경이력

일자
 변경이력
 2020-08-25  초안 작성.
 [#blogger][#티스토리]
 2023-03-16  1) jdk 변경
jdk1.8.0_202 -> jdk_17.0.4.1
 2) 기본 세팅 및 빌드 발행까지로 재정비.