본문 바로가기

SpringBoot23

aws 인스턴스 서버에 [처음]Spring Boot jar를 올린다면 알아야할 주의 사항

스프링부트 애플리케이션을 prod.properties로 docker 이미지로 빌드하고, aws-lightsail에 docker 이미지를 올려서 컨테이너를 실행해서 앱을 서비스하는 작업을 끝냈습니다. 실제로 제가 서버에 올리는 작업을 하면서 만든 구성도입니다. 이대로 작업했습니다. IDE에서는 잘 동작했던 앱이 패키징한 jar로 실행하니 많은 문제가 발생했습니다. 실무에서 이런 일이 터졌다면, 정말.. 상상도 하기 싫습니다. 이번 포스팅에서는 이번 작업을 수행하면서 발생한 문제와 해결방법들을 얘기해보려고 합니다. 제가 마주한 문제는 다섯 가지였습니다. 1. spring boot application-prod.properties로 설정해서 어떻게 앱을 jar패키징하고 도커에 빌드해서 서버에 올릴 것인지 [해.. 2020. 10. 16.

Spring Boot에서 HttpMethod delete 사용할 때 주의할 점.

Http Method중 하나인 delete요청을 처리하는 기능을 추가하면서 다음과 같은 에러가 발생했습니다. There was an unexpected error (type=Method Not Allowed, status=405). Request method 'POST' not supported org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported HttpMethod에는 GET, POST, PUT, DELETE가 있습니다. Spring Boot에서 PUT과 DELETE요청을 어노테이션인 @DeleteMapping이나 @PutMapping을 사용할 경우는 application.pro.. 2020. 10. 11.

JPA로 객체를 가져올 때 LazyLoading을 만난 썰

안녕하세요. 저는 단위테스트를 작성하고 있었습니다. 양방향 관계를 가지는 주인 객체에서 종속 객체의 데이터가 들어가 있는지 확인하는 과정에서 테스트코드가 통과되지 않는 현상이 발생해서 이 부분을 공부를 해보려고 합니다. 저의 개발 환경은 다음과 같았습니다. spring-boot-starter-web:2.3.1 spring-boot-starter-data-jpa:2.3.1 spring-boot-postgresql:42.2.14 junit:junit:4.13 에러 내용 org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.studyolle.domain.Event.enrollments, co.. 2020. 9. 27.

LazyLoading의 value를 단위테스트에서 확인하는 방법

저의 개발 환경은 다음과 같습니다. spring-boot-starter-web:2.3.1 spring-boot-starter-data-jpa:2.3.1 spring-boot-postgresql:42.2.14 junit:junit:4.13 안녕하세요. 테스트 코드를 작성하면서 다음과 같은 hibernate 예외를 만났습니다. unable to evaluate the expression Method threw 'org.hibernate.LazyInitializationException' exception 테스트 코드의 작성 내용은 다음과 같습니다. 1. 사용 객체 Event(모임) @OneToMany(mappedBy = "event") Enrollment(모임에 등록한 멤버의 등록 정보 객체) @ManyTo.. 2020. 9. 26.

다대다관계에서 ORM하는 법

안녕하세요. 저는 현재 Springboot와 jpa를 사용해서 '동물원'이라는 웹 앱을 개발하고 있습니다. 동물원 웹 앱을 만드는 과정에서 다음과 같은 에러를 만나게 되었습니다. 에러메시지 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'accountRepository' defined in com.zoo.account.AccountRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Cannot resolve reference to bean .. 2020. 9. 11.

JUnit5에서 의존성 주입은 @Autowired로 해야하는 이유

의존성을 주입받는 방식에는 4가지의 방법이 일반적으로 알려져 있습니다. 1. 생성자를 통해서 의존성을 주입 2. 필드를 통해서 의존성을 주입 3. setter를 통해서 의존성을 주입 4. lombok의 @RequiredArgsConstructor로 final이나 @NonNull의 필드를 의존성 주입 저는 주로 lombok의 @RequiredArgsConstructor를 통해서 final타입의 필드를 통해서 의존성을 주입받는 방법을 사용하고 있었습니다. 그런데, JUnit5으로 단위테스트를 작성하면서 lombok의 방식으로 DI를 시도했으나 의존성 주입에서 에러가 발생했습니다. 생성자를 통해서 DI하는 것도 에러가 발생했습니다. 자세히 상황을 말하자면, MockMvc를 주입받으려고 하자 에러가 발생했습니다.. 2020. 9. 10.

import와 의존성 주입은 다른가?

안녕하세요. 웹 앱을 따라 만드는 강의를 들으면서(저도 이런 생각이 드는 걸 보면... 아주 심각하게 모르는가 봅니다..) import로도 다른 패키지의 클래스를 가져다 사용하면서... 왜 동일하게 기능을 하는 의존성 주입을 사용하는 걸까요? import도 의존성 주입이 아닌가요??????? 일단, 저는 지금까지 import가 정확히 어떤 의미를 가지고 어떤 역할을 하는지 알지 못했습니다. 그 개념부터 알아보겠습니다. 저는 집에 있는 자바의 정석 책을 통해서 알아보았습니다. import문의 역할은 컴파일러에게 소스파일에 사용된 클래스의 패키지에 대한 정보를 제공하는 것이다. 컴파일 시에 컴파일러는 import문을 통해 소스파일에 사용된 클래스들의 패키지를 알아낸 다음, 모든 클래스이름 앞에 패키지명을 붙.. 2020. 8. 23.

단위테스트에서 여러 properties 중 한 개만 지정하기

안녕하세요. 지금까지 인강을 통해서 만들어온 프로젝트를 복습할 겸, 이것저것 소스도 둘러보고, 웹앱도 잘 동작하는지 테스트도 하고, 그리고 단위 테스트도 전부 돌려보는 시간을 가졌습니다. 그런데... 단위 테스트에 엄청난 오류가 발생하고 있었습니다. 에러 메시지 java.lang.IllegalStateException: Unable to create SecurityContext using @com.studyolle.WithAccount(value="devkis") Caused by: org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint ["PUBLIC.UK_Q0UJA.. 2020. 8. 22.

단위테스트에서 FK관계에서 발생한 DataIntegrityViolationException 에러

안녕하세요. 단위테스트에서 또 오류가 발생해서 해결방법을 공유해보고자 합니다. 이번 오류는 정말 중요한 개념이 있는 오류였습니다.. 이 개념을 혼자 공부할 때 알게된 걸 천만다행으로 생각합니다. 에러 원인은 Foreign Key로 다른 테이블로부터 참조를 당하고 있는 계정 테이블의 데이터를 삭제하려고 하니 발생하는 문제였습니다. 사용 중인 기술 스택 스프링부트 JUnit5 인메모리 디비(h2) Spring data JPA 에러가 발생하는 단위테스트 클래스에서는 멤버 메서드가 실행될 때마다, 매번 계정을 새로 인메모리 디비에 저장하고 로그인이 된 상태로 맴보 메서드가 수행이 되고, 메서드 동작이 종료되면 @AfterEach 메서드로 계정정보를 날리도록 만들어져 있습니다. 여기서 문제가 발생하는 부분은 메서.. 2020. 8. 20.

properties 두 개 설정하기

안녕하세요. 이번 글에서는 인텔리제이에서 스프링부트의 두 가지의 properties가 동작하도록 하는 설정 방법을 알아보겠습니다. 저는 스프링부트를 사용하고 있고 얼마 전, 프로젝트가 실행되면 인메모리 디비도 사용하고 postgreSQL도 사용되도록 application.properties와 application-dev.properties를 두 개 만들어서 앱이 실행될 때, 두 properties가 각각 동작하도록 설정했습니다. application.properties application-dev.properties - 인메모리 디비를 사용하고, - spring.jpa.hibernate.ddl-auto=create-drop 로 설정하였습니다. - 프로젝트가 생성될 때 스키마가 생성되고, 그 테이블에 데이.. 2020. 8. 14.