반응형 *:;전체보기;:*696 Spring Starter security 2.x 3.x 설정 방식 차이 이번 포스팅에서는 Spring 2.x 와 3.x 의 설정 방식의 차이에 대해서 알아보겠습니다. JWT 를 쓰는 환경이고, 같은 설정 코드를 비교해서 어떤 점이 달라졌는지 확인해보겠습니다. 2.x 설정 코드 입니다. @Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(prePostEnabled = true) @RequiredArgsConstructor public class SecurityConfig { private final TokenProvider tokenProvider; private final JwtAuthenticationEntryPoint jwtAtuthenticationEntryPoint; private final JwtAccess.. Programing/Spring Security 2023. 11. 21. 좋은 UI 설계서란? UI 설계 알짜만 빼먹기 이번 포스팅에서는 10년간 개발자로 일해오면서 느낀, 좋은 UI 설계서란 무엇이며 UI 설계에 담겨야 하는 내용들에 대해 알아보는 시간을 갖어보겠습니다. 따로 UI/UX에 대해 공부한 적은 없고, 100% 경험에서 나온 생각이라는 것을 참고 부탁드립니다. SI 업체에서 일을 하다 보면 짧은 개발 기간 동안에 분석, 설계 부터 개발, 테스트까지 진행을 해야 합니다. 핑계일 순 있겠지만 UI 설계서는 감리 대응용이지 실제 개발에 참고하기는 힘들고 요구사항에 변화하는 내용까지 형상관리 하기는 여간 힘든 작업이 아닙니다. 하지만 말 그대로 UI 설계서는 설계문서 입니다. 건축과 비교하면 '도면' 정도가 되겠네요. 아파트를 짓는데 실제와 다른 도면으로 만든다면 어떻게 될까요? 그리고 짓다가 변경되는 내용을 도면에.. Programing 2023. 10. 6. spring boot + JPA + Tibero 연동 설정 spring boot 2.x와 JPA 설정은 다른 데이터베이스와 같습니다. 이번 포스팅에서는 살짝 차이가 있는 Tibero 연동을 주로 보도록 하겠습니다. (6.x 버전 기준) Tibero의 경우 JDBC는 Tibero 설치 경로의 /client/lib/jar 에 있는 tibero6-jdbc.jar 파일이 필요합니다. 해당 파일을 복사하여 프로젝트의 최상위 libs 폴더에 붙여넣고 gradle 에 jar 파일을 읽을 수 있도록 설정합니다. implementation fileTree(dir: 'libs', include: ['*.jar']) 그리고 spring-boot-starter-data-jdbc 의존성이 추가 되어 있다면 제거를 해줍니다. implementation 'org.springframewor.. Programing/Springboot 2023. 10. 5. @Transactional 알짜만 빼먹기! with JPA @Transactional 이란 @Transactional 은 Spring에서 제공하는 트랜잭션 관리 기능을 적용할 때 사용되며, 특정 메서드를 하나의 트랜잭션 단위로 지정할때 사용하는 어노테이션 입니다. 일반적으로 하나의 메서드에서 복수의 데이터 처리를 할 때 붙여서 사용합니다. 예외가 발생하면 롤백을 해서 데이터 정합성을 유지해야 하기 때문이죠. 이번 포스팅에서는 @Transactional을 사용하는데 꼭 알아야 하는 알짜만 빼먹는 시간을 갖겠습니다. Checked, Unchecked Exception @Transactional을 사용했다는 것은 어떤 예외가 발생했을 때 Rollback 처리를 하기 위해서겠죠? 그럼 어떤 Exception이 발생했을 때 Rollback 처리가 되는지를 알아야 합니다... Programing/Spring 2023. 8. 25. @MappedSuperclass 에 대해서 알아보자 @MappedSuperclass는 명칭과 같이 상속관계에서 부모 클래스를 매핑 할 때 사용합니다. 기존의 상속관계 매핑에서는 부모 자식 테이블 모두 엔티티로 생성하여 매핑을 하지만, @MappedSuperclass는 부모 클래스는 엔티티로 생성하지 않고 자식 클래스만 엔티티로 생성합니다. 이는 단순히 매핑 정보(엔티티 컬럼)를 상속할 목적으로 사용 됩니다. 예제) 예를들어 위와 같이 MANAGER, EMPLOYEE 테이블이 있다고 할 때, 두 테이블에는 ID와 NAME이 공통으로 있는 것을 보실 수 있습니다. 이 두 컬럼을 부모클래스로 생성해 위의 두 테이블의 엔티티가 상속받도록 합니다. @MappedSuperclass public abstract class CommonEntity { @Id @Colum.. Programing/JPA 2023. 8. 25. JPA could not initialize proxy - no Session 원인 / 해결방법 could not initialize proxy - no Session 해당 오류는 JPA 의 open-in-view 설정과 관련이 있습니다. OSIV open-in-view는 OSIV(Open Session In View) 라 하며 영속성 컨텍스트의 범위를 설정하는 옵션입니다. JPA default 설정 값은 true 이고 영속성 컨텍스트가 트랜젝션의 범위를 넘어서 요청이 끝날 때까지 살아있게 됩니다. false 설정의 경우 트랜젝션 범위 내에서만 영속성 컨텍스트가 살아있게 됩니다. 원인 open-in-view 설정이 false 인 상태에서 트랜젝션 없이 연관관계가 FetchType.LAZY 로 설정한 객체에 접근할 때 발생. /*application.yml*/ spring: jpa: open-in-v.. Programing/JPA 2023. 8. 24. Spring boot 실행 시 경고 문구 해결 방법 You are asking Spring Security to ignore Ant [pattern='/favicon.ico']. This is not recommended -- please use permitAll via HttpSecurity#authorizeHttpRequests instead. [발생 원인] web.ignoring()을 사용할 경우 spring security의 보호를 받을 수 없기 때문에 authorizeHttpRequests().permitAll 에 추가하여 설정하는 방식으로 변경 [경고 발생 코드] @Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring() .antMatche.. Programing/Springboot 2023. 8. 18. @IdClass @EmbeddedId 의 활용 차이 @IdClass @EmbeddedId 모두 JPA에서 복합 기본 키 (Composite Primary Key) 를 다루는 방법입니다. 하나의 Entity에 @Id 를 하나 이상 쓰게되면 매핑 오류가 발생하게 됩니다. 그래서 복합 기본키를 사용할 때는 별도의 키 클래스를 생성해야 합니다. 이 때 생성하는 키 클래스는 다음과 같은 특징이 있습니다. 키 클래스 특징 1. 복합 키는 별도의 키 클래스로 만들어야 한다. 2. Serializable을 implements 받아야한다. 3. equals와 hashCode를 Override 해야 한다. (lombok 에서 @EqualsAndHashCode 사용) 4. 기본 생성자가 있어야 한다. (lombok 에서 @NoArgsConstructor 사용) 5. 키 클래.. Programing/JPA 2023. 8. 18. JPA 연관관계 매핑 알짜만 빼먹기. 일대일 일대다 다대일 다대다 이번 포스팅에서는 JPA 에서 사용되는 연관관계 매핑에 대해서 알아보도록 하겠습니다. 알아보기에 앞서, 알아두어야 할 용어 몇가지만 확인하고 가도록 하겠습니다. 용어 방향( Direction ) 한쪽 Entity에서만 참조하는 것을 '단방향' 관계라고 하고 양쪽 Entity에서 서로 참조하는 것을 '양방향' 관계라고 합니다. DB 테이블은 항상 양방향 관계이고, 객체를 사용하는 JPA에는 단방향만 존재합니다. 정확히 얘기하자면 Entity간 서로 단방향 관계로 양방향 처럼 보이게 합니다. 다중성 ( Multiplicity ) 객체간 관계성을 나타내며, 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:N) 이 있습니다. JPA에서는 @ManyToOne, @OneToMany, @OneToOn.. Programing/JPA 2023. 8. 18. mapStruct updateFromDto, null 컬럼 제외하고 update mapStruct의 toEntity 메서드를 활용하여 전달받은 DTO 를 Entity로 변환하여 save 메서드를 호출할 때 전달되지 않은 변수 값의 경우 null로 update 됩니다. [DTO] @AllArgsConstructor @Getter @Setter public class TestDTO { private String grpCdId; private String cdId; private String cdNm; } [Entity] @Setter @Getter @Entity @Table(name = "TEST") public class TestEntity implements Serializable { @Id @Column(name = "grp_cd_id") private String grpCdId .. Programing/JPA 2023. 8. 10. named-native-query @Query에 String을 +로 연결하는게 너무 싫어요! JPA를 사용하다 보면 querydsl에서 지원하지 않거나, 복잡한 쿼리를 작성해야 할 때 org.springframework.data.jpa.repository.Query @Query 를 사용해야 하는 경우가 있습니다. 이런 경우 query를 String으로 연결해서 작성해야 하기 때문에 디버깅 해서 쿼리를 확인해야 할 때나 그 반대의 경우 매~우 불편하죠. Link : https://aljjabaegi.tistory.com/694#2._JPQL_(_Java_Persistence_Query_Language)_and_nativeQuery Querydsl vs Criteria API vs QueryMethod vs JPQL 비교 이전 포스팅에서 Querydsl 을 설정하는 방법을 알아보았습니다. Link .. Programing/JPA 2023. 8. 8. IntelliJ Spring boot 2.x project Java 설정 방법 IntelliJ 를 설치하고 Spring boot 2.x 를 오픈하면 Java 설정을 해줘야 합니다. 물론 JAVA HOME 과 같은 컴파일러를 사용한다면 자동 설정이 되지만 실행 했을 때 문제가 있다면 2군데 혹은 3군데를 수정해 주어야 합니다. 1. Project Struecture 단축키는 ctrl + alt + shift + s 입니다. Project 메뉴에서 SDK를 원하는 버전으로 선택합니다. 2. settings -> gradle gradle project의 경우 Gradle JVM 버전을 변경해 줍니다. settings의 단축키는 ctrl + alt + s 입니다. settings에서 gradle을 검색하여 하단에 Gradle JVM 을 원하는 버전으로 선택합니다. 1,2 번을 수정해도 실.. Programing/JAVA 2023. 7. 31. JpaRepository Custom / repository에 공통 사용 메서드 추가 JpaRepository의 메서드를 활용하면서, 공통으로 활용하는 메서드를 추가하기 위해 JpaRepository를 커스텀 하는 방법을 알아보겠습니다. 1. JpaRepository extends 한 CustomJpaRepository interface 작성 @NoRepositoryBean public interface CustomJpaRepository extends JpaRepository { /*추가로 작성할 메서드를 작성합니다.*/ JPAQueryFactory getQueryFactory(); } @NoRepositoryBean 은 말 그대로 repository bean으로 등록하지 않겠다는 어노테이션 입니다. JpaRespository를 상속받은 CustomJpaRepository interfa.. Programing/JPA 2023. 7. 27. Querydsl vs Criteria API vs QueryMethod vs JPQL 비교 이전 포스팅에서 Querydsl 을 설정하는 방법을 알아보았습니다. Link : https://aljjabaegi.tistory.com/691 Springboot 2.x + queryDSL 설정 방법 JPA를 사용하게 되면 Query method를 사용하면 간단한 조건의 작업들은 가능하지만 복잡한 쿼리로 작성되어야하는 로직의 경우 한계가 있습니다. 물론 어느정도 가능은 하겠지만 query method의 길이가 aljjabaegi.tistory.com 이번에는 JPA에서 활용되는 여러가지 방법들과 Querydsl을 비교해 보도록 하겠습니다. 샘플 쿼리에 있는 내용을 Query method, 샘플 쿼리 SELECT CD_ID , CD_NM , CD_SQNO FROM M_OP_CD WHERE GRP_CD_ID.. Programing/JPA 2023. 7. 20. swagger 응답 타입이 Void 일 때 참조 에러 해결 방법 응답타입에 Void가 있을 때 swagger에서는 아래와 같은 에러를 발생시킵니다. Could not resolve reference: Could not resolve pointer: /definitions/Error-ModelName{namespace='java.lang', name='Void'} does not exist in document 이유는 Swagger에서 Void 를 Model로 인식하지 않기 때문인데요, 이런 에러를 보기 싫다면, 특정 객체를 생성해, Void 대신 사용하면 됩니다. 오류가 나는 코드 public ResponseEntity getCctvList(@RequestBody SearchDTO param) { . . . } 빈 응답 객체로 사용할 클래스 생성 @ApiModel(v.. Programing/JAVA 2023. 7. 20. 이전 1 2 3 4 5 ··· 47 다음 💲 추천 글 반응형