문제 kafka에 메세지를 전송하려고 할때 다음과 같이 에러가 발생하며 메시지 전송을 실패한다. org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.cloud.stream.binder.kafka.KafkaMessageChannelBinder$ProducerConfigurationMessageHandler@5283b1f8]; nested exception is org.apache.kafka.common.errors.SerializationException: Can't convert key of class java.lang.String to class or..
문제 Lombok 의 @Data 와 @Builder 가 동시에 선언되어있는 클래스를 Jackson이 Deserialize 를 실패하며.. 다음과 같은 에러가 발생한다. fail to retrieve #{Object} data - Type definition error: [simple type, class #{package.object}]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of #{package.object} (no Creators, like default construct, exist): cannot deserialize from Object ..
1. 문제 local 에서 java 로 구현한 producer 에서 aws ec2 에서 구동중인 kafka broker 에 메세지를 제대로 전달하지 못한다. aws ec2 security group 의 TCP inbound rule 에 본인 local machine 의 접근은 허용되어 있다고 가정한다. kafka client 로 구현한 java producer 예제는 다음과 같다. public class Producer { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "ec2-3-35-218-127.ap-northeast-2.compute.amazonaws..
1.문제 spring boot + spring cloud 환경에서 어플리케이션 실행시 다음과 같이 에러가 발생하며 실행이 되지 않는다. .BeanCreationException: Error creating bean with name 'configurationPropertiesBeans' defined in class path resource [org/springframework/cloud/autoconfigure/ConfigurationPropertiesRebinderAutoConfiguration.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Faile..
1. 문제 amazon ami로 생성한 aws ec2에서 systemd에 custom service를 등록해 사용하려고할때 unrecognized service 에러가 발생할 수 있다. 2. 원인 systemd를 사용하는 버전은 centos7이다. amazon ami는 centos6 버전이기 때문에 systemd가 아닌 이전 버전인 init을 사용해야한다. 3. 해결 aws에서 defualt amazon ami가 아닌 centos7 ami를 사용하자.. 😂 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 nginx web server에 접속했을때 403 error가 발생할 수 있다. 2. 원인 nginx server에서 root에 접근권한이 없어서이다. nginx.conf user centos; events {} http { server { listen 80; server_name 54.180.79.141; root /sites/demo; } } 에러 로그를 확인하면 아래와 같이 permission deny가 발생했다. nginx에서 /sites/demo/index.html에 접근할 수 없다. 3. 해결 접근권한이 막힌 directory에 httpd_sys_rw_content_t 설정을 추가한다. 자세한 내용은 https://www.lesstif.com/pages/viewpage.action?..
1. 문제 nginx 실행시 Failed to start The nginx HTTP and reverse proxy server 에러가 발생할 수 있다. 2. 원인 nginx의 실행 port인 80을 다른 pid가 점유하고 있어서이다. 3. 해결 아래의 명령어로 80port를 소유한 pid를 찾고, kill -15 명령어로 해당 pid를 죽인다 # find netstat -tulpn # kill kill -15 pid 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 JUnit에서 @DataJpaTest를 사용해서 Repository를 테스트하는 경우 아래와 같이 JPAQueryFactory Bean을 찾을 수 없다는 에러가 발생할 수 있다. 2. 원인 @DataJpaTest를 사용하는 경우, 별도의 스프링 bean을 등록하지 않고 Repository만 테스트한다. 따라서 스프링 bean인 JPAQueryFactory를 @Autowired로 선언해 놓았을경우 inject 하지 못해 에러가 발생하게 된다. 변경전 CustomImpl 클래스는 아래와 같다. public class MissionRepositoryCustomImpl extends QuerydslRepositorySupport implements MissionRepositoryCustom { @Au..
1. 문제 JPA를 사용해 객체간 @OneToOne 관계를 설정한뒤 Repository의 save를 호출할때 아래와 같은 에러가 발생할 수 있다. 2. 원인 이러한 상황은 주로 부모객체에서 자식객체를 한번에 저장하려고할때 발생하는 것으로, 자식 객체가 아직 데이터베이스에 저장되지 않았기 떄문이다. 사용한 클래스는 아래와 같다. Mission가 부모 MissionRule가 자식이다. @Getter @NoArgsConstructor @Entity public class Mission extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private Long id; @OneToOn..
1. 문제 intellJ에서 JUnit Test를 수행할때 package 내의 class를 찾지 못해 import 할 수 없는 경우가 있다. 2. 원인 test전에 directory 구조를 변경한 것이 문제였다. 이때 변경전의 class들의 구조가 compile 되어 out directory에 담겨있었다. 3. 해결 IntellJ를 종료 후 다시 재시작하면, IntellJ가 package 구조가 변경된 것을 스스로 감지하고 이전 version의 out directory를 지울 것이냐고 물어본다. 이때 제거한다고 선택하면 에러가 해결된다. 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 AWS EC2에 S3를 사용하는 srping boot 어플리케이션을 배포할때 에러가 발생할 수 있다. 2. 원인 AWS Client는 배포시 default로 cloudFront를 구성하도록 설정되어 있다. 따라서 CloudFront를 생성하고, application.yml에 명시해주지 않을 경우 에러가 발생하게 된다. 3. 해결 CloudFront를 사용하지 않고싶으면, 간단히 application.yml에 아래의 구문을 추가한다. cloud: aws: stack : auto : false 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 AWS EC2에서 npm을 다운받을 때 아래의 구문을 입력하면 install이 안될 수 있다. sudo yum install npm 2. 원인 음.. 이유는 잘모르겠다. 😅 3. 해결 아래의 구문을 순서대로 입력하면 설치할 수 있다. curl -sL https://rpm.nodesource.com/setup_8.x | sudo -E bash - yum install nodejs --enablerepo=nodesource 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 AWS S3에 React app을 hosting 하는 경우에 404 + NoSuchKey 에러가 발생할 수 있다. 2. 원인 React의 Router가 정상적으로 작동하지 않아서이다. 3. 해결 아래와 같이 Error document에 index.html을 입력하면 해결된다. 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 A 도메인에서 B도메인으로 cors xmlhttprequest 요청을 보낼때 The 'Access-Control-Allow-Origin' header contains multiple values 에러가 발생할 수 있다. 예를 들어 S3로 호스팅하고 있는 React에서 Nginx+Spring Boot로 구성되어 있는 API 서버로 요청을 보낼때.. 2. 원인 중복된 cors 설정때문이다. Nginx로 proxy server를 구성하고, Spring boot로 application server를 구성했을 경우 Nginx와 Spring boot 두곳에 cors 설정을 하게되면 중복으로 Access-Control-Allow-Origin가 header에 붙게된다. 따라서 multiple ..
1. 문제 ec2 서버에서 git clone 후 ./gradlew로 build로 진행하면 permission denied 에러가 발생한다. ./graldew clean build -x test 2. 원인 ./gradlew를 실행할수 있는 권한이 없어서이다. 3. 해결 build를 수행하려고 했던 동일한 root에서 아래의 명령어로 실행권한을 부여한다. chmod +x ./gradlew 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 ec2 instance에 puttty로 ssh 접속을 하려할때 Server refused our key에러가 발생한다. 2. 원인 login as에 사용자 이름을 제대로 입력하지 않았다. 3. 해결 아래의 내용을 참고해 생성한 AMI Image에 맞는 사용자 이름으로 로그인한다. 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음
1. 문제 redis에 cache를 저장하려고 할때 "DefaultSerializer requires a Serializable payload but received an object of type" 에러가 발생한다. 2. 원인 redis는 data를 hash해 저장하기 때문에, redis에 저장할 객체는 serializable를 implements 해야한다. 3. 해결 redis에 저장할 object를 Serializable을 implements 하도록 변경한다. public class CacheObject implements Serializable { .. ... } 추천서적 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 COUPANG www.coupang.com 파트너스 활동을 통해 일정액의 수수..
1. 문제 @SpringBootTest를 사용해 Integeration Test를 수행하려고 할때 Failed to load ApplicationContext 에러가 발생한다. 2. 원인 Test 수행 전 필요한 Bean을 load 하는 과정을 거치는데 이때 applcation.yml 을 제대로 찾지 못했다. 3. 해결 @SpringBootTest에 properties 변수를 사용해 ApplicationContext의 위치를 명시한다. 또한, MockMvcBuilders를 사용해 직접 context와 SpringSecurityFilterChain을 주입한다. UserControllerTest @RunWith(SpringRunner.class) @SpringBootTest(properties = "spri..
1. 문제 Spring Security + OAuth2를 사용해 JWT Token 기반 로그인을 구현한 경우, @WithMockUser를 사용해 Autenticated Rest API에 접근시 TokenAuthenticationFilter에서 error가 발생한다. @WithMockUser(username="USER_NAME") @Test @WithMockUser(username = "USER_NAME") public void user_me_유저정보조회_성공() throws Exception { // given UserPrincipal userPrincipal = UserPrincipal.create(user); // when mvc.perform( get("/user/me") .contentType(M..
1. 문제 @SpringBootTest에서 MockMvc를 사용해 post Rest API를 테스트할때, content로 넘겨준 Json 값이 Object로 convert 되지 않고 null로 넘어온다. 2. 원인 SpringBoot2에서는 @RequestBody를 따로 명시하지 않아도 알아서 object mapping 을 해줘서, 아래의 API는 실제로는 잘 작동한다. POST API @PostMapping("/user/me/update") @PreAuthorize("hasRole('USER')") public Long updateUser(UserUpdateRequestDto requestDto, @CurrentUser UserPrincipal userPrincipal) throws IOExceptio..