Spring boot 썸네일형 리스트형 iOS In-App Purchase 서버 검증 구현하기 (JWS 방식) 운영 중인 사이드 프로젝트에서 결제 기능을 개발하게 되었습니다. 2024년 이후 Apple의 영수증 검증 방식이 변경되었는데, 관련 한글 자료가 많지 않아 정리해봅니다. Apple 영수증 검증 방식의 변화 Apple은 2024년부터 기존 verifyReceipt API를 Deprecated 처리하고, JWS(JSON Web Signature) 기반 영수증 검증으로 전환했습니다. 기존 방식 (Deprecated) 클라이언트 → 서버 → Apple verifyReceipt API → 응답 Base64 인코딩된 영수증을 Apple 서버로 전송하고, Apple이 검증 후 JSON 응답을 반환하는 방식이었습니다. 문.. 더보기 @Valid 로 DTO 검증 🤔 검증이 필요한 이유 ?! 컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 클라이언트 검증은 조작이 가능하기 때문에 보안에 취약하다. 서버에서도 잘못된 요청을 검증하는 로직을 필요로 한다. Bean Validation 특정한 구현체가 아니라 Bean Validation 2.x 기술 표준이다. 검증 어노테이션과 여러 인터페이스의 모음이다. Bean Validation을 잘 활용하면 어노테이션 하나로 검증 로직을 편리하게 적용할 수 있다. //build.gradle implementation 'org.springframework.boot:spring-boot-starter-validation' @AssertFalse : false 값 통과 @AssertTrue : true 값 .. 더보기 [ JPA ] Eager, Lazy Fetching Spring Data JPA에 @ManyToOne(N:1)으로 연관관계가 설정되어 있는 2개의 Entity가 존재할 때, 데이터베이스 입장에서 보면 Join이 필요하다. 2023.11.29 - [Database] - [데이터베이스] Join [데이터베이스] Join 데이터베이스에서 Join은 서로 다른 테이블들을 연결하여 하나의 테이블로 결과를 보여주는 중요한 작업이다. 우선 MySQL로 데이터베이스 테이블과 샘플 데이터를 설정해보자. -- employees CREATE TABLE hocci-0222.tistory.com 💡 @ManyToOne의 경우 외래키 쪽의 엔티티를 가져올 때 기본키 쪽의 엔티티도 같이 가져오게 되는데, 실무에서는 서비스의 규모가 대부분 크기 때문에 연관된 데이터를 한번에 가져오는.. 더보기 [ Spring ] @Bean 🤔 Spring Bean 이 뭘까?? ➡️ 스프링 IoC 컨테이너에 등록된 자바 객채이다. ➡️ Java Bean과는 다르다. ➡️ IoC 컨테이너에 등록하는 방법으로는 아래와 같은 방법이 있다. 클래스 레벨 어노테이션 설정 @Component public class MyBean { .... Configuration 정의 @Configuration public class MyConfig { ... @Bean public MyBean() { return new MyBean(); } ... XML 파일 설정 ... 👨💻 @Bean 어노테이션은 뭘까?? 스프링 프레임워크에서 특정 메소드가 스프링 컨터이너에 의해 관리되는 Bean을 생성하고 구성한다는 것을 나타낸다. 이를 통해 개발자는 자바 메소드를 사용하여.. 더보기 회원 가입 기능 구현하기 각각의 멤버는 일반 유저인지, 아니면 관리자인지 구분할 수 있는 역할(Role)이 있어야 한다. package com.dong.constant; public enum Role { USER, ADMIN } package com.dong.dto; public class MemberFormDto { private String name; ........ } package com.dong.entity; @Entity @Table(name="member") @Getter @Setter @ToString public class Member { @Id @Column(name="member_id") @GeneratedValue(strategy = GenerationType.AUTO) private Long id; ..... 더보기 스프링 시큐리티(Spring Security) 애플리케이션을 만들기 위해서는 보통 인증/인가 등의 보안이 필요하다. 스프링 시큐리티는 스프링 기반의 애플리케이션을 위한 보안 솔루션을 제공한다. 인증 해당 리소스에 대해서 작업을 수행할 수 있는 주체인지 확인하는 것. 커뮤니티에서 게시판의 글을 보는 것은 로그인을 하지 않아도 되지만, 댓글을 작성하려면 로그인을 해야한다. 댓글을 달기 위해서는 로그인이라는 인증 절차를 거쳐야 한다. 인가 인증 과정 이후에 일어난다. 커뮤니티를 관리하는 관리자 페이지에 접근하는 URL을 입력했을 때 해당 URL은 커뮤니티의 관리자만 접근할 수 있어야 한다. 이때 접근하는 사용자가 해당 URL에 대해서 인가된 회원인지를 검사하는 것. 의존성 주입 //security dependency org.springframework.b.. 더보기 Thymeleaf(타임리프) 가공한 데이터를 이용하여 화면을 만드는 방법. 화면을 동적으로 만들려면 템플릿 엔진을 사용해야 한다. 미리 정의된 템플릿(Template)을 만들고 동적으로 HTML 페이지를 만들어서 클라이언트에 전달하는 방식. 요청이 올 때마다 서버에서 새로운 HTML 페이지를 만들어 주기 때문에 '서버 사이드 렌더링 방식' 이라고 한다. 서버 사이드 템플릿 엔진으로는 Thymeleaf, JSP, Freemarker, Groovy, Mustache 등이 있다. 스프링에서 권장하는 Thymeleaf의 큰 장점은 'natural templates' 다. JSP의 확장자는 .JSP 서버 사이드 렌더링을 하지 않으면 정상적으로 화면 출력 결과를 볼 수 없다. Thymeleaf 문법을 포함하고 있는 html 파일을 서버 사이드.. 더보기 Spring DATA JPA @Query 간단한 쿼리를 처리할 때 쿼리 메소드를 사용하면 유용하지만 복잡한 쿼리를 다루기에는 적합하지 않음. 그럴 때 @Query 어노테이션을 이용하면 SQL과 유사한 JPQL(Java Persistence Query Language) 객체지향 쿼리 언어를 통해 복잡한 쿼리를 처리할 수 있음. public interface ItemRepository extends JpaRepository { @Query("select i from Item i where i.itemDetail like %:itemDetail% order by i.price desc") List findByItemDetail(@Param("itemDetail") String itemDetail); //@Param 어노테이션을 잉ㅇ하여 .. 더보기 이전 1 2 다음