1. local postgreSQL 환경 설정
- postgreSQL설치
- superuser(postgres) password 설정 시 잊어버리시면 안됩니다.
- 기본 포트 : 5432
https://www.postgresql.org/download/
PostgreSQL: Downloads
www.postgresql.org
- DBeaver 설치
Download | DBeaver Community
Download Tested and verified for MS Windows, Linux and Mac OS X. Install: Windows installer – run installer executable. It will automatically upgrade version (if needed). MacOS DMG – just run it and drag-n-drop DBeaver into Applications. Debian package
dbeaver.io
- 테스트 해볼 user_bas 테이블 생성
create table user_info (
user_id varchar(20) primary key, --기본키
passwd varchar(20) not null,
user_nm varchar(10) not null,
fail_login_cnt int default 0, --default 0
cret_dt timestamp,
amd_dt timestamp
);
- 테스트 데이터 insert
insert into user_info values('admin', 'admin','admin',0, now(), null);
2. SpringBoot JDBC PostgreSQL 설정
- 필요한 maven, gradle의 정보들이 있으니 즐겨찾기에 저장해두고 사용하시면 됩니다.
- PostgreSQL JDBC 검색 > 제일 많이 사용한 최상단 선택 > 원하는 버전 선택 > Maven dependency 복사
- https://mvnrepository.com/artifact/org.postgresql/postgresql/42.4.1

- pom.xml 에 붙여넣기 (dependencies 하위에 기재)
- <scope>runtime</scope> 옵션은 실행시 필요한 라이브러리(자세한건 아래 url reference 참고)
<!-- DB -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.4.1</version>
<scope>runtime</scope>
</dependency>
Maven – POM Reference
POM Reference POM stands for "Project Object Model". It is an XML representation of a Maven project held in a file named pom.xml. When in the presence of Maven folks, speaking of a project is speaking in the philosophical sense, beyond a mere collection of
maven.apache.org
- /src/main/resources sources folder 생성(폴더가 존재한다면 미생성)
- application.properties 파일 생성

- application.properties 파일에 datasource 정보 기재
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=password
spring.datasource.platform=postgres
3. Junit으로 database 연결 테스트
- /src/test/java/com/PostgreSQLConnectionTest.java 파일 생성
package com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
public class PostgreSQLConnectionTest {
private String URL = "jdbc:postgresql://localhost:5432/postgres";
private String USERNAME = "username"; //postgresql 계정
private String PASSWORD = "password"; //비밀번호
@Test
public void ConnectionTest() throws Exception{
Connection con = DriverManager.getConnection(URL,USERNAME,PASSWORD); //db 연결
System.out.println(con); //연결 정보 출력
Statement pre = con.createStatement();
ResultSet rs = pre.executeQuery("select * from user_info");
if (rs.next()) {
System.out.println(rs);
System.out.println(rs.getString("user_id"));
}
}
}
- Maven install 후에 Junit Test 실행
- connection 정보, 결과set 정보, 결과set 중 데이터 정보 확인

4. Hibernate, JPA, querydsl 설정
- hibernate-entitymanager으로 설정시 hibernate-core 도 같이 내려받습니다.
- pom.xml
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- querydsl -->
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
<version>4.0.6</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.23.1-GA</version>
</dependency>
<build>
<plugins>
<!-- querydsl -->
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>1.1.3</version>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>4.2.1</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/annotations</outputDirectory>
<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
<logOnlyOnError>true</logOnlyOnError>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- pom.xml
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults = false
5. SLF4J2 + Log4j2 설정
[JAVA Logging] SLF4J(Simple Logging Facade for Java)란 무엇일까
Simple Logging Facade for Java의 약자로 로깅 프레임워크(ex: logback, log4j)에 대해 추상화 역할을 합니다. 최종 배포 시 사용자가 원하는 로깅 프레임워크로 배포할 수 있게 되는데 Facade에서 의미를 찾을
crong-cat.tistory.com
- Apache 공식 문서 참고
- https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/index.html
SLF4J Binding Using Log4j – Log4j 2 SLF4J Binding
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apa
logging.apache.org
- 문서 내용 보시면 log4j-slf4j2-impl 와 log4j-slf4j-impl 동시 사용하시면 안됩니다.
- maven repositoey site > slf4j2 검색
- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl/2.19.0
- pom.xml 수정(아래 코드 추가)
<!-- slf4j2 + log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.19.0</version>
<scope>test</scope>
</dependency>
- log4j2.xml 파일 생성
- src>main>resources 하위에 있어야 한다.

