일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- jwt token
- springboot jwt example
- String Pool
- jvm 메모리 구조
- JWT
- filter ordering
- String Constants Pool
- springboot jwt
- string comparison
- HHH000104
- spring jwt
- spring filter ordering
- jvm memory structure
- jwt example
- docker mongodb
- angular jwt
- jvm memory model
- springboot-angular-jwt
- 기본 Manifest 속성이 없습니다
- intern
- install mongodb docker
- springboot maven plugin
- Constants pool
- docker mongodb install
- spring-boot-maven-plugin
- JPA
- jpa pagination
- jvm 모델
- mongodb install ec2
- springboot mongodb config
- Today
- Total
목록Spring (19)
개발블로그
해당 경고는 영속성 컨텍스트가 "엔티티가 변경되었는데, 그 엔티티의 속성이 updatable = false 라서 못바꿔~ " 라고 알려주는 경고이다. 상황 1. Product 엔티티와 User 엔티티가 연관관계의 상태 @Entity data class Product( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", nullable = false) override var id: Long? = null, @Column(name = "uid", nullable = false) val uid: Long ...생략... ) { @JsonIgnore @OneToTone(targetEntity = ProductExtra::cla..
이는 서버를 부팅시킬 때 swagger에서 발생시키는 warning이다. enum type을 request의 parameter로 받고자하지만, 명시하지 않을 때 위와 같은 warning이 발생한다. 따라서 @RequestParam 이라고 명시해주면 warning은 사라진다. @GetMapping(...) fun test( @RequestParam statTarget: StatTarget ){...}
결론은 1:N 관계에서 fetch join과 pagination은 동시에 할 수 없다. 따라서 pagination을 한 뒤, fetch하여 조합하는 방법을 택했다. 요구사항과 문제는 다음과 같았다. 어드민 화면을 구성하는데, A,B,C,D Table에 있는 컬럼들을 기준으로 검색과 페이징이 가능해야 했다. 예를 들어, 검색 필드에 "이름" 이 있다. 이름 필드에 값이 들어오면(null이 아니면) 이름은 where 절에 포함되어야한다. 하지만 이름 값이 null로 들어오면 where절에 포함되지 말아야한다. 그리고 위와 같은 검색 필드는 A,B,C,D table 각각에 1개 이상씩 존재한다. 검색 결과 응답 컬럼은 A,B,C,D,E,F Table에 있는 컬럼들이었다. 엔티티의 관계 관계의 중심은 A였고, ..
MSA 기반으로 프로젝트를 구성하면, 파생되는 여러가지 단점(?)이 있다. 이를테면, 각 서비스마다 호스트가 달라서 생기는 불편함이 있다. 각 서비스의 API들을 호출하는 쪽에서 서비스에 따라 어떤 호스트로 요청해야할지 신경 써야하기 때문이다. 따라서 MSA로 프로젝트를 구성하려 한다면, Service Mesh Architecture도 함께 고려해야한다. 그 중 하나가 api-gateway이다. api-gateway의 역할 중 하나는 요청 URL에 따라 어떤 서비스로 요청을 라우팅할지 관리하는 것이다. 다시 말해, API를 호출하는 쪽에서는 api-gateway로만 요청을 전송한다. 실제로 요청이 어느 서비스에 라우팅시킬지 결정하는 것은 api-gateway의 역할이다. Api Gateway 서버 세팅 ..
springboot maven project를 package 했을 때 생성되는 jar파일을 실행시키면, "기본 manifest 속성이 없습니다"라는 오류 메시지가 나옵니다. 그 이유는 JVM이 jar파일에서 가장 처음 실행할 Main Class를 찾지 못해서 발생하는 오류입니다. 이에 대한 설정은 jar파일 내의 META-INF/MANIFEST.MF에 있어야 하는데, 등록해주지 않았기 때문에 이 오류가 발생한 것입니다. maven이 package를 할 때, 추가적인 정보들을 MANIFEST.MF에 등록하게 하고자, pom.xml에 spring-boot-maven-plugin을 추가하겠습니다. org.springframework.boot spring-boot-maven-plugin 이 플러그인을 추가한 후..
Filter에서 Exception 발생시키면 HttpStatus를 500에러로 보낸다. Exception에 따라서 응답 코드와 메세지를 다르게 하고자 발생시키는 Exception에 @ResponseStatus 어노테이션을 추가해주었다. @ResponseStatus(value= HttpStatus.UNAUTHORIZED, reason="login required") 그러면 해당 Exception이 발생했을 때 HttpStatus와 message를 위와 같이 설정할 수 있다.
Spring을 이용할 때, 요청에 대한 전처리를 위해 Interceptor를 구현했습니다. 그러나 Spring Webflux를 사용했고, Controller 대신 Router에서 요청을 받는 구조에서 개발을 하다보니 Interceptor를 사용할 수 없었습니다. 차선책으로 WebFilter를 이용했는데, Filter의 순서가 원하는대로 동작하지 않아 Filter에 @Order(N)라는 어노테이션을 추가했습니다. @Order는 빈 등록 순서를 정하는 어노테이션인데, WebFilter의 동작 순서가 빈 등록 순서를 따랐기 때문에 해당 어노테이션으로 해결할 수 있었습니다.
kafka에 Json 데이터를 producing 했다. 그러나, springboot의 kafka listener에서 그 데이터를 deserialize를 할 때 다음과 같은 에러가 발생했다. Error deserializing key/value for partition recomData-0 at offset 6. If needed, please seek past the record to continue consumption. Error deserializing key/value for partition recomData-0 at offset 6. If needed, please seek past the record to continue consumption. 이 문제를 해결하려고 겁나 삽질했다..ㅠㅠ.. ..