반응형
1. local postgreSQL 환경 설정
- postgreSQL설치
- superuser(postgres) password 설정 시 잊어버리시면 안됩니다.
- 기본 포트 : 5432
https://www.postgresql.org/download/
- DBeaver 설치
- 테스트 해볼 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>
- /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 설정
- Apache 공식 문서 참고
- https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/index.html
- 문서 내용 보시면 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/
- 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
반응형
'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 |