본문 바로가기

웹 개발/Spring

(8)
[Spring] Spring Rest Docs [참고] Spring REST Docs Documentation (Spring REST Docs 공식 문서) Spring REST Docs Document RESTful services by combining hand-written documentation with auto-generated snippets produced with Spring MVC Test, WebTestClient, or REST Assured. docs.spring.io 백기선님 강의 - 스프링 기반 REST API 개발 (섹션 3) 스프링 기반 REST API 개발 - 인프런 | 강의 다양한 스프링 기술을 사용하여 Self-Descriptive Message와 HATEOAS(Hypermedia as the engine of ap..
[Spring] JPA - 테이블 생성시 컬럼 순서 정렬 결론부터 말하자면 1. 간단히 애노테이션이나 설정값 변경으로 할 수는 없다. 2. 또한, Hibernate에서도 장려하지 않는다. 간단히 할 수 없다고 한 것은, Hibernate의 DDL 생성 부분을 깊이 있게 파서 어떻게 해결할 수는 있을 것이라는 뜻이다. 참고: www.inflearn.com/questions/17359 hbm2ddl 를 이용해 테이블 생성시 컬럼 순서 수정 방법 - 인프런 | 질문 & 답변 안녕하세요. Kyeongseok Ko님^^ 사실 저도 처음 JPA를 사용할 때 이것 때문에 고민을 좀 했었는데요. 아쉽지만 현재로써는 단순하게 해결할 수 있는 방법은 없습니다. 하이버네이트의 DDL 생성 부분을 www.inflearn.com Hibernate에서도 장려하지 않는다는 것은, hbm..
[Spring] JPA - How to fix “Error executing DDL ”alter table events drop foreign key {foreign key} “ via JDBC Statement” alter 명령어로 특정 테이블의 foreign key를 drop할 때 발생하는 에러이므로 에러가 발생하는 여러 경우가 있겠지만 이번에는 DDL에 RDBMS의 keyword가 포함되어 있는 경우였다. RDBMS의 keyword란 MySQL의 state, PostgreSQL의 user와 같이 기능이 정의되어 있는 명령어를 말한다. 참고: stackoverflow.com/questions/54504230/how-to-fix-error-executing-ddl-alter-table-events-drop-foreign-key-fkg0mkvgsqn How to fix "Error executing DDL "alter table events drop foreign key FKg0mkvgsqn8584qoql6a2rx..
[Spring] JPA - @OneToOne 조인 전략을 left join -> inner join 으로 변경하기 Entity 객체 조회 시 Hibernate SQL 로그를 확인해보니, @OneToOne으로 매핑한 객체에 left join(= left outer join)이 사용되는 것을 확인했다. 경험해본 RDBMS들의 Optimizer는 모두 left join보다 inner join을 사용했을 경우 성능이 더 좋았기 때문에 필수적인 경우가 아니면 left join을 모두 inner join으로 바꾸고 싶었다. 생각해보면 연관된 외래키가 nullable인 경우에는 left join으로 가져와야 하는 것이 당연하기 때문에 @ManyToOne, @OneToOne의 default 조인 전략이 left join인 것 또한 당연하다. 참고: siyoon210.tistory.com/57 JPA 조인 전략 변경하기 JPA 조인..
[Spring] JPA - Could not write JSON: Infinite recursion (StackOverflowError) 처음 이 에러를 맞닥뜨렸을 때는 "Infinite recursion"라는 메세지만 보고 단순한 순환 참조 에러인 줄 알았다. 그런데 디버깅을 해보니 에러가 발생하는 시점이 데이터를 조회하는 시점이 아니라, ResponseEntity로 조회한 객체를 리턴할 때, 즉 Entity 객체를 JSON으로 Serialize할 때라는 것을 알게 되었다. 즉, ResponseEntity가 Jackson 라이브러리를 사용하여 객체를 JSON으로 Serialize할 때 순환 참조가 일어나 JSON String이 무한정 늘어나기 때문에 StackOverflowError가 발생하는 것이다. 이에 대한 해결책은 다음 세 개이다. - JPA Entity 클래스 내에 jackson 애노테이션을 사용하는 방법(@JsonIgnore,..
[Spring] Spring REST Docs 호스트 변경 Spring REST Docs를 사용하다 보면, 위 사진처럼 default로 되어 있는 호스트(localhost)와 포트(8080)를 확인할 수 있다. 그런데, 프론트엔트나 모바일 개발자 분들의 요청으로(예를 들어, HATEOAS를 적용했을 때 호스트와 포트가 localhost:8080으로 되어 있을 경우) 이 부분을 수정해야 할 때가 종종 있다. 이 때, @AutoConfigureRestDocs 애노테이션으로 Spring REST Docs의 설정 사항들을 자동 설정했다면 호스트와 포트를 간편하게 바꿀 수 있다. @SpringBootTest @RunWith(SpringRunner.class) @AutoConfigureMockMvc @AutoConfigureRestDocs(uriHost = "myhost"..
[Spring] @Bean와 @Component의 차이 @Bean의 경우 개발자가 컨트롤이 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶은 경우에 사용된다. 예를 들어, 다음과 같이 사용할 수 있다. @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper; } 애노테이션 내부를 보면 @Target이 METHOD, ANNOTATION_TYPE으로 되어 있다. @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Bean { @AliasFor("n..
[Spring] 웹 애플리케이션 구조 출처 gmlwjd9405.github.io/2018/10/29/web-application-structure.html [Web] web.xml 설정 내용, 역할 및 간단한 예시 이해하기 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 웹 애플리케이션 구조 src Libraries WebContent lib classes web.xml web.xml 기본 설정 개념 역할 예시 aliases 설정 매핑 spring MVC의 web.xml 설정 내용 DispatcherServlet HandlerMapping ViewResolver ContextLoaderListener encodingFilter