본문 바로가기

전체 글

(64)
[Spring Boot] 헤더를 까서 필터링 할건데 actuator는 통과시키고 싶음 - (2) 1편 보러가기 : https://cindycho.tistory.com/75 2편이 왜 바로 나오지 않았냐,,, 하면 아직 수정한 내용에 대해 코드리뷰를 받지 못했다. 원하는 결과가 나오고 있으나 좀 찜찜해서 반영은 안하고 있는 중이다. 내가 해결한 방식 actutator 경로와 토큰 없을 때도 통과시켜줘야 하는 요청의 path를 저장해서 요청이 들어오면 통과시켜주는 path인지 아닌지 확인해서 통과시켜주고 있다. request 에서 path를 추출해서 (path in (토큰 없어도 되는 path 리스트)) == true 이면 바로 return, 아닌경우에 헤더에 토큰 여부 까서 익셉션 던지기. 가능한지 모르지만 내가 해결하고 싶은 방식 요청이 온다 -> uri 에 따라 웹 필터 적용 여부를 알아서 판단해..
[Kotlin] 코틀린의 reduce (feat. 백준 25306 ) Reduce Accumulates value starting with the first element and applying operation from left to right to current accumulator value and each element. 첫 번째 원소부터 시작해서 순차적으로 계산을 해준다. empty collection이면 exception을 던져준다. 최종 계산의 결과값을 돌려준다. public inline fun Iterable.reduce(operation: (acc: S, T) -> S): S { val iterator = this.iterator() if (!iterator.hasNext()) throw UnsupportedOperationException("Empty c..
[HTTP] 그래서 PUT 이랑 PATCH 는 뭐가 다른건가요 - (2) 나름의 결론을 내렸다. 테이블의 모든 필드를 Resource 와 동일시 하면 이전의 포스팅같은 고뇌에 빠지게 되는것 같다. (이전 포스팅 : https://cindycho.tistory.com/78) POST, PUT, PATCH 는 해당 URI 의 Resource에 관련한 작업인데, 이 Resource란 것에 대해 다시 잘 생각해보니 Resource가 디비 테이블과 동일시 될 필요는 없는 것 같다. 내 고민이 아니,,, 그럼 테이블에 필드가 50개 있는데,, 이중 5개만 고치고 싶어도 PUT을 쓰려면 50개를 payload에 다 명시해야 하는거야?? 이게 말이되나..? 그럼 수정은 항상 PATCH를 쓰는게 맞나..? 이런 고민이었는데, 디비의 테이블과 Resource를 분리해서 생각하니 마음이 편해졌다..
[HTTP] 그래서 PUT 이랑 PATCH 는 뭐가 다른건가요 - (1) 지금까지 PUT 과 PATCH의 구분이 Request Body에 대상 resource의 모든 항목을 다 넣어서 보내면 PUT, 일부만 보내면 PATCH 라고 생각하고 있었는데, 명확하게 알면 좋을 것 같아서 찾아봤다. 현재는 해당 entity 필드중 일부만 수정하는 api도 PUT method를 사용하고 있는데, PATCH를 사용해야 되지 않나? 하는 고민에 빠졌기 때문이다. MDN에서 정의하는 PUT 과 PATCH 는 다음과 같다. PUT request payload의 값으로 새로운 resource를 만들거나, 해당 resource의 값을 변경한다. PUT과 POST의 차이점은, PUT은 여러번 보내도 문제 없는 요청이고 POST 는 여러번 보내면 문제가 발생할수도 있다는 점이다. PUT은 comple..
[Spring Boot] Servlet Web Application - (1) 웹필터에 대해 보다보니 스프링 부트의 Web Application 종류에 Servlet Web 과 Reactive Web두 종류가 있는데 이 둘이 어떻게 다른지 궁금해져서 공식문서 읽으면서 정리하는 내용. 스프링의 Reactive Stack 과 Servelet Stack 스프링은 Reactive와 Servlet 두 개의 stack을 제공하고 있다. Servlet Stack = Servlet Api + Spring MVC + Spring Data Reactive Stack = Spring WebFlux + Spring Data's reactive repositories 두 경우다 Spring Security를 사용할 수 있다. Reactive processing은 non-blocking, asynchron..
[Kotlin] 코틀린 중복된 횟수 구하기 기존에는 C++ 만 사용했는데 컬렉션을 잘만 활용한다면 코틀린이 정말 편한것 같다. 그러나 여전히 모든걸 스트링으로 읽어와야한다는것,,, 아직 불편하다. 입력받거나 배열 생성해주는건 아직까지 C++ 이 더 익숙하다. 코틀린으로 할때마다 매번 찾아봐서 안까먹기 위해 정리한다. 코틀린 컬렉션 활용하기 GropuBy IntArray.groupBy를 살펴보면 다음과 같다. public inline fun IntArray.groupBy(keySelector: (Int) -> K): Map { return groupByTo(LinkedHashMap(), keySelector) } 주어진 keySelector function이 돌려주는 값들을 key값으로 하고 key값과 매칭되는 원소들을 list로 가지는 맵을 돌려..
[Spring Boot] 헤더를 까서 필터링 할건데 actuator는 통과시키고 싶음 - (1) 오늘 하루종일 삽질했지만 해결 못했다. 사건 기존 게이트웨이에서 헤더에 토큰을 넣어서 보내주고 필터에서 토큰을 까서 확인하고 있었다. 토큰값이 없거나 이상한경우는 어플리케이션단에서 체크해서 예외를 던져줬다. 변경 필터에서 토큰을 까서 확인할때 이상한 헤더값이 오거나 토큰값이 없는 경우에는 토큰을 깔 때 예외처리를 하기로 했다. 문제 수정해서 배포해보니 배포의 마지막 단계에서 actuator가 헬스체크를 해주는데 actuator 요청은 헤더에 토큰값이 없이 들어오기 때문에 헬스체크 요청을 튕겨내서 배포 실패,,, 또한 게이트웨이에서도 요청에 따라 타는 필터가 달라져서 어떤 요청은 토큰 없이 그대로 전달되고, 어떤 요청은 토큰값이 주입되어서 넘어오고 있어서 필터에서 무조건 토큰값이 없으면 throw를 하면 ..
[JPA] 엔티티 값을 수정했는데 save를 안해도 되나요 현재 회사에서 쓰는 스펙은 Spring Boot, Kotlin, JPA, QueryDSL, MySQL etc,,, 등등이 있다. 해당 스펙에 대한 경험이 없는 상태로 얼렁뚱땅 다른 사람의 코드를 보고 비슷하게 코드 작성하는것에는 한계가 있다. 오늘은 갑자기 다음의 내용이 궁금해졌다. 기본적으로 간단한 CRUD에 대해서는 JPA를 사용하는데 어떨때는 엔티티를 가져와서 값을 업데이트만 해도 디비에 적용되고 다른때는 save를 하는 것이다. //jpa repsitory @Repository interface EntityRepository : JpaRepository { fun findById(id: Int): Entity } val myEntity: Entity = findById(id) myEntity.ag..