전체 글

Spring/오류

JPA Error: 흔히 접할 수 있는 에러 could not initialize proxy - no Session

JPA Error: could not initialize proxy - no Session 접근 JPA강의에서 분명히 이거에 대한 내용을 다뤘던 거 같은데 기억이 안난다.. 영속성 컨텍스트, Proxy, Lazy Loading에 대한 이해가 필요함. Lazy Loading 내용은 제외하고 작성하겠다. 원인 JPA를 사용할 때 흔히 볼 수 있는 에러임. DB에 저장된 값을 사용할 때 발생한다. User와 Post는 1 : N 관계를 맺고있다. Post 엔티티에서 User Fetch => Lazy로 설정해놓은 상태임. (국룰) Post를 조회할 때 API 과정을 살펴보자. 오류가 나는 컨트롤러 Post를 조회하는 내요이고, PostId를 이용해서 조회 함. Post 제목, 작성자, 내용, 등등 PostDTO..

Spring/Security

Spring Security) UserDetailsService에서 비밀번호는 어디에서 검사하는 걸까?

Spring Security의 사용자 비밀번호 검사 스프링 시큐리티 예제를 보며 개발하다 보면 UserDetailsService 인터페이스의 loadUserByUsername(String username)을 구현해서 사용자 정보를 DB에서 조회하고 반환한다. 하지만 비밀번호를 체크하는 코드는 없다. 그래도 잘못된 비밀번호를 입력하면 로그인에 실패한다. 내가 작성한 코드에는 없지만 어디에선가 비밀 번호 체크를 하고 있는 것이다. 비밀 번호는 어디에서 체크할까? DaoAuthenticationProvider AuthenticationManager.authenticate(Authentication)을 호출하면 스프링 시큐리티에 내장된 AuthenticationProvider의 authenticate()메서드가..

백준 오답노트/그래프와 순회

백준 - 그래프와 순회 나이트의 이동 7652문제 / BFS풀이, 오답

첫째 줄에는 체스판의 한 변의 길이 둘째 줄에는 나이트가 현재 있는 칸 셋재 줄에는 나이트가 이동하려는 칸이 주어진다. 0, 0에서 시작해서 -> 7, 0 도착 최소 몇 번만에 이동할 수 있는지 확인하는 문제다. => BFS를 이용해서 최솟값을 구하자 처음 나이트가 이동할 수 있는 경우의 수, 가운데 시작에서 나이트는 저렇게 이동할 수 있음을 알고 시작하자. col, row / col2, row2를 따로 나누었다. 2차원 배열을 생성해서 예를 들어보자. 이런식으로 이동할 수 있음을 나타낸다. 두 번째, col2와 row2를 이용했을 때 이동할 수 있는 예를 들어보자. 이렇게 이동함을 알 수 있다. 그럼 이제 같이 이동했을 때를 나타내보자 겹칠 일이 없이, 내가 이동할 수 있는 좌표를 Queue에 담고 한..

백준 오답노트/백트래킹

백준 - 백트래킹 14889번 스타트와 링크 / 풀이, 오답

= 내가 접근한 방법 = 처음 작성한 dfs 함수다. 이 메서드의 문제점은 2개까지는 구할 수 있어도 => n = 4일 때만 가능하고 n = 6일 때 부터 불가능했다. n = 6일 때, 1-2-3 vs 4-5-6 이렇게 팀을 이루는 건데 내가 짠 함수로는 1-2, 3-4, 5-6 이런 식으로 진행이 되기 때문에 당연히 오답. public static void dfs(int n, int depth) { // System.out.println("depth = " + depth); if (depth == n / 2) { for (int i = 0; i < depth; i++) { System.out.println("result: " + temp[i]); } int check = Math.abs(temp[0] ..

Java

빌더 패턴(Builder pattern)을 써야하는 이유, @Builder

빌더 패턴(Builder pattern)이란? 객체를 정의하고 그 객체를 생성할 때 보통 생성자를 통해 생성하는 것을 생각한다. 객체를 생성할 수 있는 빌더를 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값을 셋팅하고 마지막에 build()를 통해 빌더를 작동 시켜 객체를 생성한다. 빌더를 왜 써야할까? 1. 생성자 파라미터가 많을 경우 가독성이 좋지 않다. 2. 값을 넣는 순서가 상관이 없다. 1번 User oneUser = new User( "test@test", "test1", "bang", "010-1234-1234", "dsa", "hi", "n", "ahffk", "dsa", LocalDateTime.now()); 이런 경우에 어떤 값을 넣어야 되고 어떤 순서인지 너무 헷갈리지 ..

Spring/오류

org.hibernate.PersistentObjectException: detached entity passed to persist

detached entity passed to perist 발생 JPA 프로젝트에 엔티티를 영속화 및 커밋 시도하니 다음과 같은 에러가 발생 구글링 결과 CascadeType.ALL 옵션과 관련있는 듯 해보였으나 회원 가입만 구현한 상태이기 때문에 해당 문제는 아니였다. CascadeType.ALL 관련 옵션이 없으나 동일한 오류가 발생하였다면 엔티티 클래스에 @Id를 부여한 필드에 @GeneratedValue를 작성하여 AUTO, SEQUENCE, IDENTITY 전략 등 데이터베이스에게 key 값을 자동 생성하도록 하는 전략을 선택하였으면서 엔티티 객체 생성 시 Id에 해당하는 필드에 직접 값을 입력하지 않았는지 확인

초보병일이
초보 성장기