본문 바로가기

전체 글

(183)
TIL) Kotlin : runCatching, DTO/Entity 작성 팁 1. Kotlin : runCatching runCatching 은 try-catch 를 대체할 수 있는 코틀린의 문법이다. 결론부터 말하면, try-catch 문은 실패시의 핸들링을 처리할 수 있었다면, runCatching 은 성공시, 실패시 둘 다 처리할 수 있다. @InlineOnly @SinceKotlin("1.3") public inline fun T.runCatching(block: T.() -> R): Result { return try { Result.success(block()) } catch (e: Throwable) { Result.failure(e) } } 보다시피, 리턴 타입은 Result 라는 객체이며, 전달받은 내용을 실행해서, 성공한다면 Result.success() 를 통..
TIL) JPA 페이징, Json 응답시 Null 필드 제외, Envers 1. 페이징 DATA JPA 를 사용할때, Pagable 객체를 같이 넘기면 페이징처리된 결과를 받을 수 있다. // PageRequest 는 Pagable 인터페이스의 하위 구현 클래스 val pageRequest: PageRequest = PageRequest.of(page, limit, Sort.by("createdAt").descending()) data JPA 에 이 객체를 받는 인터페이스를 선언하고 넘긴다. Page findAllByUserIdIn(List userIds, Pageable pageable); 반환형을 보면, User 객체가 아닌 Page 객체를 받게 되는데 이게 참 유용하다. int getNumber() 현재 페이지의 정보 int getSize() 한 페이지의 크기 int ge..
TIL) 깃 충돌, 예외 처리 전략, @CreatedDate vs @CreationTimeStamp 1. 깃 병합 충돌 오늘 깃에대한 수업을 진행하면서, 로컬에서 딴 task 브랜치를 로컬의 main 브랜치로 merge 할때 충돌이 나게끔 해서 보여드리려 했는데 그냥 task 의 내용이 main 을 덮어써버렸다. 찾아보니, 병합충돌은 리모트 브랜치와 로컬 브랜치사이에 병합하려 할때 일어난다고 한다. 처음 알았다.. 추가로 깃에 대해 수업준비 하면서 알게된 재밌는 부분은, 리눅스를 만든 사람이 깃을 만들었다는 것 (이전에 들은적이 있었는데 까먹었었음), 아폴로 11호의 코드가 깃허브에 모두가 볼 수 있게 올라가있다는것들이었다 ㅋㅋ 2. 예외 처리 전략 이 부분에 대해서는 같이 스터디를 진행중인 Cheese.yun 님 블로그 도움을 많이 받았다. https://cheese10yun.github.io/spr..
TIL) 트래킹 브랜치, @RequestParam 디폴트, Kotlin any() 1. 기존의 브랜치에 tracking 하는 브랜치 설정하기. $ git branch -u / 2. 트래킹 브랜치 확인하기 $ git branch -vv 3. @RequestParam 시 들어올수도 있고 아닌 값. @RequestParam 으로 파라미터를 넘기는 쪽에서, 필수여부가 N 일때 우리의 코드에서는 nullable 로 해결이 되지 않는다. 그 파라미터가 null 인게 아니라 파라미터 자체가 안오니까. @RequestParam 의 required 옵션이 디폴트가 true 인데 false 로 지정해주면, 없어도 되게 만들 수 있다. 추가로, 이 옵션이 false 가 되면, defaultValue 값이 동작하게 되는데 코드단에서는 어쨋든 선언한 변수를 채워야하니 해당 값으로 채워주는것이고, 디폴트는 V..
TIL) 쿠키/세션, 코틀린 스트림 파이프라인, 정규식 1. 쿠키/세션 Http 의 stateless 때문에 쿠키 라는 개념이 생김 [쿠키 개념 순서] 클라이언트 → 서버 로그인 요청 서버는 로그인 처리 및 응답 (응답시에 쿠키를 붙여서 응답) 이후 같은서버로 클라이언트가 요청시 쿠키를 넣어서 요청 송신 서버는 쿠키를 받아서 어느 클라이언트인지 구분 후 서버상의 기록을 확인후 이전의 상태를 앎 그런데 쿠키는 브라우저상에서 저장하는 것이기 때문에 위변조의 우려가 있음. 쿠키는 민감하지 않은 정보만 알 필요가 있어짐. → 세션 즉 서버에서 민감한 정보를 저장하고, 쿠키에서는 간단한 정보만 저장하여 서버의 부담을 줄여준다. 쿠키에 세션 ID 를 기록하고, 요청시 로그인 정보가 아닌 세션 ID 를 송신. 서버에서는 세션ID 와 인증 상태 기록등을 연동해서 로그인 처..
TIL) @field:, getBy vs findby, jwt 1. @field: (annotation use-site target) 코드중 에너테이션 앞에 이런 접두어가 붙는 것을 보았다. @JsonProperty 같은 에너테이션은 런타임시 리플렉션으로 이 에너테이션이 붙은 필드값을 찾는다. 따라서 필드에 붙어야한다. 그런데. 코틀린의 primary 생성자에 프로퍼티를 선언하고 사용하는 패턴을 많이들 쓴다. 그런데 이 위에 어떤 에너테이션을 붙이면, 예를들어 class Dto( @JsonProperty val name:String ) 이러게 되면, 컴파일된 자바코드로는 생성자의 파라미터에 에너테이션이 붙는다. 즉, public final class Dto { @NotNull private final String name; public Dto(@JsonPropert..
TIL) 인터셉터 1. Spring interceptor API 명세에 따른 개발중, 모든 요청에 따라 특정 헤더, 파라미터를 검사, 조작후 모든 응답에 뿌려주는 작업이 있었다. 인터셉터는 필터와 다르게 Spring 컨텍스트에 등록되기 때문에, @ControllerAdvisor 로 예외를 잡을 수 있다는 이점에 사용하였다. 구현하는 방법에는 두가지가 있다. HandlerInterceptorAdapter 추상클래스 구현 HandlerInterceptor 인터페이스 구현 두 경우 모두 아래의 세가지 메서드를 오버라이딩할 수 있다., preHandle postHandle afterCompletion HandlerInterceptor 인터페이스의 경우, 인터페이스라 모든 메서드를 굳이 구현해야할 것 같고 반면 추상메서드는 필요한..
git rebase -i https://wormwlrm.github.io/2020/09/03/Git-rebase-with-interactive-option.html Git Rebase --Interactive 옵션 알아보기 - 재그지그의 개발 블로그 대화형으로 Git 커밋 히스토리를 수정할 수 있게 해주는 Interactive 옵션에 대해 알아봅니다. wormwlrm.github.io 위 블로그로 redirect 하세요