본문 바로가기

전체 글

(45)
❓ @Controller, @RestController 차이점 시작하기 앞서 스프링에서 컨트롤러에 대한 어노테이션은 @Controller와 @RestController가 있다. 두 어노테이션의 가장 큰 차이점은 전통적인 스프링 MVC 컨트롤러에서 HTTP Response Body 생성 방식에 따라 구분되는데 더 자세히 알아보자. @Controller(Spring MVC Controller) 전통적인 스프링 MVC 컨트롤러 @Controller는 주로 View를 반환하기 위해 사용하며, 그림[1] 같은 과정을 거친다. @Controller는 주로 View를 반환하기 위해 사용하지만, @ResponseBody를 사용하여 객체를 반환 할 수도 있다. @Controller public class BasicController { @GetMapping("/good") publ..
🆃 트라이(Trie) 자료구조 🗣 서론 2020 카카오 블라인드 채용 1차 코딩 테스트 문제에서가사 검색 문제를 풀었다. 테스트 케이스도 정상적으로 돌아가서 제출 했는데 답은 맞았지만 효율성 부분에서 3개가 시간 초과되었다. 리팩토링을 했지만 결과는 같았다. 시간이 지나도 도저히 생각이 안나서해설을 봤다. 트라이 자료구조 또는 이분 탐색등 보다 효율적인 방법을 이용해 코드를 작성할 수 있는지 파악 자료구조에 대한 학습이 부족한 탓인지 트라이는 처음 들어봐서 이번 기회에 정리해보려고 한다. 📌 트라이(Trie)란? 많은 문자열 중에 특정 문자가 포함되어 있는지 검색하고 싶으면, 하나씩 비교하면서 알아내는 방법이 있다. 하지만 이러한 방법은 매우 비효율적이다. 트라이 자료구조를 사용하면 매우 빠른 속도로 문자열을 검색할 수 있다. 문자열..
⏰ WebTestClient Timeout WebTestClient를 사용했을 때, timeout 관련 예외가 발생했다. 아무래도 외부 API와 Connection 때문에 생긴 문제라고 생각이 든다. java.lang.IllegalStateException: Timeout on blocking read for 5000 MILLISECONDS ... 기본적으로 WebTestClient는 timeout이 5000 (5초)를 기본값으로 가진다. 계속해서 timeout 관련 예외가 발생한다면 아래와 같이 해결 할 수 있었다. @AutoConfigureWebTestClient(timeout = "10000") // 10 seconds @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDO..
👐 OSIV(Open Session In View) OSIV를 만나게 된 이유? 이동욱님의 글을 보면서 배포 환경을 구축했다. "JPA 사용시 OSIV 옵션은 끌것" 이라는 문구가 있었다. OSIV (...?) 설정을 하더라도 이게 뭔지는 알아야 한다고 생각해서 OSIV에 대해 알아봤다. OSIV란? Spring Boot에서는 Default로Open Session In View를 true로 설정하고 있다고 한다. OSIV는영속성 컨텍스트를 뷰 렌더링이 끝나는 시점까지 개방한 상태로 유지한다는 의미이다. 그렇다면 왜 등장하게 되었을까? 등장하게 된 이유? OSIV가 등장하게된 이유는 View 레이어에 연관된 객체를 사용하면,LazyInitializationException이 발생하게 되는데 이 부분에 대해 예제로 알아보자. findAll 메서드를 사용한다고..
🤷🏻 상수는 왜 Static과 Final을 같이 사용할까? 서론 아는 사람에게 상수는 아래와 같이 사용한다고 알려줬다. 그러자 static과 final은 왜 같이 써야하냐고 물어봤는데 대충 말했긴 했지만, 제대로 알지 못하면 모른다고 생각하기 때문에 이번 기회에 블로그에 정리하려고 한다. private static final String MESSAGE = "Hello World!"; 상수란? 일반적으로 상수는 불변의 값을 의미한다. 즉, 변하지 않는 값을 말한다. 예를 들어 수학에서 파이는 변하지 않는 값으로 이를 상수라고 한다. 자바에서 상수를 만들 때는 아래와 같이 사용하고 있다. private static final String MESSAGE = "Hello World!"; 다시, static과 final은 왜 같이 사용하는지 알아보자. final은 어떤 ..