전체 글

바쁜 새벽(busymidnight)을 살아보고자 만든 블로그
@NoArgsConstructor와 @AllArgsConstructor은 생성자 코드를 더 간결하게 작성할 수 있는 강력한 도구입니다. 이 어노테이션들은 주요 필드들을 자동으로 초기화하거나, 특정 상황에서 기본 생성자를 자동으로 생성해주므로, 불필요한 반복 작업을 줄이고 코드 유지 보수성을 향상시킬 수 있습니다. @NoArgsConstructor란? @NoArgsConstructor는 클래스에 파라미터가 없는 기본 생성자를 자동으로 생성해줍니다. 이는 주로 JPA 엔티티 클래스와 같이 파라미터 없는 기본 생성자가 필요한 경우에 유용합니다. 일반적으로 기본 생성자에 대한 접근 제어를 위해 @NoArgsConstructor(access=AccessLevel.PROTECTED)와 같이 사용합니다. 무분별하게 ..
문제 발생 Spring Security로 로그인 기능 구현 당시 SecurityConfig 클래스를 WebSecurityConfigurerAdapter를 통해 Override하려고 했다. 그러나... 더 이상 사용되지 않는다고 한다... 어디로 가야하죠 아저씨... Deprecated 된 클래스가 처음인가요... 해결 공식 문서에 답이 있다! https://docs.spring.io/spring-security/site/docs/5.7.0-M2/api/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html WebSecurityConfigurerAdapter (spring-securit..
@Builder로 객체를 안전하게 생성하기 Lombok은 수많은 어노테이션을 지원한다. Builder 어노테이션을 이용해서 엔티티 객체를 Builder 패턴으로 생성해준다. 이 패턴을 알아보고 안전하게 객체를 생성하는 방법을 소개한다. Builder 패턴의 장점은 다음과 같다. 다양한 빌더를 구현하여 다양한 종류의 유연성 있는 객체 생성 가능 빌더를 사용하여 객체를 생성하면 코드의 가독성이 향상 예시) Member 엔티티를 @Builder로 생성 @Builder @Entity @Getter public class Member{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; pr..
보기 좋은 커밋 메시지는 당신의 시간을 단축해줍니다. 혼자 개발할 때는 알 수 없지만 협업을 하는 순간 커밋 메시지를 읽는 작업은 중요해진다. 그런데 커밋 메시지가 file 수정 이렇게만 적혀있다면?... 뭐가 어떻게 수정됐는지 파일을 눌러봐야만 알 수 있다... 이것은 많은 사람들의 스트레스를 유발하므로! 꼭! 프로젝트 시작 전에 개발 인원끼리 커밋 메시지 규칙을 정하도록 하자 아래는 현재 진행중인 팀 프로젝트에서 사용하는 커밋 메시지 규칙이다. : #이슈번호 - 형식으로 작성하며 제목은 최대 50글자 정도로만 입력 제목 끝에 마침표 금지, 무엇을 했는지 명확하게 작성 ################ 본문(추가 설명)을 아랫줄에 작성 ################ 꼬릿말(footer)을 아랫줄에 작성 #..
문제 발생 프로젝트 도중 특정 API를 호출시 500에러가 뜬다고 프론트 측에서 요청을 받음 처음에는 샘플 데이터가 아예 없어서 생기는 오류인 줄 알고 샘플 데이터를 넣었으나 여전히 500에러... 대체 뭔데.. 하고 로컬에서 돌려보니 생각도 못한 오류가 발생했다 바로... Ambiguous handler methods mapped for HTTP path 오류! 원인 처음 보는 오류인데 아주 간단 명료한 원인이 있었다. 말 그대로 HTTP 경로에 대해 '모호한' 핸들러 메서드가 매핑되었다는 것이다. 좀 더 쉽게 말하자면 API의 경로가 동일한 메서드가 여러개 있다는 뜻이다. 해결 @GetMapping("/{id}") public getReviews1(@PathVariable Long id){} @Get..
Optional을 사용하게 된 계기 바야흐로 프로젝트에서 Repository 개발 단계였다. 기존 엔티티 단건 조회는 단순하게 엔티티로 반환하고 있었고, 담당한 UserRepository를 테스트하다가 NPE를 만나게 된다. NPE(Null Pointer Exception) 개발자들이 가장 많이 마주치는 에러가 아닐까 싶다. (만나기. 싫어요. 제발). NPE는 Null 반환 자체도 문제지만 추적할 수 없어 오류 핸들링이 더 어렵다는 극악무도한 점이 있다. 아무튼 내 케이스에서 원인은 없는 User 엔티티를 반환하려다 보니 발생한 에러였고, 이를 좀 더 쾌적하게 핸들링 하기 위해 Optional을 처음 사용하게 되었다. 기존 다른 코드에도 엔티티 단건 조회는 전부 엔티티를 반환하고 있었기에 이를 계기로 ..
문제 설명 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. "[닉네임]님이 들어왔습니다." 채팅방에서 누군가 나가면 다음 메시지가 출력된다. "[닉네임]님이 나갔습니다." 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다. 예를 들..
문제 설명 다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다. (), [], {} 는 모두 올바른 괄호 문자열입니다. 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다. 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다. 대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return ..
쁜새
(안)게으른 블로그