본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ

분류 전체보기467

[Spring] 테스트에서 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 문제 해결 Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test 테스트 환경에서 테스트 중에 위 같은 에러를 확인했습니다. 테스트 경로에서 Config파일을 읽지 못 한다고 하는 것 같은데, 사실 이 에러는 @SpringBootTest 클래스가 실행중 에러가 발생하는 것입니다. @SpringBootTest가 실행되지면서 SpringBootApplication 경로를 읽지 못해서 일 수도 있고, 의존성 설정된 dataSource를 자동주입 실패했을 경우 실패할 수 있고, 컴포넌트 스캔 경로가 맞지 않아 Config 경로를 못읽어 Bean생성 실.. 2024. 3. 6.
[AWS] SpringBoot 시크릿 매니저 사용하기. 스프링 부트에서 프로퍼티 정보를 SecretManager를 활용해서 불러오는 식으로 변경 해봤습니다. 보안적인 이슈를 막기 위해서, 단단한 프로젝트를 만들려면, 프로퍼티에 있는 db정보를 암호화 하는 것도 필요합니다. 그것을 위한 방법으로 KMS나 SecretManager를 통해 외부에서 암호정보를 가져오는 전략이 있는데, 이를 프로젝트에 적용해봤습니다. 필요한 것은 Secret Manager와 스프링 부트 프로젝트 입니다. Secret Manager를 만들고, 거기에 db의 ID와 PW 정보를 보관하고, 부트 프로젝트 실행시 시크릿 매니저에서 값을 가져와 적용시키는 방식으로 개발했습니다. - 시크릿 매니저 준비 저는 자유로운 형식의 키보관 목적이기에 "다른 유형의 보안 암호"를 선택했습니다. 보안 암호.. 2024. 3. 3.
[IntelliJ] openJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended 해결방법 OpenJDK 사용하다가 경고문구를 발견했습니다. openJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended openjdk에서 클래스 로딩 시 Class Data Sharing(CDS) 기능을 사용하면 발생합니다. 오류는 경고 메시지이며, 어플리케이션에 직접적인 영향을 주지는 않습니다. 저는openjdk-17버전을 사용중에 이런 문구를 확인했습니다. 문구를 없애려면 다음과 같은 방법이 있습니다. 1. -Xshare:off 옵션을 사용하여 CDS 비활성화 2. 클래스 로딩 전에 CDS를 직접 사용하여 미리 클래스 정보 공유파일을 생성하.. 2024. 3. 3.
[Spring] SpEL, Value로 어노테이션에 값 전달하기 https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/expressions.html 8. Spring Expression Language (SpEL) This section introduces the simple use of SpEL interfaces and its expression language. The complete language reference can be found in the section Language Reference. The following code introduces the SpEL API to evaluate the literal string expression 'Hel docs.. 2024. 2. 27.
[Spring] 어노테이션 정리 스프링 어노테이션 정리, 최신화를 주기적으로 할 예정입니다. 스프링 어노테이션 @EventListener(ApplicationReadyEvent.class) 스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트이다. 스프링이 이 시점에 해당 애노테이션이 붙은 initData() 메서드를 호출해준다. @Profile("local") 특정 프로필의 경우에만 해당 스프링 빈을 등록한다. 여기서는 local 이라는 이름의 프로필이 사용되는 경우에만 testDataInit 이라는 스프링 빈을 등록한다. 이 빈은 앞서 본 것인데, 편의상 초기 데이터를 만들어서 저장하는 빈이다. 프로파일 별로 jar빌드도 가능하며 설정도 가능하다. @Configuration Bean을 수동으로 등록해.. 2024. 2. 27.
[Java] Stream filter 예시 filter는 자주 사용하는 기능 중 하나입니다. 간단한 예시를 통해 이해해봅시다. 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 // Stream Filter 필터 예제 public class FilterEx { public static void main(String[] args) { List names = Arrays.asList("가가", "나나", "다다", "나나", "라라"); names.stream() .filter(n -> n.startsWith("가")) .forEach(n -> System.out.println(n)); // 가로 시작된것만 가져오기 System.out.println("-----"); na.. 2024. 2. 26.
[Postgre] AutoCommit 테스트해보기 Postgre에서 AutoCommit 기본설정은 true로 되어 있습니다. 목차 AutoCommit 기본상태 확인 AutoCommit 상태 변경 Rollback 테스트 Commit 전에 Insert 후 다른 세션에서 조회 pgAdmin 에서 AutoCommit 설정하기 즉, 쿼리 실행시 자동으로 Commit을 수행해주는 것을 의미합니다. psql에서 AutoCommit을 해제할 수 있습니다. $ \set AUTOCOMMIT off // AutoCommit 끄기 $ \set AUTOCOMMIT on // AutoCommit 켜기 $ \echo :AUTOCOMMIT // AutoCommit 상태 확인 먼저 psql에 로그인해봅니다. 1. AutoCommit 기본상태 확인 $ \echo :AUTOCOMMIT .. 2024. 2. 23.
[HTML] 파일 전송 방법 이해 HTML로 파일을 전송하려면 파일 업로드 기능을 이용해야 합니다. 여기서 전송이란 브라우저에서 다른 서버나 다른 클라이언트로 파일을 보내는 것을 의미합니다. 그러려면 파일을 웹 브라우저를 통해 보내야 합니다. 대표적인 방법으로 form 태그를 이용한 방법이 있겠습니다. 여기서 파일이란 이미지, 음악, 문서 같은 실제 파일을 의미하며 이름, 내용 같은 문자가 아닙니다. 파일을 전송하려면 바이너리 데이터로 변환 후 전송해야 하는데, 이때 HTTP 메시지 헤더를 보면 차이가 있습니다. 일반적인 문자 데이터 전송 Content-Type : application/x-www-form-urlencoded 파일 전송 Content-Type : multipart/form-data multipart/form-data 형식.. 2024. 2. 22.
개발에서 도메인이란 무엇일까? 도메인이 무엇일까요? 저도 확실하게 정의하긴 어렵습니다. 개발 영역 보다는 비즈니스적인 영역을 칭하는 부분으로 이해하고 있습니다. 정리하자면, 핵심 비즈니스 업무 영역을 말합니다. 도메인 = 화면, UI, 기술 인프라 등등의 영역을 제외한 시스템이 구현해야 하는 핵심 비즈니스 업무 영역을 말합니다. 도메인 지식을 기반으로 시스템이나 서비스를 구현하고 변수나 메소드명, db컬럼명 까지 정의하기도 합니다. 즉 사업적인 영역에서 업무이해를 하려면, 도메인 지식을 잘 알아야 합니다. 이는 개발영역과 더불어 업무를 수행하는데 중요한 요소로 파악되지만, 개발자가 이런 부분을 다 이해해야 하는걸까요? 이는 상황에 따라 다를 수 있습니다. 물론 이해하면 좋겠지만 개발적인 부분에서 도메인 지식을 잘 이해하고 개발하는 것.. 2024. 2. 21.
[Spring] No JSR-223 scripting engine could be bootstrapped for language "javascript" 오류 해결 No JSR-223 scripting engine could be bootstrapped for language "javascript" 강의를 듣던 중 Validation 처리를 위해 @ScriptAssert 를 사용하는데 위처럼 오류가 나타났습니다. validation annotation 중 @ScriptAssert 은 Java Scripting API의 스크립팅 언어를 지원해주는 기능을 사용합니다. JDK11부터 Nashorn script API가 Deprecated되었고, JDK 15부터는 Removed되었습니다. JDK8 ~ JDK14 = NashornVM 저는 JDK17환경에서 개발중이다보니 버전이 맞지 않아 에러가 발생한 것입니다. JDK 15부터는 Nashorn engine 대신 graalv.. 2024. 2. 20.
[Spring] 하이버네이트 Validator, Bean Validation 빈 벨리데이션이란? Bean Validation? 검증 로직을 표준화하여 모든 프로젝트에 적용할 수 있는 기술을 말합니다. Bean Validation을 잘 활용하면, 애노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있습니다. Bean Validation은 특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준입니다. 쉽게 이야기 해서 검증 애노테이션과 여러 인터페이스의 모음입니다. 마치 JPA가 표준 기술이고 그 구현체로 하이버네이트가 있는것 처럼 Bean Validation을 구현한 기술중에 일반적으로 사용하는 구현체는 하이버네이트 Validator입니다. 이름이 하이버네이트가 붙어서 그렇지 ORM과는 관련이 없습니다. 하이버네이트에 대해서는 별도로 정리하고, 하이버네이트 Va.. 2024. 2. 20.
[Spring] BindingResult 검증도구 스프링이 제공하는 검증 오류를 보관하는 객체입니다. 컨트롤러에서 파라미터로 선언시키며, 검증 오류가 발생하면 여기에 보관하면 view로 전달 가능합니다. BindingResult.addError(에러객체) 에러객체 : 에러라고 판단할 정보를 담은 객체이며 ObjectError , FieldError 가 사용됩니다. 사용자가 원하는 오류 코드와, 오류 메시지를 만들고 message.properties 또는 별도의 프로퍼티를 만들어 저장 한 뒤 특정한 상황이 되면 BindingResult 에서 에러를 불러와서 출력시키기 위해 사용합니다. 이는 특정 상황에서 어떤 오류가 발생했는지 표준화를 시키기 위해, 그리고 원하는 조건에 부합하지 않을 경우 즉, 검증되지 않은 특정한 상황에서, 커스텀 에러를 내고싶을 때 .. 2024. 2. 20.