본문 바로가기

컴퓨터/Spring11

[Spring] 트러블 슈팅 - Entity 날짜 자동 세팅(org.springframework.dao.DataIntegrityViolationException: could not execute statement [Column 'created_at' cannot be null] [insert into ...] ) 문제상황 스프링 부트에서 특정 어노테이션을 달면 해당 Entity가 DB에 저장될 때 자동으로 현재 날짜로 세팅이 된다. 보통 게시글을 언제 썼냐 추적할 때 사용한다. 하지만 아래 에러가 발생하였다. org.springframework.dao.DataIntegrityViolationException: could not execute statement [Column 'created_at' cannot be null] [insert into ...] 즉 created_at이 null로 세팅되어 에러가 난다는 것이다. 해결 이를 사용하기 위해서는 JAP Auditing 기능을 활성화 해주어야한다. 이는 데이터베이스에서 엔터티 객체의 변경 이력을 추적하는 기능을 제공하는 기술이다. 메인 설정 클래스에 @Enab.. 2024. 1. 20.
[스프링 시큐리티] AccessToken + RefreshToken을 이용한 로그인 구현(최신코드, TDD) 스프링 시큐리티 스프링 시큐리티를 이용해 리프래쉬 토큰, 액세스 토큰으로 관리되는 회원의 로그인, 권한 등의 코드를 작성한다. 사실 워낙 많이 사용되는 방식이기에 여느 블로그에서 긁어오면 될 줄 알았으나... 버전이 달라짐에 따라 문제가 약간 있어서 찾아보는데 고생을 조금 했다. 2023년 12월 29일 기준 최신 코드로 스프링 시큐리티 인증 인가 관련 작업을 TDD형식으로 구현한다. 이 포스팅에서는 실제 스프링 시큐리티를 사용한 인증, 인가의 구현 뿐 아닌 보안과 관련된 몇몇 용어를 정리하여 스프링에서의 보안에 대한 이해를 돕고자 한다. 인증과 인가 보안 관련 프로그래밍을 할 때 늘 접하는 용어는 인증과 인가이다. 인증(Authentication)이란? 인증이란 사용자가 누구인지 확인하는 단계이다. 예.. 2023. 12. 29.
[Refactoring] 코드를 리팩토링하자!/전략 패턴 적용 코드 리팩토링 KDT 팀단위 프로젝트가 끝나고 약간의 시간이 흘렀다. 프로젝트 중에도 스스로 코드를 너무 더럽게 짰다는 후회가 항상 존재했으나 시간에 쫓기는 일정 때문에(변명이겠지만) 기능만 하는 코드를 대충 작성하고 넘어간 바 있다. 이는 팀원들도 마찬가지였다. 이로 인해 서로의 코드를 리뷰하는 것은 거의 불가능에 가까웠고 이미 구현되어있는 메서드를 팀원이 가져다 쓰는 것에도 위험이 따랐다. 해당 코드의 동작이 한 눈에 들어오지 않으며, 코드가 제대로 작성되었는지, 에러는 없는지 의문이 있기 때문이다. 테스트 코드 안전하지 않은 코드에 대한 문제를 항상 상기하고 있었기 때문에, 드디어 코드를 리팩토링하는 시간을 가지고자 한다. 우선 리팩토링 하기 전 내가 짠 코드의 동작이 일정한 결과를 낳게 하기 위한.. 2023. 11. 16.
[Spring] 스프링 Optional 클래스를 이용한 null 쿼리스트링 처리 RequestParam은 기본적으로 해당 주소에 쿼리 파라미터가 없을 경우 해당 메서드를 실행시키지 않는다. 그러나 RequestParam의 requered를 false로 주면 쿼리 스트링이 없을 경우에 해당 값에 null을 넣게 된다. 이럴 때 Optional을 이용하여 처리 가능하다. 아래와 같이 처리할 경우 /chatBoot 이라는 경로로만 들어온다면, message에 null이 들어가게 되고, orElseGet의 결과에 따라 newMessage에는 "안녕"이 들어가 null 쿼리 스트링 처리가 가능해진다. @GetMapping("/chatBoot") public String chatBoot(@RequestParam(required = false) String message) { Optional u.. 2023. 8. 21.