swimminginthecode DIVE!

BACK/Spring 19

AES를 사용하여 url 암호화 구현해 보기

이전에는 Hmac을 사용해서 암호화를 구현해 보았는데,암호화된 링크를 복호화하여 정보를 가져와야 했기 때문에복호화가 불가능(단방향 암호화)한 Hmac은 적절하지 않다는 판단이 들었다. 이전 구현 게시글 보러 가기 예를 들" data-og-host="dazz6study.tistory.com" data-og-source-url="https://dazz6study.tistory.com/86" data-og-url="https://dazz6study.tistory.com/86" data-og-image="https://blog.kakaocdn.net/dna/U4WvF/hyXGJ0NMo9/AAAAAAAAAAAAAAAAAAAAAOHTQrDSpJu2b4BTTx1lK6FSSVy2ixjI9NN-hsN2Gfiy/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1753973999&allow_ip=&allow_referer=&signature=tnFySNbe1y7BEIHKiJSid43EDx8%3D

BACK/Spring 2024.12.09

JPA - QueryDSL

JPA를 사용하면서 SQL 과 비슷한듯 다른 JPQL Query가 제일 어려웠다...웬만하면 이름 규칙으로 해결하면서 작업했지만... 쿼리를 코드로 작성할 수 있다고 해서 적용해 보았다. 굳이 JavaScript에서 TypeScript를 사용해서 작은 실수들을 잡아 주는 것처럼컴파일 시점에 오류를 잡을 수 있기 때문에 일석이조!implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"annotationProcessor "jakarta.annotation:jakarta.annotation-api"annotationProcessor "jakarta.persi..

BACK/Spring 2024.12.05

SpringBoot 환경에서 ChatGpt API 사용해 보기 - Spring AI

지난 포스팅에서는 전통적인 방법(?)으로 통신하였는데, Spring AI라는 간편한 라이브러리가 있다. 지난 포스팅 보러 가기 SpringBoot 환경에서 ChatGpt API 사용해 보기지난 프로젝트에서 외부 API 중 카카오 로그인과 네이버 로그인을 적용해 봤는데,요즈음 ChatGpt를 적용하여 글이나 사진을 생성하여 제공하는 플랫폼이 많이 보여 구현해 보기로 했다. 외부와 통dazz6study.tistory.com 일단 의존성을 주입해 준다.implementation 'org.springframework.ai:spring-ai-openai-spring-boot-starter'@Autowired private OpenAiChatModel openAiChatModel;OpenAiChatModel ..

BACK/Spring 2024.12.04

Hmac를 사용하여 url 암호화 구현해 보기

