728x90 반응형 프로그램/스프링27 java.security.NoSuchProviderException: no such provider: BC 에러 위와 같은 자바 시큐리티 에러가 발생한 경우 자바 경로에 가서 관리자권한으로 보안 관련 설정을 추가 하고 프로그램을 재 실행 하면 에러가 사라진다. jdk8 버전인 경우에는 jdk1.8.0_162\jre\lib\security\java.security 파일을 연다 security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider 2024. 2. 2. jsp 멀티 첨부파일 생성& 삭제 제이쿼리 & jsp 화면에서 멀티 첨부파일 등록 및 다운로드 스프링 연동 jsp 파일에서 첨부파일 선택 하는 부분입니다. 문의하기 제목 내용 문의 내용을 최대한 상세히 적어 주세요 첨부파일 파일선택 문의등록 자바 소스 /* * Controller.java * */ @RequestMapping(value="/saveNotice.json", method=RequestMethod.POST) @ResponseBody public Map saveNotice( HttpServletRequest request, @RequestPart(value = "key") Map param, @RequestPart(value = "file",required = false) List fileList) throws Exception.. 2023. 6. 29. 스프링부트 메이븐 컴파일 mvn clean package java -jar -Dspring.profiles.active=local ./addrLaLoBatch-0.0.1-SNAPSHOT.jar --job.name=jdbcPostgresPagingItemReaderJob baseDate=2022-10-25 스프링 부트에서 실행 : ./mvnw.cmd spring-boot:run Clean 후 패키지 생성 ./mvnw.cmd clean package ./mvnw.cmd clean install /* mvn 기동시 profiles 설정 cmd창에서 실행할때 powershell에서는 안먹힘 */ mvn spring-boot:run -Dspring-boot.run.profiles=프로파일명 mvn spring-boot:run -Dspri.. 2023. 5. 10. 스프링 대용량 멀티 배치_스케줄 여러개 배치를 실행할때 스케줄을 여러개 등록하기 위해서는 job 객체를 이름을 지정해서 생성하여 Qualifier로 객체를 주입하여 스케줄을 여러개 생성해서 기동한다. 스케줄 시간설정은 환경설정 파일을 이용하여 셋팅 Scheduler.java package kr.go.naq.batch.schedulers; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.batch.core.*; import org.springframework.batch.core.launch.JobLauncher; import org.springframework.batch.core.repository.JobEx.. 2022. 8. 16. [PWA] 자바로 pwa push 알림 기능 개발하기(12) 이제 service 인터페이스를 상속받은 구현체를 작성하자 PwaPushServiceImpl.java 파일을 열자 package pwapush.service.impl; import java.io.IOException; import java.net.URLEncoder; import java.security.GeneralSecurityException; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import org.jose4j.base64url.Base64; import org.jose4j.json.internal.json_simple.JSONObject; import org.jose4.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(11) 3.2.5 Service interface 코딩하기 package pwapush.service; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.List; import java.util.Map; import java.util.concurrent.ExecutionException; import org.jose4j.lang.JoseException; import pwapush.model.UserSubscriInfo; public interface PwaPushService { /* push 알림 메세지 전송 부분을 선언한다. */ void sendMessage(Map messageMap, Li.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(10) 3.2.4 Controller 코딩하기 Controller파일 부터 작성하자. PwaPushController.java 열어서 아래와 같이 코딩한다. 주석으로 설명을 대신하겠다. @Controller //controller 파일이라고 정의해 주는 애노테이션이다. public class PwaPushController { //로깅을 찍기 위해서 선언해 준다. private Logger logger = LoggerFactory.getLogger(PwaPushController.class); //서비스가 기동시 생성된 객체를 주입하여 사용할수 있게 해준다. @Resource(name = "pwaPushService") private PwaPushService pwaPushService; //jpa 생성자를 주.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(9) 3.2.3 MVC 패턴 클래스 파일 만들기 Mvc 패턴에 맞게 Controller를 만들자. 만드는 순서는 Controller를 만들고, 서비스 인터페이스를 만들고, 서비스 인터페이스를 상속받은 구현체를 만들고, 데이터베이스와 통신을 할수 있게 JpaRepository 상속받은 인터페이스를 만들어서 데이터베이스에 push알림 구독정보를 저장하여 관리 할수 있게 만들것이다. 이번에는 패키지와 클래스 파일을 동시에 같이 만들어 보자. 위에서는 패키지 따로 파일 따로 만들어 보았는데 같이 만들어도 된다. pwapush 패키지명에 마우스 오른쪽 버튼을 클릭하여 New->Class를 선택 Package 입력부분에 pwapush만 입력이 되어 있을텐데 여기 뒤에다가 pwapush.controller을 입력하자. N.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(8) 모델 패키지를 만들자 pwapush위치에 가서 마우스 오른쪽 버튼을 클릭하여 New->Package 를 클릭하여 창이 뜨면 Name에 pwapush.model을 입력하고 Finish버튼을 클릭한다. 생성된 패키지 폴더에 가서 마우스 오른쪽 버튼을 클릭하여 New->Class 선택하여 UserSubscriInfo.java 로 Class 파일을 만든다. UserSubscriInfo.java 파일에 아래의 내용을 입력한다. package pwapush.model; import java.sql.Timestamp; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; impor.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(7) 3.2.2 모델 만들기 데이터 베이스 연동하여 데이터를 주고 받을수 있는 모델을 만들자 Entity라고 하는데 DB에 테이블이라고 보면 된다. 자바에서는 ORM (Object Relational Mapping) 이다. ORM에 대해서는 간단하게 개념만 알고 넘어가자. ORM이란? ORM은 Object Relational Mapping 즉, 객체-관계 매핑의 줄임말이다. 객체-관계 매핑을 풀어서 설명하자면 우리가 OOP(Object Oriented Programming)에서 쓰이는 객체라는 개념을 구현한 클래스와 RDB(Relational DataBase)에서 쓰이는 데이터인 테이블 자동으로 매핑(연결)하는 것을 의미한다. 그러나 클래스와 테이블은 서로가 기존부터 호환가능성을 두고 만들어진 것이 아니기 때.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(6) 3.2 자바 패키지 파일 생성 3.2.1 자바 환경설정 파일 만들기 src/main/java 밑에 pwapush에 가서 마우스 오른쪽 버튼을 클릭하여 Package 선택 Name에 pwapush.config 입력후 Finish 버튼을 클릭하여 패키지 를 생성한다. 생성된 패키지 에서 마우스 오른쪽 버튼을 클릭하여 New->Class 를 클릭하여 WebConfig.java 파일을 생성하자 WebConfig.java 파일은 환경설정 파일로 서버가 기동될때 최초로 메모리에 환경설정을 로딩하는 기능을 처리한다. WebMvcConfigure을 상속 받아서 json형식을 데이터를 사용하겠다고 설정하는 부분이다. 소스를 붙여 넣는다. package pwapush.config; import org.springframe.. 2021. 8. 3. [PWA] 자바로 pwa push 알림 기능 개발하기(5) resource폴더에 pwa.properties 파일을 생성후에 publicKey = BNzzfdcBcThU27FcGve6F3GF6He2Fro82ZMuOLga9fukatLMlaKB6GdO-82loi6W4iGdPQZAp_4HLgST8z5of_E privateKey = yzZ8xvvhiM50HlTsDLCwiofkCyOypb-ZTkqdvpwyz7c publicKey와 privateKey를 입력한다. 이키는 pwa에서 push 알림을 보낼때 사용되는 공개키와 비밀키이다. 키는 이 프로젝트가 끝날때즘 새로운 키를 생성해야 한다. privateKey는 공개 되어서는 안되는 키이다. 제대로 따라 했다면 resource 폴더가 위와 같은 그림이 되어야 한다. build.gradle 파일을 열어서 push 기능을 만들기.. 2021. 8. 2. [PWA] 자바로 pwa push 알림 기능 개발하기(4) resource폴더 밑에 logback-local.properties 파일을 하나 생성한다. 로그파일이 저장되는 경로를 설정한다. log.config.path=/logs/local /* 로그파일 저장경로 */ log.config.filename=local_log /* 로그파일 이름 */ resource 폴더에 logback-spring.xml 파일을 생성한다.logback-local.properties 파일에 위의 내용을 입력한다. 아래의 내용을 붙여 넣는다. ${LOG_PATTERN} ${LOG_PATH}/${LOG_FILE_NAME}.log ${LOG_PATTERN} ${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log 10MB 30 error ACCEPT DEN.. 2021. 8. 2. [PWA] 자바로 pwa push 알림 기능 개발하기(3) src/main/resources 밑에 application.properties 파일을 yaml 형식으로 확장자를 변경한다. application.yaml로 yaml 파일은 입력할때 형식이 있다. 자릿수를 꼭 맞추어 주어야 에러가 없다.계층적으로 입력할때 2자리 스페이스를 입력후 입력을 해야 한다.yaml 형식이나 properties 에 입력하나 사용 방법은 동일한데 yaml 파일을 사용하면 중복 입력을 안해도 된다. 예를 들어 properties 파일에 다음과 같이 db접속 환경을 입력한다고 하면 이렇게 입력을 해야 한다. datasource.driver-class-name=org.h2.Driver datasource.url = jdbc:h2:mem:pwadb datasource.username = s.. 2021. 8. 2. [PWA] 자바로 pwa push 알림 기능 개발하기(2) 3장 스프링부트 프로젝트 생성 3.1 push 알리미 기능 프로젝트 생성 spring부트 실행하여 File -> New -> Spring Starter Project 위와 같이 입력후 Next DB는 테스트 하기 좋은 H2 메모리 DB를 선택 Spring Web, Lombok, 웹페이지는 Thymeleaf선택 JPA를 사용할꺼라서 Spring Data JPA 선택 Spring Boot DevTools는 개발할때 소스에 변경 사항이 있을경우 자동 재기동을 시켜주는 편리한 기능이 있어서 선택 하여 준다. Finish를 눌러 준다. 2021. 8. 2. [PWA] 자바로 pwa push 알림 기능 개발하기(1) 2장 개발환경 셋팅 2.1 개발툴 설치 자바1.8버전, 스프링부트 준비 2.1.1 스프링부트설치 https://spring.io/tools 사이트에 들어가서 해당 운영체제에 맞는 버전을 다운로드 받아서 압축을 풀어 줍니다. 압축을 푸실때 압축푸는 경로명이 길경우에는 압축풀다가 오류가 발생하면서 안 풀리는 경우가 가끔 있습니다. 이런경우에는 반디집을 설치하여 압축을 풀면 정상적으로 풀립니다. 2.1.2 자바 설치 https://www.oracle.com/kr/java/technologies/javase-downloads.html 사이트에 들어가서 자바1.8버전을 다운받습니다. 이 책의 예제는 자바 1.8기준으로 작성하였습니다. 다운 받아서 설치 해 주시기 바랍니다. 2021. 8. 2. java.security.NoSuchProviderException: no such provider: BC 에러 발생시 DEBUG 21-07-31 09:48:36[http-nio-8081-exec-1] [PwaPushController:190] - /push/keyGenerater.do 호출 java.security.NoSuchProviderException: no such provider: BC at sun.security.jca.GetInstance.getService(GetInstance.java:83) at sun.security.jca.GetInstance.getInstance(GetInstance.java:206) at java.security.KeyPairGenerator.getInstance(KeyPairGenerator.java:279) at nl.martijndwars.webpush.cli.handler.. 2021. 7. 31. 모델5 @Embeddable @Embeddable 애노테이션을 지정한 클래스를 밸류 클래스라고 합니다. 밸류 클래스란 int, double 처럼 하나의 값을 나타내는 클래스를 말합니다. 보통 주소(address)라는 값을 저장하기 위해서는 아래와 같이 String 변수에 저장하여 관리할 것입니다. package com.example.model.entity; import lombok.Getter; import lombok.Setter; import lombok.ToString; import javax.persistence.Embeddable; import java.util.Objects; @Embeddable @Setter @Getter @ToString public class Address { private String city; .. 2021. 6. 22. 모델4 공통 상속 package com.example.model.entity.item; import com.example.model.entity.Category; import lombok.Getter; import lombok.Setter; import lombok.ToString; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Entity @Getter @Setter @ToString(exclude = {"categories"}) @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "DTYPE") public abstract cla.. 2021. 6. 22. 모델3 연관관계 package com.example.model.entity; import lombok.Getter; import lombok.Setter; import lombok.ToString; import javax.persistence.*; import java.util.ArrayList; import java.util.List; @Getter @Setter @ToString(exclude = {"items","parent","child"}) @Entity public class Category { @Id @GeneratedValue @Column(name ="CATEGORY_ID") private Long id; private String name; @ManyToMany @JoinTable(name= "CATE.. 2021. 6. 22. 이전 1 2 다음 728x90 반응형