Dev 50

[IntelliJ / DB] PostgreSQL 데이터베이스(스키마) 백업 및 복원하기

서론 프로젝트를 진행하며 더미 데이터를 검출 후 제거하는 기능이 추가되었고, 이를 테스트할 데이터를 쌓는 일이 필요해졌다. 단, 테스트를 진행하여 데이터를 정제하면 다음 번 테스트를 위해 다시 데이터를 쌓아야 하기 때문에, 스키마를 통째로(데이터 포함) 백업한 뒤 복원하는 것이 좋겠다고 판단했다. 시행착오를 다시 거치지 않기 위해 InteliiJ IDE 환경에서 PostgreSQL의 데이터베이스 및 스키마 백업/복원을 손쉽게 하는 방법을 기술한다. 개요 테스트를 반복하기 위해 데이터를 백업 및 복원할 때 많은 시간이 소요되면 작업 효율성이 떨어질 수밖에 없다. 따라서 보다 빠르게 백업 및 복원할 수 있는 이진 형식으로 dump 파일을 생성하여 저장하기로 결정했다. 해당 방법으로 복원하기 위해선 psql ..

Dev 2023.10.31

[JPA] more than one row with the given identifier was found 오류

오류 메시지 more than one row with the given identifier was found 원인 @OneToOne 으로 관계가 매핑된 Entity에 동일한 식별자를 가진 데이터가 중복으로 들어갔기 때문에 발생하는 예외였다. OneToOne 이므로 특정 id로 데이터를 조회했을 때 한 개만 조회되어야 하는데, 여러개가 조회되기 때문이다... 해결 중복된 데이터를 DB에서 제거하여 해결이 가능했다. 또한 해당 컬럼에 Constraint Key를 걸어주어 재발 방지가 가능하였다.

Dev/JPA 2023.08.04

[Java] Java에서 Wrapper 타입의 비교는 == 연산자 대신 equals()를 사용해야 하는 이유

개요 개발 중 이슈가 생겨 디버깅을 하던 도중, Long 과 Long 타입을 비교하는 구문에서 서로 두 값이 동일함에도 불구하고 간헐적으로 true가 아닌 false 가 반환되는 현상을 확인하였다. 원인 확인 결과, == 연산자와 equals 의 차이에서 오는 문제였다. 원인 Java에서 객체 비교는 대표적으로 == 연산자와 equals() 메서드를 사용하여 수행할 수 있다. == 연산자는 객체의 주소값을 비교하기 때문에 같은 값을 가지고 있어도 주소값이 다르다면 false를 반환한다. 단, 위에서 언급했듯 간헐적으로 값을 정상적으로 비교할 수 있었던 이유는 Java에서 Long과 Integer의 경우 값을 -128부터 127까지의 범위에 대해 캐시하고 있기 때문에 동일한 주소의 객체로 인식하기 때문이다..

Dev/Java 2023.07.04

[Spring Security] 인가 프로세스 DB 연동 웹 계층 구현

스프링 시큐리티 인가 개요 DB 연동 권한 관리가 필요한 이유 Spring Security에서 사용자가 재정의하여 사용하는 SecurityConfig 설정 클래스를 통해 선언적 방식으로 인가 처리를 수행할 수 있다. 단, 이 방법은 하드코딩으로 진행되기 때문에 동적 권한 관리가 필요한 범용 서비스에서는 권장되지 않는다. 따라서 DB와 연동하여 자원 및 권한을 설정하고 제어함으로 동적 권한 관리가 가능하도록 해야 한다. 설정 클래스 소스에서 권한 관련 코드 모두 제거 ex) antMatcher(“/user”).hasRole(“USER”) 관리자 시스템 구축 회원 관리 – 권한 부여 권한 관리 – 권한 생성, 삭제 자원 관리 – 자원 생성, 삭제, 수정, 권한 매핑 권한 계층 구현 URL – Url 요청 시..

Dev/Spring 2023.02.19

[IntelliJ] Resources 폴더를 찾지 못할 때 해결 방법 (application.properties 인식 방법)

