프로그래밍/서버 프로그래밍
-
Redirect와 Forward의 차이 ( Spring )프로그래밍/서버 프로그래밍 2020. 11. 9. 00:20
Redirect redirect는 서버에 요청이 들어온 후 , 서버에서 실제로 클라이언트로 HTTP Stauts Code 302를 전송한다. 전송된 응답을 클라이언트에서 받아서 302 응답코드를 확인하고 응답의 Location 헤더에서 URL을 읽어들여 해당 URL로 다시 요청을 보낸다. Forward forward는 서버에 요청이 들어온 후, 서버에서 모든 일이 벌어진다. 서블릿 컨테이너는 해당 요청을 그대로 타겟 URL로 포워딩 시킨다. 따라서 URL은 브라우저에서는 변경되지 않을 것이고, 리다이렉트와 다르게 응답은 한번만 내려오게 된다. 스프링에서의 처리 스프링에서 redirect, forward는 보통 컨트롤러에서 redirect:/hello, forward:/hello와 같은 String을 리턴..
-
[ Spring AOP ] pointcut 안걸릴때프로그래밍/서버 프로그래밍 2020. 5. 12. 11:48
문제 발생 최근 흥미가 있던 Kotlin으로 간단한 텔레그램 알림을 주는 봇을 만들면서, Telegram Bot Java Library를 사용하고 있었다. Telegram Bot Java Library에서는 TelegramLongPollingBot의 onUpdateReceived를 오버라이드하여서 사용자로 부터 메시지를 받았을 때 어떻게 동작할 지를 정의하게 되어있다. 해당 메소드가 실행되기 전과 후에 사용자가 가장 마지막에 보낸 요청의 시간 및 마지막에 요청했던 커맨드를 저장하기 위해 Spring Aop를 이용해서 커스텀 어노테이션을 달고, 해당 메소드 실행 전후에 기록을 남기려 했었는데, 커스텀 어노테이션을 이용해보기도 하고, 메소드명을 직접 넣어보기도 했는데 계속해서 걸리지 않았다. 해결 방안 탐색..
-
Spring Boot + Kotlin + JPA 적용하기 Entity 생성시 생각해볼 점들프로그래밍/서버 프로그래밍 2020. 1. 28. 16:23
2020-05-12 우아한 형제들 기술 블로그 - 코틀린에서 하이버네이트를 사용할 수 있을까?에 나온 내용 추가합니다. 4. data class 사용에 대해 본글에서 적은 순환참조 이슈 외에도 다른 이슈가 나와있어서 링크 추가합니다. Hibernate의 Lazy Loading을 사용하기 위해서는 Data class를 사용할 수 없습니다. 최근 코틀린으로 스프링 부트 사용을 공부하고 있습니다. 연휴에 이동욱님의 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 를 코틀린으로 따라 해 보기를 도전하면서 JPA를 적용하는 방법과 JPA를 적용할 때 Entity 작성법에서 생각해볼 부분이 있어서 공유 겸 글을 작성합니다. 정말 JPA를 프로젝트에 적용하는 것만 필요하신 분은 요약만 보셔도 됩니다! 코틀린에 JPA..
-
[JUnit5 , Spring Boot] 인텔리제이에서 JUnit5 DisplayName이 표시되지 않을 때 해결 방법프로그래밍/서버 프로그래밍 2019. 12. 18. 16:05
최근 Spring Boot가 업데이트 되면서 JUnit5를 많이 공부하고 있다. 특히 @DisplayName과 @ParameterizedTest 를 아주 잘 사용하고 있었다. 그런데 오늘 집에서는 잘 작동하던 코드가 회사에서는 테스트는 통과되는 것으로 보이는데 @DisplayName에서 지정한 테스트명이 노출되지 않는 문제가 발생했다. 주변 동료에게 물어보니 같은 문제를 겪었다며, 해결방법을 가르쳐주셨다. 문제는 바로 인텔리제이가 최근(?) 업데이트 되면서 아래 두 값의 Default 값을 IntelliJ에서 Gradle로 변경했다고 한다. 해당 설정을 다시 IntelliJ로 변경하고, 다시 테스트를 실행해보았다. 위와 같이 정상 작동 하는 걸 알 수 있었다. 이 후 , 블로그에 올리려고, 왜 Defau..
-
Spring boot S3 Local에서 Test하기프로그래밍/서버 프로그래밍 2019. 4. 4. 19:19
Spring boot S3 Local에서 Test하기 문제 S3를 사용하여 정적 이미지를 업로드 하도록 설정을 하였더니 , 문제가 생겼다. 테스트할 때 마다 실제 s3 저장소에 이미지가 올라간다는 점과, Travis 에서 빌드할 때 accessKey 와 secretKey가 없으니 계속해서 빌드에 실패하는 것이다. 해결방안 인터넷에 어떤 블로그에서 실제 회사에서 업무 시 하나의 s3 버킷에 여러명의 개발자가 붙어서 개발하면 다양한 문제가 발생할 수 있기 때문에 로컬에서 테스트시에는 s3 mock을 이용해서 로컬에서 각각의 mock으로 작성된 s3 버킷에서 테스트를 한다는 글을 며칠전에 봤던 것이 기억나는데 아무리 다시 찾아서 읽어보려해도 찾지 못했다…ㅠㅠ 그래도 그 후 s3 mock 에 관련되서 검색해본 ..
-
Travis CI를 이용해 Maven + SpringBoot에 CI 적용하기프로그래밍/서버 프로그래밍 2019. 2. 20. 21:20
Travis CI를 이용해 Maven + SpringBoot에 CI 적용하기 CI CI란 Continuous Integration의 약자로, 각각의 개발자의 개발소스를 한번에 통합 빌드하는 과정을 지속적으로 함으로써 따로 어느시점에 코드를 모아서 통합빌드할 필요가 없도록 하는 기법을 말합니다. 이를 활용하면 배포를 위한 빌드와 테스트 단계의 소요시간을 줄일 수 있다고 합니다. CI Server 빌드 프로세스를 관리해주는 서버로 대표적으로 젠킨스, Travis CI, Circle CI가 있습니다. 오늘 저는 Travis CI를 이용해 제 SpringBoot 프로젝트에 CI를 적용해보겠습니다. Travis에 프로젝트를 연동완료하면, master브랜치에 소스코드가 올라갈때마다 자동으로 통합빌드 및 테스트를 진..
-
@Valid 에서 받은 Errors를 Serialize해서 ResponseEntity에 담자!프로그래밍/서버 프로그래밍 2019. 2. 19. 15:30
@Valid 에서 받은 Errors를 Serialize해서 ResponseEntity에 담자! 지난번 Valid로 RequestBody값 검증하기글에서 보면 제가 Errors를 바로 ResponseEntity.badRequest().body(errors) 이런식으로 에러를 직접 바디에 담아서 리턴해주는 코드를 짰습니다. 아마 실행해보신 분들은 이런 에러가 떴을거에요! org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageConversionException: Type definition error: [..
-
스프링 시큐리티 요청 URI별 권한 처리할 때 문제상황 해결!프로그래밍/서버 프로그래밍 2019. 2. 19. 15:17
스프링 시큐리티 요청 URI별 권한 처리할 때 문제상황 해결! 스프링 시큐리티를 사용하는 프로젝트에서 /api/**는 authenticated()로 처리하고, /api/accounts로 들어오는 POST요청만 permitAll() 처리를 해줬는데 이게 실제 테스트코드에서 계속해서 실패하는 이슈가 있었다. 해당 코드는 @Override public void configure(HttpSecurity http) throws Exception { http.anonymous() .and() .authorizeRequests() .mvcMatchers("/api/**").authenticated() .mvcMatchers(HttpMethod.POST, "/api/accounts") .permitAll() .and(..