| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 비전공자를 위한 데이터베이스 입문
- Orace 18c
- Oracle Express Edition
- Oracle 사용자명
- Oracle 사용자명 입력
- Oracle 테이블 띄어쓰기
- Oracle 윈도우 설치
- Oracle 18c HR
- 오라클 캐릭터셋 확인
- 오라클 캐릭터셋 변경
- oracle
- ORA-12899
- Oracle 초기 사용자
- 무료 오라클 설치
- Oracle 18c HR schema
- ora-01722
- oracle 18c
- 서평단
- ORA-00922
- 윈도우 Oracle
- 무료 오라클 데이터베이스
- Oracle 테이블 대소문자
- Oracle 18c 설치
- 오라클 캐릭터셋 조회
- Today
- Total
목록Development/Spring (13)
The Nirsa Way
[Spring Security] BCrypt Salt의 이해: 로그인 검증이 가능한 이유와 Pepper를 고려하는 상황비밀번호 저장을 처음 구현할 때 흔히 "BCryp로 암호화해서 저장한다"라고 표현하지만 정확히는 아래와 같은 단방향 해싱 흐름입니다.[회원가입] 사용자 비밀번호 → BCrypt 해싱 → DB 저장[로그인] 사용자 입력 비밀번호 → DB의 BCrypt 해시와 비교 그런데 BCrypt를 조금 더 들여다보면 BCrypt는 매번 랜덤 Salt를 생성하므로 같은 비밀번호도 매번 다른 Hash가 나오게 됩니다. 그렇다면 로그인이 성공 가능한 이유는 무엇일지 의문이 생깁니다.이번 글은 위의 질문에서 출발하며 먼저 요약한 결론은 다음과 같습니다.1. BCrypt는 암호화가 아니라 단방향 해시다.2. B..
[Spring Boot] 코틀린 Mockk 기반 단위 테스트스프링 부트 환경에서 보통 많이 쓰이는 목킹 라이브러리는 Mockito와 Mockk을 사용하게 됩니다. 대부분 자바 진형에서는 Mockito를 많이 사용하지만 Mockk는 final 클래스, 확장 함수, 코루틴 테스트 등 코틀린에 친화적인 목킹 라이브러리로써 코틀린 진형에서 테스트 코드를 작성할 때 많이 사용됩니다.Mockk에서 자주 사용되는 어노테이션은 다음과 같습니다.@Mockk : Mock 객체를 생성할 필드에 사용@InjectMockks : 테스트 대상 객체 생성 및 Mockk 객체 주입@ExtendWith(MockkExtension::class) : JUnit5 환경에서 Mockk 활성화// 예시 코드@ExtendWith(MockKExt..
이메일 인증 구현 - Redis 유효 시간 적용하기이미 로컬에 redis가 설치되어 있다는 전제하에 진행합니다. 윈도우 환경에 redis를 설치하는 것은 https://github.com/microsoftarchive/redis/releases 으로 접속하셔서 msi를 다운 받아 실행하시면 됩니다.build.gradle에 redis 의존성과 application.properties쪽에 설정을 추가해주세요.implementation("org.springframework.boot:spring-boot-starter-data-redis:3.5.4")spring.data.redis.host=localhostspring.data.redis.port=6379 RedisConfig를 생성하여 빈을 등록해줍니다.@Co..
이메일 인증 구현 - Naver SMTP인증 구현을 위해 네이버 로그인 및 메일로 이동하여 좌측 하단의 환경설정을 클릭합니다. POP3/IMAP 설정을 클릭 후 사용함으로 변경하고 확인을 눌러주세요. 저장을 클릭하면 하단에 아래와 같은 정보가 표시됩니다. (선택) 앱 비밀번호를 위해 2단계 인증 및 앱 비밀번호 설정을 진행합니다.2단계 인증이 안되어 있으신 분들은 "설정"으로 나올텐데, 2단계 인증을 먼저 등록 해주세요. 직접 입력은 편하신 대로 입력 후 "생성하기" 버튼을 클릭하면 앱 비밀번호가 생성됩니다. 이제 스프링 부트에서 이메일을 전송할 때 해당 앱 비밀번호를 사용할 예정입니다. 스프링 부트로 돌아가 build.gradle에 아래와 같이 의존성을 추가 해주세요.// https://mvnrepos..
영속성 컨텍스트(Persistence Context)란?JPA에서 엔티티 객체를 보관하는 저장소로써 EntityManager를 통해 엔티티를 관리하는 1차 캐시라고 볼 수 있습니다. 영속성 컨텍스트를 사용함으로써 아래와 같은 특징을 가지게 됩니다.1차 캐시 (First-Level Cache) : 동일한 엔티티를 여러 번 조회하면 DB에 재접근 하지 않고 캐시에서 반환동일성 보장 (Write-behind SQL Store) : 동일한 식별자를 가진 엔티티에 대해 항상 같은 인스턴스 반환 (== 비교 연산자로도 동일한 인스턴스로 인식함)쓰기 지연 (SQL 저장소) : 엔티티의 필드 변경 시 SQL이 즉시 실행되지 않고 트랜잭션 커밋 시 한번이 실행변경 감지 (Dirty Checking) : 엔티티의 값이 변..
Eager Loading vs Lazy LoadingEager Loading(이하 즉시 로딩)과 Lazy Loading(이하 지연 로딩)은 연관된 엔티티를 언제 불러올 것인지에 대해 결정하게 됩니다. 각각 연관 관계에 따라 기본값을 가지는게 다릅니다. 즉시 로딩(Eager Loading)즉시 로딩은 EAGER를 사용 합니다. ManyToOne은 즉시 로딩을 기본값을 가지기 때문에 fetch를 설정하지 않아도 되지만, 예시 코드임으로 명시적으로 하기 위해 작성하였습니다.@Entitypublic class Member { @Id @GeneratedValue private Long id; private String name; @ManyToOne(fetch = FetchType.EAGER..
기타 관계 (@OneToOne, @ManyToMany)ManyToOne, OneToMany 보다 상대적으로 사용 빈도가 낮은 OneToOne, ManyToMany를 기타 관계라고 표현하기도 합니다. 네이밍 그대로 1:1, N:N 관계를 가지는 어노테이션이며 특히 ManyToMany의 경우 중간 매핑 테이블을 따로 분리하는 것이 좀 더 좋은 케이스인 경우가 많으므로 거의 사용되지 않습니다. 1. @OneToOne한 명의 학생(student)은 하나의 사물함(rocker)만 사용해야하는 경우와 같이 1:1로 매핑되어야 하는 상황에서 사용되는 어노테이션 입니다. 단방향을 기준으로 작성된 엔티티는 다음과 같습니다.@Entitypublic class Student { @Id @GeneratedValue ..
양방향 매핑이란?양쪽의 엔티티가 서로를 참조하도록 설계하는 방식으로써 단방향 매핑과는 객체 그래프 탐색 및 DB 외래키 소유와의 매핑 표현 방식 차이가 있습니다. 무한 루프 주의의 경우 JSON 직렬화 시 발생하는 경우가 대부분인데, 일반적으로 MVC 패턴에서 요청/응답 DTO를 따로 사용하므로 해당 내용은 생략합니다. 아래의 코드를 보면 "연관 관계의 주인" 이라는 주석이 있는데 이는 외래키를 관리하는 주체입니다. 즉 insert/update 등이 발생하는 위치를 뜻합니다. member가 ManyToOne으로 team에 매핑하였으므로 당연히 team에서는 반대로 OneToMany가 됩니다.연관 관계의 주인이 되는쪽은 JoinColumn으로 FK를 지정하고 주인이 아닌쪽은 mappedBy를 통해 "주인이..
연관 관계 매핑이란?엔티티간의 관계를 DB의 FK와 매핑하여 연결하는 형태를 가질 수 있습니다. 즉 객체 간의 참조 방식을 DB의 외래키(FK)와 연결하여 사용할 수 있습니다. 이번에 살펴볼 어노테이션은 크게 2가지 인데, 아래와 같은 의미를 지닙니다. 1. @ManyToOne일반적으로 단방향 매핑에서 가장 권장하는 방식입니다. 두 개의 엔티티를 만들어 관리하고 여러 명인 쪽에서 @ManyToOne과 @JoinColumn을 사용하여 단방향 매핑을 가집니다. fetch는 추후 연관관계 매핑 포스팅이 끝날 때 쯤 작성할 예정입니다.@Entitypublic class Member { @Id @GeneratedValue private Long id; private String name; ..
JPA에서의 Entity란?데이터베이스 테이블과 매핑되는 자바 클래스를 의미합니다. 아래의 클래스를 예로 들었을 때 member의 테이블을 가르키며 객체는 테이블의 한 행(row)를 표현할 수있습니다.@Entitypublic class Member { @Id private Long id; private String name;}엔티티는 ORM에서 핵심 단위로 볼 수 있으며 자바와 관계형 데이터베이스간의 변환을 담당하고, 도메인 모델로써 역할을 수행하게 되며 영속성 컨텍스트의 관리 대상이 되며 일반적으로 아래와 같은 조건들을 가집니다. (영속성 컨텍스트의 라이프 싸이클 등 자세한 내용은 추후 포스팅 예정)기본 생성자 필수 : JPA 내부에서 리플렉션으로 사용final 클래스 불가 : fina..
