5개의 로그 레벨이 있다.
TRACE : DEBUG 레벨보다 더 상세한 메세지를 표현하기 위한 레벨
DEBUG : 애플리케이션의 디버깅을 위한 메세지를 표시하는 레벨
INFO : 애플리케이션의 상태 변경과 같은 정보 전달을 위해 사용
WARN : 시스템 에러의 원인이 될 수 있는 경고 레벨을 의미
ERROR : 로직 수행 중에 시스템에 심각한 문제가 발생해서 애플리케이션의 작동이 불가능한 경우
TRACE DEBUG INFO WARN ERROR 다 나옴 조금 덜 나옴 덜 나옴 조금 나옴 에러만 나옴
Spring Boot의 기본은 로그 레벨은 INFO 레벨이다.
로그레벨 바꾸는 법
logging:
level:
root: DEBUG
DEBUG로 레벨을 바꿨기 때문에 DEBUG레벨 이하의 내용이 전부 나온다.
로그를 많이 남기면 서버에 용량이 금방 차서 문제가 발생하기 때문에 Rolling - limit를 정해두고 오래된 로그부터 지운다.
@RestController
@RequestMapping("/api/v1/get-api")
@Slf4j
public class GetController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello() {
log.info("hello로 요청이 들어왔습니다.");
return "Hello World";
}
@GetMapping(value = "/name")
public String getName(){
log.info("getName으로 요청이 들어왔습니다.");
return "Flature";
}
}
이처럼 프로그램이 잘 동작하고 있는지 확인용으로도 Log를 통해 확인할 수 있다.
ORM의 장점
ORM의 단점
Layer 구조
Client | DELETE /user |
---|---|
Controller | @Autowired |
UserDao userDao.deleteAll() | |
Business(Service) | 생략 |
Data Access(DAO) | this.jdbcTemplate.update(“delete from users”); |
Pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:://localhost:3306/likelion-db
username: root
password: 12345678
UserDTO
@AllArgsConstructor
@Getter
// 위 두가지 어노테이션 사용 시 constructor, getter 생성 안해도됨
public class User {
private String id;
private String name;
private String password;
}
UserDaoController
@RestController
@RequestMapping("/api/v1/user")
public class UserDaoController {
private final UserDao userDao;
public UserDaoController(UserDao userDao) {
this.userDao = userDao;
}
@PostMapping("")
public ResponseEntity<Integer> add(@RequestBody UserRequestDto userRequestDto) {
User user = new User(userRequestDto.getId(),
userRequestDto.getName(),
userRequestDto.getPassword());
return ResponseEntity
.ok()
.body(userDao.add(user));
}
@DeleteMapping("")
public ResponseEntity<Integer> deleteAll(){
return ResponseEntity
.ok()
.body(userDao.deleteAll());
}
}
UserDao
@Component // UserDao를 사용한다고 등록
public class UserDao {
private final DataSource dataSource;
private final JdbcTemplate jdbcTemplate;
public UserDao(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public int add(User user) {
return this.jdbcTemplate.update("INSERT INTO users(id, name, password) VALUES(?, ?, ?)", user.getId(), user.getName(), user.getPassword());
}
public int deleteAll()
return this.jdbcTemplate.update("delete from users");
}
SwaggerConfiguration
@Component // UserDao파일을 bean으로 사용한다고 등록
public class UserDao {
private final DataSource dataSource;
private final JdbcTemplate jdbcTemplate;
public UserDao(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public int add(User user) {
return this.jdbcTemplate.update("INSERT INTO users(id, name, password) VALUES(?, ?, ?)", user.getId(), user.getName(), user.getPassword());
}
public int deleteAll()
return this.jdbcTemplate.update("delete from users");
}