- log4j2.xml 파일 작성
- 설정 내용은 전자정부 표준프레임워크 에서 가져왔습니다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- Appender, Layout 설정 -->
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout/>
</Console>
<File name="file" fileName="./logs/file/sample.log" append="false">
<PatternLayout pattern="%d %5p [%c] %m%n"/>
</File>
</Appenders>
<!-- Logger 설정 -->
<Loggers>
<Logger name="egovLogger" level="DEBUG" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="file"/>
</Logger>
<Root level="ERROR">
<AppenderRef ref="console"/>
</Root>
</Loggers>
</Configuration>
6. lombok 설정
- maven repository site > lombok 검색
- https://mvnrepository.com/artifact/org.projectlombok/lombok/1.18.24
- pom.xml 수정
<!-- lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
- maven install
- lombok install

- maven install을 하면 maven dependencies가 업데이트가 됩니다.
- 목록 중 lombok을 찾아 우클릭 > Run As > Java Application 으로 lombok을 실행해줍니다.

- IDE 를 찾을 수 없다고 나오네요.
- OK 를 클릭해주고, Specify location... 클릭해서 sts가 설치된 경로로 이동해줍니다.

- SpringToolSuite4.exe 파일이 있는 곳으로 이동해 선택해줍니다.

- Install / Update 클릭

- Quit Installer 클릭으로 설치 창을 닫아줍니다.
- STS 재시작
- STS > Project > Clean

7. log.info();
- PostgreSQLConnectionTest.java 수정
- system.out.println() 으로 출력했던 것들 모두 log.info() 로 변경
package com;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class PostgreSQLConnectionTest {
private String URL = "jdbc:postgresql://localhost:5432/postgres";
private String USERNAME = "username"; //postgresql 계정
private String PASSWORD = "password"; //비밀번호
@Test
public void ConnectionTest() throws Exception{
Connection con = DriverManager.getConnection(URL,USERNAME,PASSWORD); //db 연결
log.info(con.toString()); //연결 정보 출력
Statement pre = con.createStatement();
ResultSet rs = pre.executeQuery("select * from user_info");
if (rs.next()) {
log.info(rs.toString());
log.info(rs.getString("user_id"));
log.info("user_info table user_id column : {}", rs.getString("user_id"));
}
}
}
- Junit test

- log.info 에서 오류가 난다면 lombok을 인식하지 못하고 있는 것이니 STS 재실행 후 Clean 또는 maven clear 후에 maven install 해보시길 바랍니다.
8. JDBC 설정
- lombok, slf4j2+log4j2 설정이 완료됐으니, jdbc 설정해주도록 하겠습니다.
- log4jdbc 공식 문서를 참고했습니다.
- https://log4jdbc.brunorozendo.com/
Log4jdbc-log4j2
This project was imported from https://code.google.com/archive/p/log4jdbc-log4j2/ Original License: Apache License 2.0 log4jdbc-log4j2 is a modification of log4jdbc to natively use Log4j 2 (or SLF4J as usual), that supports JDBC 4.1 to JDBC 3, includes all
log4jdbc.brunorozendo.com
- pom.xml
<!-- JDBC -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
- application.properties
- TO-BE 내용으로 변경해줍니다.
#AS-IS
#spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
#TO-BE
spring.datasource.url=jdbc:log4jdbc:postgresql://localhost:5432/postgres
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
- log4jdbc.log4j2.properties 파일 생성(slf4j 사용시)

- log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
9. Test Code 작성
- UserController.java
package com.user.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.user.domain.User;
import com.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
public class UserController {
@Autowired
UserService userService;
@GetMapping(path = "/api/login")
public User login(@RequestParam String userId, @RequestParam String passwd) {
return userService.getUserInfo(userId, passwd);
}
}
- User.java
package com.user.domain;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder(toBuilder = true)
@Entity(name="user_info")
public class User {
@Id
@Column(name = "user_id")
String id;
String passwd;
String userNm;
int failLoginCnt;
}
- UserService.java
package com.user.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.user.domain.User;
import com.user.repository.UserRepository;
@Service
@Transactional(readOnly = true)
public class UserService {
@Autowired
UserRepository userRepository;
public User getUserInfo(String userId, String passwd) {
return userRepository.findByIdAndPasswd(userId, passwd);
}
}
- UserRepository.java
package com.user.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import com.user.domain.User;
public interface UserRepository extends JpaRepository<User, String>, QuerydslPredicateExecutor<User>{
User findByIdAndPasswd(String userId, String passwd);
}
10. API 호출로 출력 결과 Test
- API Test 도구로는 여러가지가 있는데, 저는 Postman 사용했습니다.
- 결과가 정상적으로 나온것을 확인할 수 있습니다.

- postman
https://www.postman.com/downloads/?utm_source=postman-home
Download Postman | Get Started for Free
Try Postman for free! Join 20 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.
www.postman.com
'Java' 카테고리의 다른 글
Spring Boot application.properties 값 가져오기 (0) | 2023.01.04 |
---|---|
[JAVA Logging] SLF4J(Simple Logging Facade for Java)란 무엇일까 (1) | 2023.01.03 |
[STS] Spring Boot Maven Project Create(메이븐을 이용한 스프링부트 프로젝트 생성) (0) | 2022.12.20 |