국내 AI 인공지능 회사인 업스테이지에서 ChatGPT 서비스인 AskUp 채널을 카카오톡에 출시했어요. 출시 3일인 오늘 벌써 카카오톡 채널 친구가 현재 5만 명을 넘었어요. 업스테이지는 OCR 기술까지 더해 이미지를 보내면 바로 이미지에 존재하는 글자 수를 계산해 주고, 텍스트로 변환해주는 등의 기술도 제공해주고 있어 인기가 많아요. 한글 번역해주는 확장 프로그램을 설치해서 사용하고 있었는데, 굉장히 편해서 그런지 인기가 엄청나네요. 그럼 바로 사용해보도록 할게요. AskUp 사용하기 먼저 카카오톡 채널 친구로 등록하기 위해 하단의 링크를 통해 접속이 필요해요. http://pf.kakao.com/_BhxkWxj AskUp ChatGPT를 카톡에서! 업스테이지에서 제공하는 이미지 글씨도 이해하는 눈뜬..
@RestControllerAdvice + @ExceptionHandler 란? Spring에서 예외 처리를 할 때 Global 영역에서 관리해 주는 기능으로 @ControllerAdvice, @RestControllerAdvice를 사용합니다. 먼저 각 어노테이션 별로 간단하게 짚고 넘어가겠습니다. @ControllerAdvice vs @RestControllerAdvice ControllerAdvice 어노테이션을 살펴보면, 대상을 지정하지 않은 모든 컨트롤러에 @ExceptionHandler와 @InitBinder의 기능을 적용해 준다고 합니다. // 패키지 하위 모두 적용 @ControllerAdvice("org.bot.controllers") public class Advice1{} // 특정 ..
Mocking 이란? Controller Test를 위해선 Mocking에 대해 알고 있어야 하는데요. Mock은 테스트를 위해 실제 객체를 사용하는 것처럼 테스트를 위해 만든 모형으로 가짜 객체를 의미합니다. Mock을 이용해서 테스트하는 과정을 Mocking이라고 부르며, 웹 애플리케이션 환경에선 Servlet Container와 Dispatcher Servlet이 메모리에 로딩되지만, Mocking을 하면 실제 테스트 컨테이너를 사용하기 때문에 Mocking을 통해 의존성을 단절시킨 상태로 테스트할 수 있습니다. SpringBoot 환경에서 테스트 코드를 작성할 때 @SpringBootTest + @AutoConfigureMockMvc 또는 @WebMvcTest를 사용하는데요. 차이점을 가볍게 알아..
@WithMockUser @WithMockUser 어노테이션은 Controller 테스트 시에 Spring Security에 설정한 인증 정보를 제공해 주는 역할을 합니다. 정확히는 사용자 인증 정보를 담은 Authentication을 UsernamePasswordAuthenticationToken으로 넣어주고, Principal은 User 객체에 넣어 SecurityContext에 보관해 준다. 어떻게 적용되는 것인지 살펴보자. @SpringBootTest @AutoConfigureMockMvc public class PostControllerTest { @Autowired private MockMvc mockMvc; @Autowired private ObjectMapper objectMapper; @..
Filter 소개 Filter는 애플리케이션 레벨에서 로그인, 시큐리티, Jwt 등 구현을 하다 보면 Dispatcher Servlet에 도달하기 전 요청에서 토큰 검사 등 유효성 검사를 처리하기 위해 사용되며 Chaining 방식으로 여러 개의 필터를 설정할 수 있습니다. 필터는 Spring Context 내부에 도달하기 전인 WAS 인입 시점에 로직을 처리해 줍니다. Filter 인터페이스를 살펴보면 doFilter 메서드가 보이는데, 이 메서드가 다음에 체이닝 할 필터가 있으면 다음 필터로 넘겨주고, 없으면 서블릿을 호출해 줍니다. public interface Filter { public default void init(FilterConfig filterConfig) throws ServletEx..
정규 표현식이란? 정규 표현식(regular expression)은 특정 규칙을 가진 문자열을 특정 패턴으로 사용하는 표현식을 의미합니다. Java, Python, Ruby, JavaScript 등 대부분의 프로그래밍 언어에서 정규 표현식을 라이브러리로 제공하고 있습니다. 정규 표현식 사용법 정규 표현식을 사용하기 위해선 사용되는 패턴에 대해서 알고 있어야 하는데요. 자주 사용되는 부분을 간략하게 정리해두었어요. 상세한 내용은 예전에 포스팅한 정규표현식 링크를 확인해 주세요! https://sasca37.tistory.com/99 [JAVA] - 정규표현식 regex 정규 표현식 Regular Expression 특정한 규칙을 가진 문자열의 집합 JDK 1.4부터 제공 검색 ^ : 문자열 시작부터 $ :..
Heroku 란? Heroku에 대해 간단하게 알아보자. Heroku는 클라우드 서비스 중 하나로, dynos라는 리눅스 런타임 애플리케이션 관리 컨테이너를 통해 사용자가 직접 서버를 관리하지 않아도 되는 PaaS 형 플랫폼을 제공해 준다. (Node, Java, Python, Go 등 거의 대부분의 언어 지원) 사용자가 github에 푸시를 하면 해당 애플리케이션을 빌드하고 slug 타입으로 배포해 주어 AWS 등과 비교해 봤을 때 편하게 배포할 수 있다는 장점이 있다. 단, 버전 설정과 같은 인프라 설정은 제공하지 않기 때문에 디테일한 설정이 필요한 경우엔 불편한 점이 있어 장단점이 존재한다. 작년 11월까지는 무료로 dynos 컨테이너를 제공해왔지만 현재는 유료버전으로 변경되어 구독 방식으로 월 $..
화살표 함수 (Arrow Function) 자바스크립트 ES6부터 => 화살표를 이용해서 익명 함수를 선언하는 Arrow Function이 도입되었다. Arrow Function을 사용하면 코드가 간결해진다. 자바스크립트에서 ES란 ECMASCRIT로 자바스크립트의 표준을 나타내는 용어이다. 2015년부터 ES6가 등장하였으며, 이후 ESXXXX 로 나타내고 있다. 문법 Syntax // 파라미터가 없는 경우 () => expression // 파라미터가 하나인 경우 (param) => expression param => expression param => { statements } // 파라미터가 여러개 인 경우 (paramA, paramB) => expression (paramA, paramB) =>..