목록Programming/Spring Boot (10)
gimmickbutreal
Java, Oracle, Spring boot 환경에서 백엔드로 구축 1. Mapper 설계 1 2 3 4 5 6 7 8 9 @Mapper public interface QrCodeMapper { /** * 아래의 매개변수를 DB에 QR코드 정보로 삽입하는 역할 * @param link * @param qrCode */ void insertQrCode(@Param("link") String link, @Param("qrCode") byte[] qrCode); } Colored by Color Scripter cs - 위 코드는 Mybatis에서 사용하는 Mapper 인터페이스 - @Mapper : 해당 애너테이션은 MyBatis가 인터페이스를 Mapper로 인식하도록 함 - @Param : 해당 애너테이..
WebHook을 사용해 결제상태를 변경할 수 있습니다. 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 // lombok 라이브러리를 사용하여 getter, setter 등의 메서드를 자동으로 생성 import lombok.Data; // Hook 클래스 선언 @Data public class Hook { // createAt: Hook 생성 시간 private String createAt; // secret: Hook 인증을 위한 secret key private String secret; // status: Hook 처리 결과 상태 (e.g., "주문완료", "주문실패" ) private String status; // ..
저는 JPA에서 가장 중요한 내용이 무엇이냐는 질문에 망설임 없이 영속성 컨텍스트라고 대답할 것입니다. 정의 JPA가 관리하는 엔티티 객체의 집합 엔티티 객체가 영속성 컨텍스트에 들어오게 되면 JPA는 엔티티 객체의 매핑 정보를 가지고 DB에 반영하게 됩니다. 이 때, 엔티티 객체는 영속성 컨텍스트 안에서 관리 대상이 되고 그 객체를 영속 객체라고 부릅니다. 엔티티 객체와 영속 객체는 다른 존재입니다. 영속성 컨텍스트는 세션 단위로 생명주기를 갖고 있습니다. 즉, 세션이 생기면서 만들어지고 세션이 종료되면 없어집니다. 비영속(new) 영속성 컨텍스트와 아무 관계도 없음(new) 영속(managed) 영속성 컨텍스트의 관리(manage)를 받는 상태 삭제(removed) 영속성 컨텍스트에서 삭제됨(remo..
타임리프에서 링크의 주소는 th:href 속성을 사용합니다. 타임리프에서 th:href처럼 URL 주소를 나타날 때에는 반드시 @{ }에서 중괄호 안에 입력해야 합니다. 제목 작성일시 그리고 URL 주소는 문자열 /question/detail/과 자바 객체인 ${question.id} 값이 조합돼 /question/detail/${question.id}로 만들어집니다. 이처럼 문자열과 자바 객체의 값을 더할 때는 반드시 | | 로 좌우를 감싸 주어야 합니다. 위처럼 좌우에 | 문자 없이 사용하면 오류가 발생하니 주의해야 합니다. 요청 URL http://localhost:8080/question/detail/2의 숫자 2처럼 2번째에 올라온 글을 나타내려고 할 때 변화하는 id 값을 얻을 때에는 위와 같..
대부분의 규모있는 Spring Boot 프로젝트에서는 컨트롤러에서 리포지터리를 직접 호출하지 않고 중간에 서비스(Service)를 두어 데이터를 처리합니다. 서비스는 Spring Boot에서 데이터 처리를 위해 작성하는 클래스인데, 서비스를 쓰는 이유는 무엇일까요? 크게 모듈화, 보안, Entity 클래스 3가지 이유가 있습니다. 모듈화 예를 들어 어떤 컨트롤러가 여러개의 리포지터리를 사용하여 데이터를 조회한 후 가공하여 리턴한다고 가정했을 때, 이러한 기능을 서비스로 만들어두면 컨트롤러에서는 해당 서비스를 호출하여 사용하면 된다. 하지만 서비스로 만들지 않고 컨트롤러에서 구현하려 하면 해당 기능을 필요로 하는 모든 컨트롤러가 동일한 기능을 중복으로 구현해야 하므로 서비스는 모듈화를 위해서 꼭 필요합니다..
@GetMapping GetMapping 애노테이션(어노테이션, Annotaion)을 쓰는 이유는 무엇일까? 1 2 3 4 5 6 7 8 9 @Controller public class homeController { @GetMapping("/") /* localhost:8080/ 요청이 들어오면 아래의 메소드를 실행하도록 하는 역할 */ public String showHome() {return "home";} } Colored by Color Scripter cs 위 코드를 보면 @Controller 애노테이션을 적어준 후 그 다음으로 @GetMapping 애노테이션을 적어주는 걸 볼 수 있다. 이는 localhost:8080/ 요청이 들어오면 아래의 메소드를 실행하도록 설정하는 역할이라고 생각하면 된..
@Controller Controller 클래스에 @Controller 애너테이션(어노테이션,Annotation)을 작성하는 이유는 무엇일까? 해당 애노테이션이 적용된 클래스가 Controller임을 나타내주면서 bean으로 등록돼 해당 클래스가 Controller로 사용됨을 Spring Boot Framework에 알려주는 역할을 합니다. 여기서 bean이란 Spring Boot 컨테이너가 관리하는 자바 객체를 의미합니다. 스프링의 특징 중 하나인 제어의 역전(IoC)가 있는데, 객체의 생성 및 제어권을 사용자가 아닌 스프링에게 맡기는 것입니다. 스프링 프레임워크를 사용하기 전에는 사용자가 new 연산을 통해 객체를 생성하고 메소드를 직접 호출해왔습니다. 하지만, 이러한 제어의 역전(IoC)가 적용된 ..
데이터베이스를 사용하려면 SQL 쿼리라는 구조화된 질의를 작성하고 실행하는 등의 복잡한 과정이 필요합니다. 이때 ORM을 이용하면 자바 문법만으로도 데이터베이스를 다룰 수 있다. 이때 ORM(object relational mapping)을 이용하면 자바 문법만으로도 데이터베이스를 다룰 수 있습니다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있습니다. JPA란? 스프링부트는 JPA(Java Persistence API)를 사용하여 데이터베이스를 처리한다. JPA는 자바 진영에서 ORM의 기술 표준으로 사용하는 인터페이스의 모음입니다. JPA는 인터페이스이며 따라서 인터페이스를 구현하는 실제 클래스가 필요합니다. JPA를 구현한 대표적인 실제 클래스에는..