링크를 공유할 때 단순히 링크를 공유하게 되면 보안에 문제*가 있다고 하여, Hmac을 사용해 url 암호화를 구현해 보았다.  * 링크를 단순히 공유할 경우의 보안 문제1. 링크 탈취 가능성-> 예를 들어, 사용자 아이디나 세션 정보가 포함된 url이 노출될 경우 악용하여 다른 사용자의 데이터를 조작할 수 있음2. Replay 공격-> 링크를 통해 인증 등의 작업이 수행될 경우, 동일한 링크를 재사용하여 원치않는 작업을 반복 실행할 수 있음3. URL 변조->  파라미터를 조작하여 허가되지 않은 데이터를 요청할 수 있음 HMAC은 key와 message를 조합해서 고정된 크기의 해시 값을 생성하는 방식으로, 데이터의 무결성을 확인하고 인증을 보장하기 위해 사용된다. @Value("${komawatsir..

BACK/Spring 2024.11.25

SpringBoot 환경에서 ChatGpt API 사용해 보기

지난 프로젝트에서 외부 API 중 카카오 로그인과 네이버 로그인을 적용해 봤는데,요즈음 ChatGpt를 적용하여 글이나 사진을 생성하여 제공하는 플랫폼이 많이 보여 구현해 보기로 했다. 외부와 통신한다는 것이 어렵게 느껴질 수 있는데, 카카오/네이버 로그인에 비해서 간단하게 구현할 수 있었다.다만 다른 점은 질문하고 답변을 받을 때마다 크레딧이 차감된다.새로 계정을 생성하면 3개월 동안 쓸 수 있는 크레딧을 준다는데, 가입한 지 3개월이 훌쩍 지난 아이디라 새로 5달러를 충전했다.하나를 질문하고 답변받는 데 평균적으로 0.01달러 미만이 차감되는 것 같다. 공식 문서https://platform.openai.com/docs/api-reference/introduction 구현 전에 OpenAI에서 API..

BACK/Spring 2024.11.22

Spring 12

URLSearchParams쿼리 스트링을 일반 문자열이 아닌 URLSearchParams를 사용하여 쉽고 안전하게 다룰 수 있다 JPA JOIN종류설명@ManyToOne다대일 @OneToMany일대다@OneToOne일대일 // Emp Entity Classpublic class Emp { @Id private Integer empno; // ... @ManyToOne @JoinColumn(name = "deptno", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT)) private Dept dept;}// Dept Entity Classpublic class Dept { @Id private Integer de..

BACK/Spring 2024.08.09

Spring 11

h2 사용 insert 오류@Entity 클래스에서 변수 타입 기본형 금지!-> 변수 타입을 기본형으로 설정할 경우 기본적으로 not null 속성이 추가된다.Model 생명주기 Model 객체 : Controller에서 생성된 데이터를 담아 View로 전달할 때 사용하는 객체과정설명HTTP 파라미터HTTP 파라미터가 브라우저 등의 웹 클라이언트에서 서버로 넘어오는 단계HTTP 파라미터는 String으로 넘어오므로 서버에서 변환해 주는 작업이 필요하기 때문에, 스프링에서는 이를 PropertyEditer와 ConversionService 등의 객체를 통해 해결함이는 프로퍼티 바인딩 단계에서 수행됨모델 오브젝트 준비스프링은 Controller 객체 내 메소드에 기입된 @ModelAttribute 파라미터 ..

BACK/Spring 2024.08.05

Spring 10

JPA 메소드 네이밍 종류설명findAll()DB에서 전체 값을 List로 불러옴 findOne()PK로 값을 한 건 조회findByXX()Entity로 검색 OrderBy검색결과를 정렬하여 전달Asc : 오름차순 / Desc : 내림차순벌크 연산여러 건 (대량의 데이터)을 한 번에 수정하거나 삭제하는 방법 → 벌크 연산은 영속성 컨텍스트와 2차 캐시를 무시하고 데이터베이스에 직접 쿼리 → 조회 후 벌크 연산을 수행할 경우, 영속성 컨텍스트에 있는 값과 데이터베이스에 있는 값이 다를 수 있음→ em.refresh()를 사용하거나, 벌크 연산을 먼저 실행 혹은 벌크 연산 수행 후 영속성 컨텍스를 초기화하는 방법으로 해결  참고 [JPA] 벌크 연산이란? (tistory.com) [Spring] JPA R..

BACK/Spring 2024.08.01

Spring 09

CrudRepositoryJPA와 Spring Data의 기본적인 데이터 접근 작업을 쉽게 사용할 수 있게 해 준다 메소드설명save(S entity)엔티티 저장 혹은 업데이트findById(ID id)ID로 엔티티 조회findAll()모든 엔티티 조회count()전체 엔티티 수 반환deleteById(Id id)ID로 엔티티 삭제delete(T entity)주어진 엔티티 삭제deleteAll()모든 엔티티 삭제 CrudRepository 인터페이스에 대한 추상 메소드를 재정의하지 않아도 결과가 나오는 이유→  스프링 데이터 JPA는 이 인터페이스를 동적으로 구현하는 메커니즘을 제공한다. 이는 스프링 데이터 JPA의 리포지토리 구현체가 자동으로 생성되게 하고, 리포지토리 인터페이스를 자동으로 구현하는 프..

BACK/Spring 2024.07.29

Spring 08

@RequestMapping클라이언트가 요청(url)에 맞는 클래스나 메소드를 연결해 주는 어노테이션 · 요청 방식별로 제공되는 어노테이션에는 @GetMapping, @PostMapping이 있음 @RestController 와 @Controller종류정의@RestControllerJSON 형태의 객체 데이터 반환 @ControllerView 반환, Data 반환 ThymeleafJSP, Freemarker와 같은 템플릿 엔진의 일종 특징설명서버 사이드 HTML 렌더링 (SSR)백엔드 서버에서 HTML을 동적으로 렌더링하는 용도 네츄럴 템플릿*순수 HTML을 최대한 유지하기 때문에, 타임리프로 작성한 파일은 HTML을 유지해서 웹 브라우저에서 파일을 직접 열어도 내용을 확인할 수 있으며 서버를 통해 뷰 ..

BACK/Spring 2024.07.24