Backend/개발

[Spring boot] 인턴 프로젝트 기록 - 개발 참고사항

지수쓰 2020. 4. 6. 21:43
반응형

ManyToMany 관계 tostring 무한으로되는거 방지 => @JsonIgnore 사용

-> 이때는 좀 단순 해결을 위해서 이 방법을 썼는데 이런 어노테이션 외에 Dto를 생성하거나,, 좀 다른 방식으로 해결하는게 좋을 것 같다! 21.08.23 

ex) store.java - menu.java

store 마다 menu 여러개 갖고있는 상태

// store.java 일부 
    @ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JsonIgnore
    @JoinTable(name = "store_menu",
            joinColumns = @JoinColumn(name = "store_id"),
            inverseJoinColumns = @JoinColumn(name = "menu_id"))
    private List<Menu> menus = new ArrayList<>();  // 메뉴
//menu.java 일부

@ToString(exclude = "stores") 
//toString()시에 store는 제외해서 읽어옴 
//이렇게 안하면 menu 부를때마다 계속 store 불러서 쿼리가 엄청 많아짐 
@Entity
@Table(name = "menu")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) 
//no serializer found뭐이런거 오류나는거 예방 
public class Menu {
//...
    @ManyToMany(mappedBy = "menus")
    @JsonBackReference // menu json으로 불러올때 stores는 제외 
    private List<Store> stores = new ArrayList<Store>();
//...
}

ENUM String 으로

@Enumerated(EnumType.STRING) private ImageType type;
  • enum 타입 만들때 EnumType.STRING 해줘야 디비에서 이걸 0,1,2,3, 으로 인식 안하고 문자 그대로 들어감

fetch (LAZY,EAGER)

//entity의 정보를 요청할 때 읽어옴
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL) 
//entity의 정보를 미리 읽어옴
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
내용을 입력하세요.

s3 timeout wating for connect 오류

2020-03-23 15:07:06.266 ERROR 8846 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.amazonaws.SdkClientException: Unable to execute HTTP request: Timeout waiting for connection from pool] with root cause

org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:314) ~[httpclient-4.5.10.jar!/:4.5.10]
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:280) ~[httpclient-4.5.10.jar!/:4.5.10]
    at sun.reflect.GeneratedMethodAccessor211.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java

getObject 하는곳에서 close를 안해줘서 connection pool 이 꽉차는거같아서

try{obejct = getobject(bucket,"");}
catch{}
finally{
object!=null? object.close();}

대략적으로 이렇게 객체를 close해주었다. 외부 라이브러리 쓸 때 커넥션,객체 생성시 해제하는 것에 유의해줘야겠다. 

spring mvc view에서 thymleaf 권한 쓸때

<html lang="en" xmlns:th="http://www.thymeleaf.org"  xmlns:sec="http://www.w3.org/1999/xhtml">

xmlns:sec="http://www.w3.org/1999/xhtml" 이거 넣어줘야함.
xmlns:th="http://www.thymeleaf.org" 이거는 th 쓸때

spring devtool 정적파일 reload

//build.gradle
    compile("org.springframework.boot:spring-boot-devtools")
//yml

  devtools:
    livereload:
      enabled: true
  freemarker:
    cache: false
  thymeleaf:
    cache: false

registry 검색 automake.when.app.running 뭐 이런거 체크

prefrence compiler build auto 어쩌고 체크