개발 환경 IntelliJ 2022.2.2 Ultimate Spring Framework Maven 오류 메시지 및 원인 Error creating bean with name 'rootController': Injection of autowired dependencies failed; 프로젝트를 Git에서 클론하여 처음 빌드하는 중 위와 같은 오류가 발생하며 빌드가 진행되지 않았다. 원인을 살펴보니 Spring Bean이 제대로 주입되지 않고 있었고, 이는 application.properties를 제대로 인식하지 못하여 발생하고 있었으며, 결론적으로 IntelliJ가 src/main 하위의 resources 폴더를 제대로 찾지 못하고 있었기 때문이었다. 해결 방법 비교적 간단하게 해결이 가능하다. In..

Dev 2023.01.27

[SQL] Select절에 별칭(AS) 사용 후 Where절 Unknown Column 발생 이유

에러 메시지 SQL 오류 (1054): Unknown column 'xxx' in 'where clause' 원인 한 마디로 요약하자면 Select절 이전에 Where절이 실행되기 때문이다. 작성 순서상에는 Select 다음에 Where 절이라 실제 실행 순서를 간과한게 문제였다. 해결 방법 MySQL의 경우 각 절의 실행 순서는 아래와 같다. (Oracle 등 다른 DB의 경우 다를 수 있다.) FROM WHERE SELECT GROUP BY HAVING ORDER BY LIMIT 따라서, Where 대신 Having을 사용하여 문제를 해결할 수 있다. SELECT id AS userId FROM users HAVING userId = 272

Dev/SQL 2022.12.06

[Spring Security] 스프링 시큐리티 기본 API 및 Filter 이해 - 2

익명사용자 인증 필터 : AnonymousAuthenticationFilter 인증 Flow Spring Security는 인증되지 않은 사용자의 접근에 대해 자동으로 익명 사용자 인증 객체를 만들어서 처리한다. 익명사용자를 Authentication이 null인 상태로 인식하는 것이 아닌, 익명사용자 인증 객체를 만들어서 사용 익명사용자와 인증사용자를 구분하여 처리하기 위함 화면에서 인증 여부를 구현할 때 isAnonymous()와 isAuthenticated() 로 구분하여 사용 (logout을 할 때 등) 인증 객체를 세션에 저장하지 않음 익명사용자 객체를 통해 특별한 기능을 수행한다기 보다는, 스프링에서 익명사용자 또한 기존 인증 체계에 맞게 구조적으로 관리할 수 있도록 하는 것이 목표. 아무런 ..

Dev/Spring 2022.11.23

[Spring Security] 스프링 시큐리티 기본 API 및 Filter 이해 - 1

서론 최근 진행 중인 프로젝트에서 Spring Security를 이용한 로그인 인증 파트를 맡게 되었다. 따라서 관련 스프링 강의를 보고 정리할 겸 포스팅을 진행해보려고 한다. IDE는 IntelliJ IDEA 2022.2.2 Ultimate 를 사용하였다. 참조한 강의 링크는 아래와 같다. https://inf.run/wJBU 스프링 시큐리티 - Spring Boot 기반으로 개발하는 Spring Security - 인프런 | 강의 초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과 www.inflearn.com 프로젝트 구성 및 의존성 추가 Spring Security 적..

Dev/Spring 2022.11.07

[Spring / MyBatis] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

오류 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 문제 MyBatis를 사용하는 Spring Boot 프레임워크에서 DB 커넥션 테스트 이후 Service를 테스트하는데 위 오류와 마주하게 되었다. 서칭 결과 다음과 같이 원인을 정리할 수 있었다. Mapper.xml 파일 쿼리문에 오타가 존재 쿼리문의 메서드 id가 mapper 인터페이스와 불일치할 때 Mapper.xml 경로 설정이 잘못되어 불러오지 못할 경우 필자의 경우 Mapper.xml 파일을 resources 밑이 아닌 java 패키지 밑에 작성하였었는데, 별도 설정을 하지 않아 Maven 에서 Mapper를 resources 패키지 하위에서만 불..

Dev/Spring 2022.10.05

[파이썬] 순열과 조합의 개수만 내장 함수로 구하기

흔히 순열과 조합을 구하기 위해 itertools 모듈을 사용한다. 하지만 단순히 그 개수만 구하기 위해서는 굳이 itertools를 써야 하나 의문이다. 파이썬은 math 함수에서 그 기능을 제공하고 있다. math.perm(n, r) 순서를 고려하여 n개중 r개만큼 선택하는 경우의 수 (순열) math.comb(n, r) 순서에 상관없이 n개중 r개만큼 선택하는 경우의 수 (조합)

Dev/Python 2022.05.17
반응형