지금까지 스프링 관련해서 여러 공부를 하였지만, 정작 게시판 하나 제대로 만들어본 적이 없었습니다. (맨날 친구들이랑 만든다고 하다가 결국 다 중간에 멈춰버렸습니다.) 제가 프론트엔드를 다루지 못하다보니, 실제 데이터가 눈에 보여지는것도 확인하기 어렵고, 그러다보니 재미도 없어지고 그래서... 사실 그렇게 같은 작업만 3~4번 반복하고 실제로 만들어진 결과물이 없다보니 현타가 조금 왔습니다. 그렇게 이론 공부만 계속 뺑뺑이 돌리던 중에,, 오늘 스프링 오픈채팅방에 어떤 한분이 게시판 댓글에 대해서 질문한 것을 보았습니다. "에브리타임" 서비스처럼 댓글 하나에, 대댓글이 무한정 달릴 수 있는 구조의 댓글을 만드는데 어려움을 가지고 계셔서 질문을 올리셨는데, 사실 저도 이게 예전부터 매우 궁금했습니다. 댓글..
오늘 공부한 내용 [스프링 MVC1편] 완강 [인프런 - 스프링 시큐리티] ignoring() 듣기 [Modern Java In Action] 3장, 람다 표현식 마무리 💭느낀 점 & 배운 점 [스프링 MVC1편] 을 완강했다. 사실 대부분을 이미 한번 들었던 것들이어서 시간낭비라는 느낌을 조금 받기도 했는데, 메세지 컨버터와 ArgumnetResolver, ReturnValueHandler의 작동 방식에 대해 이전에는 이해를 못하고 넘어갔었는데 이번에 복습하며 이해했다. 왜 모르고 넘어갔으면서 지금까지 복습 안했는지는 나도 참 의문이지만... 아무튼 다행이었다. 지금까지 HttpSecurity만 사용하고 WebSecurity는 왜 있는거지? 했었는데 오늘 수업을 듣고 알게되었다. WebSecurity를..
🧐 HttpMessageConverter @RequestBody나 @ResponseBody는 메시지 바디에 들어있거나 메세지 바디에 작성되는 문자 혹은 JSON 등의 데이터를 String 또는 객체로 바로 변환하여 사용할 수 있게 해줍니다. 이와 같이 HTTP 메시지 바디의 내용을 개발자가 사용하게 편리하도록 변환하여 주는 역할을 HttpMessageConverter가 담당합니다. HttpMessageConverter는 @RequestBody, HttpEntity가 파라미터에 붙어있는 경우, 그리고 반환 시 @ResponseBody 혹은 HttpEntity를 사용하는 경우 작동합니다. 🧐 HttpMessageConverter 구조 HTTP 메시지 컨버터는 인터페이스로 이루어져 있습니다. public in..
🧐 Http 요청 헤더 조회 예시를 통해 살펴보겠습니다. import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpMethod; import org.springframework.util.MultiValueMap; import org.springframework.web.bind.annotation.CookieValue; import org.springframework.web.bind.annotation.RequestHeader; import org.springframe..
🧐 @RequestMapping 요청된 url에 대해서 매핑하기 위하여 사용합니다. 예를 들어 다음과 같습니다. @RequestMapping("/hello-basic") public String helloBasic() { return "ok"; } @RequestMapping을 처리하는 HandlerMapping과 HandlerAdapter는 다음과 같습니다. RequestMappingHandlerMapping RequestMappingHandlerAdapter 🧐 URL 경로에 대한 매핑 @RequestMapping("/hello") /hello 로 URL 호출이 오면 이 메서드가 실행되도록 매핑합니다. 대부분의 속성을 배열로 제공하므로 다음과 같이 다중 설정도 가능합니다. {"/hello", "/hi..
🧐 서론 이전 글에서 스프링 MVC의 전체적인 구조를 간략하게 살펴보았습니다. 이때 HandlerMapping과 HandlerAdapter를 사용하는 것을 알 수 있었는데, 이번에는 이에 대해서 알아보도록 하겠습니다. 🧐 Controller가 호출되기 위한 조건 저희가 작성하는 Controller(혹은 Handler)가 호출되기 위해서는 아래와 같은 두 가지 조건이 만족되어야 합니다. 1. 요청(Request) URL이 들어오면, 해당 요청에 대응되는 Controller(Handler)를 HandlerMapping 속에서 찾을 수 있어야 합니다. 2. HandlerMapping을 통해 찾은 Controller(Handler)를 실행할 수 있는 HandlerAdapter가 필요합니다. 실행 흐름은 다음과 ..
logging.level.mvc.study=info mvc와 study는 패키지 이름들이다. mvc.study 패키지와 그 하위 폴더의 로그 레벨을 설정한다. trace debug info(기본값) warn error 아래로 갈 수록 로그 레벨이 올라간다. (개발을 debug, 운영은 info를 추천한다) 참고 String world = "world"; log.info("hello" +world); //X log.info("hello{}",world); //O 처음과 같이 문자열 더하기 식으로 연산을 진행하는 경우, 로그 레벨이 info 위라면, 출력되지도 않는 로그를 위한 문자열 더하기 연산이 발생하므로, 아래와 같은 방법으로 쓰도록 하자
문제 동빈이는 N x M 크기의 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야 한다. 동빈이의 위치는 (1, 1)이고 미로의 출구는 (N, M)의 위치에 존재하며 한번에 한 칸씩 이동할 수 있다. 이때 괴물이 있는 부분은 0으로, 괴물이 없는 부분은 1로 표시되어 있다. 미로는 반드시 탈출할 수 있는 형태로 제시된다. 이때 동빈이가 탈출하기 위해 움직여야 하는 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작 칸과 마지막 칸을 모두 포함해서 계산한다. 입력 조건 첫째 줄에 두 정수 N, M(4 = N || dy = M) { continue; } if (graph.get(dx).get(dy).equals(0)) { continue; } //gra..