본문 바로가기
반응형

Back20

[DB] DECIMAL 📌 DECIMAL : decimal 은 큰 숫자를 처리할 때 사용한다. ( -10^38+1 ~ 10^38-1 ) ✔️ decimal 을 주로 사용하는 데이터 1. 금액 및 가격 데이터 - 통화 단위를 포함한 금액이나 가격 정보는 정확한 십진법 연산을 요구한다. DECIMAL은 화폐 값의 정확성을 유지하면서 연산을 수행할 수 있다. 2. 세금 및 환율 데이터 - 세금이나 할인율과 같은 비율은 소수점 아래의 정밀도를 필요로 한다. 예를 들어, 5% 할인율을 정확히 표현하려면 소수점 아래 2자리의 정밀도가 필요하다. 3. 물리적 측정 - 무게, 길이, 부피와 같은 물리적 측정 값들도 정확한 연산을 위해 DECIMAL을 사용할 수 있다. 4. 비율 및 백분율 - 어떤 값이 전체에 대한 비율을 나타내는 경우 DE.. 2023. 8. 25.
[Spring] Bean 📌 Spring Bean객체를 다루는 일반적인 방법은 프로그래머가 프로그램 로직 상 필요한 객체를 그 때 그 때 생성하고 필요한 메서드를 호출하는 것이다. 만약 다루는 언어가 자바라면 new 키워드를 통해 필요한 곳에 인스턴스를 생성하는 로직을 넣을 것이다. 하지만 스프링에서는 클래스들의 인스턴스(객체)를 일일이 프로그래머가 다루는 것이 아니고 스프링에게 관리를 맡기게 된다. 이것이 스프링의 주요 특징 중 하나인 IoC(Inversion of Control)이다.IoC(Inversion of Control) : 제어의 역전, 객체를 개발자가 아닌 외부(스프링 컨테이너)에서 생성, 관리 이 때, 스프링이 객체들을 미리 생성해 관리하는 공간을 스프링 컨테이너라고 하며, 이렇게 스프링에 의해 생성되고 관리되는.. 2023. 7. 19.
[DB] PostgreSQL 과 MariaDB 의 특징, 차이점 📌 PostgreSQL 과 MariaDB 의 특징 ◽ PostgreSQL : 강력한 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS) - 확장성: PostgreSQL은 대규모 데이터베이스 및 사용자 요구를 처리할 수 있는 뛰어난 확장성을 제공한다. 복제, 파티셔닝, 클러스터링 등 다양한 기능을 활용하여 성능과 가용성을 높일 수 있다. - 트랜잭션 지원: PostgreSQL은 ACID(원자성, 일관성, 고립성, 지속성) 특성을 준수하여 데이터 일관성과 신뢰성을 보장한다. 트랜잭션의 원자성을 유지하고, 병행성 제어를 통해 동시성 문제를 관리하며, 데이터 손실을 방지하기 위해 트랜잭션 로그 기능을 제공한다. - 외래 키 제약 조건: PostgreSQL은 외래 키(Foreign Key)를 지원하여 데이터 .. 2023. 7. 18.
[Spring/Security] JWT (JSON Web Token) 📌 JWT (JSON Web Token) ✔ JWT 란? JWT는 당사자간에 정보를 JSON 객체로 안전하게 전송하기 위한 컴팩트하고 독립적인 방식을 정의 하는 개방형 표준이다. 이 정보는 디지털 서명이 되어 있으므로 확인하고 신뢰할 수 있다. JWT 는 비밀(HMAC 알고리즘 사용) 또는 RSA 또는 ECDSA를 사용하는 공개/개인키 깡을 사용하여 서명할 수 있다. JWT를 암호화하여 당사자 간에 비밀성을 제공할 수도 있지만 여기서는 서명된 토큰에 중점을 둘 것이다. 서명된 토큰은 그 안에 포함된 정보, 요구사항 등의 무결성을 확인할 수 있는 반면 암호화된 토큰은 다른 당사자로부터 해당 클레임을 숨긴다 . 공개/개인 키 쌍을 사용하여 토큰에 서명할 때 서명은 개인 키를 보유한 당사자만이 서명한 당사자임.. 2023. 6. 26.
[Spring/Security] Authentication 객체가 가질 수 있는 2가지 타입 📌 Authentication 객체가 가질 수 있는 2가지 타입 ◽ 구글 로그인 버튼 클릭 → 구글 로그인창 → 로그인 완료 → code 리턴(OAuth-Client 라이브러리) → AccessToken 요청 ◽ userRequest 정보 → loadUser 함수 호출 → 회원 프로필을 구글로 부터 받음 ✔ Controller @GetMapping("/test/login") public @ResponseBody String testLogin( Authentication authentication, @AuthenticationPrincipal PrincipalDetails userDetails) { // DI(의존성주입) PrincipalDetails principalDetails = (PrincipalD.. 2023. 6. 23.
[Spring/Security] 구글 회원 프로필 정보 받아오기 📌 구글 회원 프로필 정보 받아오기 ✔ 구글 로그인이 완료된 뒤의 후처리 1) 코드받기 (인증) 2) 액세스토큰 (권한) - 액세스 토큰을 받으면 Security 서버가 구글에 로그인한 사용자의 정보에 접근할 수 있는 권한이 생긴다. 3) 사용자 프로필 정보를 가져옴 4) 회원가입 4-1) 그 정보를 토대로 회원가입을 자동으로 진행시킴 4-2) 이메일, 전화번호, 이름, 아이디, 집 주소 등의 추가적인 정보를 입력하는 창이 뜸 ➕ 구글 로그인이 완료가 되면 코드를 받는 것이 아니라, 엑세스토큰 + 사용자 프로필 정보를 한 방에 받는다. ◽ SecurityConfig.java SecurityConfig.java 에 위와 같이 추가해 준다. 아직 아무 것도 만들어지지 않았기 때문에 null을 임시로 넣어둔다.. 2023. 6. 23.
[Spring/Security] 구글 로그인 준비 📌 구글 로그인 ✔ Google Api Console 접속 https://console.cloud.google.com Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com ◽ 새로운 프로젝트 만들기 ① 프로젝트를 만들기 위해 새 프로젝트를 클릭한다. ② 프로젝트의 이름을 설정한 뒤, 만들기 버튼을 클릭한다. ③ 프로젝트 생성 확인 그럼 이렇게 프로젝트가 생성된 것을 볼 수 있다. ④ API 및 서비스 > OAuth 동의 화면 User Type 은 외부로 선택하고, 애플리케이션 이름을 설정한 후 저장한다. ⑤ 사용자 인증 정보 + 사용자 인증 정보 만들기 클릭 OAuth 클라이언트 ID 클릭 애플리케이션 유형 -> 웹 애플리케이션 클릭 이름 설정 후,.. 2023. 6. 23.
[Spring] 스프링 AOP - 포인트컷 / 포인트컷 지시자의 종류 / execution / @target / @within ✔ 포인트컷 지시자 포인트컷 표현식은 execution 같은 포인트컷 지시자(Pointcut Designator)로 시작한다. (줄여서 PCD) ◽ 포인트컷 지시자의 종류 • execution : 메소드 실행 조인 포인트를 매칭한다. 스프링 AOP에서 가장 많이 사용하고, 기능도 복잡하다. • within : 특정 타입 내의 조인 포인트를 매칭한다. • args : 인자가 주어진 타입의 인스턴스인 조인 포인트 • this : 스프링 빈 객체 (스프링 AOP 프록시)를 대상으로 하는 조인 포인트 • target : Target 객체(스프링 AOP 프록시가 가르키는 실제 대상)를 대상으로 하는 조인 포인트 • @target : 실행 객체의 클래스에 주어진 타입의 애노테이션이 있는 조인 포인트 • @withi.. 2023. 5. 25.
[Spring] 예제 프로젝트 만들기 - 상품 주문 프로세스 ✔ 예제 프로젝트 만들기 : 상품을 주문하는 프로세스 / Controller → Service → Repository ◽ advanced > app > v0 > OrderRepositoryV0 package hello.advanced.app.v0; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @Repository @RequiredArgsConstructor public class OrderRepositoryV0 { public void save(String itemId) { // 저장 로직 if (itemId.equals("ex")) { // 상품의 아이디가 "ex" 로 넘어오면 throw .. 2023. 5. 22.
[DB] 스프링 트랜잭션 ✔ 스프링 트랜잭션 사용 방식 ① 선언적 트랜잭션 관리 • @Transactional 애노테이션 하나만 선언해서 매우 편리하게 트랜잭션을 적용하는 것을 선언적 트랜잭션 관리라 한다. • 선언적 트랜잭션 관리는 과거 XML에 설정하기로 했다. • 이름 그대로 해당 로직에 트랜잭션을 적용하겠다 라고 어딘가에 선언하기만 하면 트랜잭션이 적용되는 방식이다. ② 프로그래밍 방식 트랜잭션 관리 • 트랜잭션 매니저 또는 트랜잭션 템플릿 등을 사용해서 트랜잭션 관련 코드르 직접 작성하는 것을 프로그래밍 방식의 트랜잭션 관리라 한다. → 프로그래밍 방식의 트랜잭션 관리를 사용하게 되면, 애플리케이션 코드가 트랜잭션이라는 기술 코드와 강하게 결합된다. → 선언적 트랜잭션 관리가 프로그래밍 방식에 비해서 간편하고 실용적이기.. 2023. 5. 18.
[DB] QueryDSL ✔ QueryDSL • 쿼리를 Java로 type-safe 하게 개발할 수 있게 지원하는 프레임워크 • 주로 JPA 쿼리(JPQL)에 사용한다. ➕ JPQL(HQL) - 장점 : SQL QUERY 와 비슷해서 금방 익숙해진다. - 단점 : type-safe 가 아니며, 동적쿼리 생성이 어렵다. • 쿼리에 특화된 프로그래밍 언어 (쿼리 + 도메인 + 특화 + 언어) • 단순, 간결하고 유창하다. ✔ SpringDataJPA + Querydsl • SpringData 프로젝트의 약점은 조회이다. -> Querydsl 로 복잡한 조회 기능을 보완한다. ✔ QueryDSL 장점 : Querydsl 덕분에 동적 쿼리를 매우 깔끔하게 사용할 수 있다. List result = query .select(item) ... 2023. 5. 12.
[DB] JPA ✔ JPA • CRUD + 쿼리 : 단순히 CRUD 만 하는 것이 아니고, 쿼리에 대한 부분도 어느정도 지원이 된다. • 동일한 인터페이스 : CRUD Repository (저장소) • 페이징 처리 • 메서드 이름으로 쿼리 생성 • 스프링 MVC 에서 id 값만 넘겨도 도메인 클래스로 바인딩 ✔ JPA 의 기능 ➕ Spring Data JPA public interface MemberRepository extends JpaRepository { // 실제 아무것도 없음 } 위의 MemberRepository가 Spring Data가 제공하는 JpaRepository만 상속받으면 • S save(S entity) • void delete(ID id) • Optional findById(ID id) • It.. 2023. 5. 12.
반응형