소개
게시글
질문&답변
2024.02.25
github actions 의 steps 중 platforms 제거
결국 platforms 가 없으니 manifest 에서 해당하는 플랫폼인 linux/arm64/v8 를 못찾았다고 뭐라해서 platforms: linux/arm64/v8 를 추가해서 해결했습니다..! 특정 OS 환경에서 컨테이너 실행하려면 platforms 를 잘 지정해두어야 하는거군요..!
- 1
- 2
- 414
질문&답변
2021.09.18
compiler.plugin 이 undefined라고 뜹니다.
웹팩 5에서 실습해보려 하는 분들 아래 코드처럼 해보세요. class MyPlugin { apply(compiler) { compiler.hooks.done.tap("My Plugin", (stats) => { console.log("MyPlugin worked"); }); compiler.hooks.emit.tapAsync("My Plugin", (compilation, callback) => { console.log( "compilation.assets['main.js']", compilation.assets["main.js"].source() ); callback(); }); } } module.exports = MyPlugin;
- 3
- 3
- 508
질문&답변
2021.09.15
상태 200이 안나옵니다.
@NoArgsConstructor 애노테이션을 추가했을 때 작동이 정상적으로 되고 없었을 때는 안 됐던 이유는 요약하자면, Jackson2HttpMessageConverter 때문입니다. 처음에 스프링 부트를 로드하시면, 로깅 시에 Creating shared instance of singleton bean 'mappingJackson2HttpMessageConverter' 과 같은 것이 보일 것입니다. 요약하자면 해당 빈이 등록되었다는 이야기인데, 해당 빈은 스프링 부트 설정에 의해 자동으로 등록되어 쓰입니다. 해당 빈은 우리가 HTTP BODY에 JSON 문자열을 담았을 때, 그것을 자바 객체로 변환해주거나, 아니면 자바 객체로 만든 것을 컨트롤러에서 반환했을 때 JSON 문자열로 변환해주는 역할을 하고 있습니다. 또 'mappingJackson2HttpMessageConverter' 빈은 내부적으로 'ObjectMapper'라는 객체를 사용해서 JSON 문자열을 자바 객체로 바꾸거나, 자바 객체를 JSON 문자열로 바꾸는데, 'ObjectMapper' 객체는 바로 변환을 시작하는 게 아니라 처음에 일단 변경할 수 있는지 검증부터 합니다. 왜냐하면, 사용자가 잘못된 (제대로 시작되거나 끝나지 않은 혹은 쉼표가 부족한 경우 등) JSON 문자열을 넘기는 경우에 대해서도 대비를 해야하고, 자바 객체에 대해서도 올바른 Getter, Setter가 있는지, 어떤 생성자가 있는지 검증을 해야 변환 시 예측하지 못한 방향으로 로직이 흘러가지 않기 때문입니다. 이는 올바른 예외처리의 일환입니다. ObjectMapper 내부에 BeanDeserializer가 존재하고, deserializeFromObject() 라는 메소드가 존재하는데, 이 메소드에서 기본 생성자가가 없으면 에러가 날 것입니다. 기본생성자가 없으면 에러가 나는 이유는 내부적으로 자바 리플렉션을 사용해서 입니다. 자바 리플렉션에 대해서 설명하기는 너무 장황하니 검색을 추천드립니다. 자바 리플렉션의 특성상 접근 제어자에 상관 없이 기본 생성자를 사용 가능하기 때문에 기본 생성자의 접근 제어자는 private이어도 무관합니다. 참고로 JPA에서도 같은 이유(리플렉션 사용)로 기본 생성자가 필수이니 참고하시면 나중에 도움이 되실 겁니다.
- 2
- 3
- 555
질문&답변
2021.09.13
에러:
혼자서 문제해결을 해보시다가 완전히 잘못된 길로 빠지신 거 같은데,... 프로젝트 다시 만드시고 똑같이 해보시면 에러 안날 겁니다. @ComponentScan 애노테이션은 HelloWorldBean에 작성하셔야 될 내용이 아니라, 메인 스프링부트 애플리케이션.java 파일에 자동으로 붙어있는 @SpringBootApplication 애노테이션이 포함하는 애노테이션 중 하나입니다. 고로 강의와 같이 스프링부트 스타터로 시작하셨다면 웬만해선 수동으로 추가하실 필요가 없습니다. @Autowired MessageSource messageSource; 이 부분도 빼주세요. 해당 부분은 스프링부트에서 사용하는 기본 MessageSource 빈을 가져올 때 사용하는 소스입니다. 현재 학습 내용과 전혀 관련이 없습니다. 이 강의에서 소스코드를 추가하는 부분은 매우 적으니 다시 처음부터 빨리감기로 보시면서 소스코드 변화부분만 그대로 따라하시면 에러 안 나실 겁니다.
- 0
- 2
- 266
고민있어요
2021.09.05 13:49
2021-09-05 제가 겪었던 문제와 해결방법 공유해드립니다.
- 1
- 0
- 178