저는 돈이없어 이클립스 환경에서 개발을 했지만 곧 인텔리제이를 구입할겁니다...
솔직히 이런내용들은 수도없이 해봤고 다 아는 내용이지만 한번더 공부할겸 겸사겸사 블로그에 작성해놓고 까먹지 않기위해 작성합니다.
Spring Boot는 어플리케이션을 편리하고 효율적으로 만들기위해, 클래스와 인터페이스로 구성된 일종의 뼈대 라고 생각하면 된다.
이클립스에서 Spring Boot 프로젝트 생성방법
IDE 는 모두 설치되어있다는 가정하에
File > New > Other 로 클릭하게 되면 아래와같은 화면이 나오고 생성을 해주면된다.
아래 설정은 알아서 눈치껏 설정하면된다.
개인적으론 jar 로 패키징을하고 gradle 을 사용하는것을 추천한다 (왜냐면 편하거든..)
의존성 추가는 나중에 할거라 지금은 모두 제거한상태로 프로젝트를 생성해준다.
스프링부트3 이 나왔기때문에 3으로 만들겠다.
그 다음 finish 를 눌러서 프로젝트를 생성하자.
그러면 시간이 조금 걸린후에 프로젝트가 생성된것을 알수있다.
이러한 워크스페이스 구조를 가지고있는데
src/main/java : 자바 관련된 클래스들을 생성하고 처리한다.
src/main/resources : 기타 설정파일들이 모여있다.
bulid.gradle : 의존성을 추가하는 곳이다.
의존성추가
이번에 사용할 의존성은 몇개안되기때문에 그냥 싹다 적어서 올려주겠다. 기본 spring boot 설정에 필요한것이나, 서버를 띄우는용도, jpa, postgresql, hikaricp, log4j, lombok, junit 에 대한 의존성을 추가해준다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.postgresql:postgresql'
implementation group: 'com.zaxxer', name: 'HikariCP', version: '4.0.3'
implementation group: 'log4j', name: 'log4j', version: '1.2.17'
implementation group: 'org.bgee.log4jdbc-log4j2', name: 'log4jdbc-log4j2-jdbc4.1', version: '1.16'
implementation 'org.projectlombok:lombok'
testImplementation group: 'junit', name: 'junit', version: '4.13.2'
}
위의 의존성들을 추가해줬으면 아래의 Refresh Gradle Project 버튼을 꼭 눌러주자
기본설정
나는 프로젝트를 생성하면 기본적으로 로그설정부터 해준다.
로그설정은 여러가지가 있겠지만 대중적으로 사용하는 log4j 를 사용한 콘솔로그 출력 하는방법을 알아보자
일단 src/main/resources 에 properties 파일과 xml 파일을 각각 추가해줄 것이다.
- log4jdbc.log4j2.properties 라는 파일을 생성
##log4jdbc.log4j2.properties 파일내용
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
- logback-spring.xml 이라는 파일을 생성
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{0} - %msg%n</pattern>
</layout>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${catalina.base}/logs/notice.log</file>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{0} - %msg%n</pattern>
</layout>
</encoder>
</appender>
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${catalina.base}/logs/today_common.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] %logger{36} - %msg%n
</Pattern>
<charset>UTF-8</charset>
</encoder>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>${catalina.base}/logs/today_common.%i.log.zip
</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
</appender>
<logger name="org.springframework.core" level="info" />
<logger name="org.springframework.beans" level="info" />
<logger name="org.springframework.context" level="info" />
<logger name="org.springframework.web" level="info" />
<logger name="jdbc" level="OFF"/>
<logger name="jdbc.sqlonly" level="OFF"/>
<logger name="jdbc.sqltiming" level="DEBUG"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<logger name="jdbc.resultsettable" level="INFO"/>
<logger name="jdbc.connection" level="OFF"/>
<root level="info">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
위의 로그 같은경우는 두가지버전을 준비했다.
위에 적힌 로그같은경우는 모든 로그를 보여주고, 저장하는 설정방법이다. 이 방법은 테스트나 개발환경에서는 적합하다고 생각하는데, 운영환경에서는 로그가 계속쌓이기때문에 용량관리를 위해 아래와 같은 방법을 사용하는 것이 좋다고 생각한다.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{0} - %msg%n</pattern>
</layout>
</encoder>
</appender>
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>./logs/today_common.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5level] %logger{36} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>./logs/today_common.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<maxHistory>30</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>5MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<logger name="com.example.test" level="info" />
<logger name="org.springframework" level="warn" />
<logger name="jdbc" level="OFF"/>
<logger name="jdbc.sqltiming" level="OFF"/>
<logger name="jdbc.resultsettable" level="OFF"/>
<root level="warn">
<appender-ref ref="STDOUT" />
<appender-ref ref="RollingFile" />
</root>
</configuration>
차이는 보면알겠지만 모든 logger 에 대한 부분을 off로 해놓고 설정 해놓았다. 자세한 설명은 다른데서 찾아볼 수 있도록
이렇게 해놓고 내부톰캣서버를 실행시키면 로그가 잘 찍힐 것이다.
AWS EC2, Spring Boot, JPA, MSA 등 기술 사용한 게시물순서
1. https://yoon-developer.tistory.com/119 - [MSA] 프로젝트 (1) - MSA(마이크로 서비스 아키텍처) 기본 개념
2. https://yoon-developer.tistory.com/120 - [AWS] 프로젝트 (2) - EC2 개념부터 프리티어 인스턴스 생성
3. https://yoon-developer.tistory.com/121 - [Spring Boot] 프로젝트 (3) - 이클립스 Spring Boot 프로젝트 구축 및 로그설정
'Framework > Spring Boot😊' 카테고리의 다른 글
[Spring Boot] 공공데이터 API 를 활용하여 DataBase 에 Scheduled를 통해 insert 하기 (0) | 2023.08.10 |
---|---|
[Spring Boot] Spring Security 의존성 추가 시 bulid.gradle 파일 에러 해결 (0) | 2023.07.25 |
[Spring Boot] sentry 를 스프링부트에 적용 (에러로그수집) (0) | 2022.09.21 |
[Spring boot] spring security 을 사용한 로그인 구현 (0) | 2022.04.27 |
[Spring] Spring 과 Spring Boot 차이 (0) | 2020.10.18 |