분류 전체보기 102

16. ArgumentResolver사용하기, 로그아웃 기능 추가

ArgumentResolver란? 특정 요청이 Controller로 들어왔을때, 넘어온 값을 미리 가공하여 넘겨주는 작업을 해주는것. Controller단에서 중복되는 작업을 방지할 수 있다. ex)@Sign Annotation으로 User객체가 넘어온다면 세션에서 읽어서 가져오는 작업. 나는 ArgumentResolver를 사용해서, Home화면에 갔을때 로그인한 사용자라면 로그인전용 Home화면을, 로그인하지 않은 사용자라면 기본Home화면으로 보낼 생각이다. 순서는 다음과 같다. 1.@Sign Annotation 생성 경로(\src\main\java\com\project\domain\sign\Sign.java) package com.project.domain.sign; import java.lang..

[코드트리] X 달리기

이번에도 일어난 상황에 대해서 추론을 하여 적합한 답을 출력하는 문제다. 가야하는 거리가 주어지고, 시작속도를 1m/s로 시작해서 특정거리를 도달할때 다시 속도가 1m/s이여야 한다. 선택하여 속도를 1씩 늘리거나, 유지하거나, 1씩줄일수 있다. 가야하는 거리까지 가는데 가장 최단시간을 구해야한다. 오늘 뭔가 문제가 잘풀린다.. 나는 추론에 강한가,,, 후후후후,,,, Xm 만큼 달리기를 진행하려 합니다. 1m/s로 시작하되, 1초에 한 번씩 속도를 유지할 것인지, 1m/s 만큼 증가시킬 것인지, 1m/s 만큼 감소시킬 것인지를 결정할 수 있습니다. 단, 도착지에 도달하는 순간의 속력은 꼭 1m/s가 되어야만 합니다. 가능한 최단 시간을 구하는 프로그램을 작성해보세요. 단, 이동하는 도중 0m/s가 되어..

[코드트리] 코딩톡

일어난 상황에 대해서 추론을 하여 적합한 답을 출력하는 문제다. 메신저를 보낸사람과, 그 메시지를 보지않은 사람의 수들의 목록이 주어졌을때, 특정시점에서 해당 메시지를 읽지 않을 가능성이 있는사람을 출력하는 문제이다.. 어려움 난이돈데 금방 풀어서 기분이 좋고,, 아직 배우지는 않았지만 역탐색을 이용해서 처음 푼 문제이기때문에 기록한다. n명의 프로그래머들이 서로 채팅으로 대화할 수 있는 메신저방인 코딩톡에 초대되었습니다. 코딩톡 사람들의 이름은 'A'부터 n개의 대문자 알파벳이 순서대로 붙여져 있으며, 서로 대화를 하고 있습니다. 누군가 메신저방에 들어오게 되면, 이전에 보내진 모든 메세지를 읽게 됩니다. 각 프로그래머들이 언제 들어왔다가 나갔는지에 대한 정보는 전혀 없지만, 총 m개의 해당하는 메세지..

15. Spring Interceptor 적용하기

저번에는 사용자가 Servlet이 제공하는 Filter를 사용하여 웹을 관리했다. 지금부터는 Spring이 제공하는 Interceptor에 대해서 알아보고, 적용해보겠다. Interceptor 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response,..

14. Servlet Filter 적용하기

저번에는 사용자가 로그인 한 다음에 특정 값을 Session에 저장하여 로그인상태를 유지했다. 지금부터는 Servlet이 제공하는 Filter, Spring이 제공하는 Interceptor에 대해서 알아보고, 적용해보겠다. Filter Servlet이 제공하는 기능으로, WAS와 Servlet사이에서 공통관심사를 처리하기 위한 기능이다. Chain으로 구성되며, 중간에 필터를 자유롭게 추가할 수 있다. 필터 인터페이스를 구현하고 등록하면 서블릿 컨테이너가 필터를 싱글톤 객체로 생성하고, 관리한다 public interface Filter { public default void init(FilterConfig filterConfig) throws ServletException{} public void do..

[코드트리] 스승의 은혜3

진짜,,, 정말 쉬운문젠데,,,, 너무 어렵게 생각해서 못풀었던 문제라 반성하는 의미로 기록한다.. 하나의 객체에서 두개의 변수를 각각 정렬하고, 각각의 객체를 더해서 살수있는 물건의 갯수 찾는 문젠데,, 물건가격, 배송비 따로 정렬하려고 해서 특정 테스트케이스에서만 막혔다....... 정답은 물건가격이랑 배송비를 같이 더해서 오름차순 정렬하면 되는건데,, 막상 처음 틀리면 이생각이 절대 안난다... 흑흑 선생님이 N명의 학생에게 B만큼의 예산으로 선물을 주려고 합니다. 학생 i가 원하는 선물의 가격 P(i)와 배송비 S(i)가 있고, 선생님에게는 선물 하나를 정해서 반값으로 할인받을 수 있는 쿠폰이 있습니다. 선생님이 선물 가능한 학생의 최대 명수를 구하는 프로그램을 작성해보세요. 단, 선물의 가격은 ..

[코드트리] 상해버린 치즈

이 문제는 주어진 조건에 따라 완전탐색을 하며 그 최댓값을 찾는 문제이다. 이런 류 문제는 쉽지만 조건이 까다로워서 애먹었다. 이에 기록한다. N명의 사람이 M개의 치즈를 먹었는데 정확히 하나의 치즈가 상했다는것을 뒤늦게 알았습니다. 특정 사람이 어떤 치즈를 언제 먹었는지에 대한 기록이 총 D번 주어지고, 특정 사람이 언제 확실히 아팠는지에 대한 기록이 S번 주어지게 됩니다. 완벽하게 기록된 것이 아니기 때문에, 아프다고 기록되어 있는 사람 외의 다른 사람도 아플 수 있습니다. 상한 치즈를 먹은 사람에게 약을 복용시켜야 할 때, 약이 최대 몇 개나 필요할지를 구하는 프로그램을 작성해보세요. 단, 상한 치즈를 먹게 되면 1초가 지나야 아프기 시작하며, 상한 치즈를 먹지 않는 한 배가 아플 일은 없다고 가정..

13. 로그인 사용자 Session 처리하기

이전까지 간단한 회원가입기능을 만들었다.(아직 할게 많이 남음) 부가적인 기능은 추후로 미루고, 로그인과 관련된 다음 기능을 새로 추가하려고한다. 로그인기능(패스워드를 검증하고 로그인처리) 세션관리(로그인한 사용자를 세션에 담아 관리 일단 처음부터 시작을 해보자면,, login관련 HTML과 Controller, Service를 만들어야한다! 1.로그인 화면 HTML을 만든다. html소스는 다음과 같다. 로그인 글로벌 오류 메시지 로그인 회원가입 2.이 외에 추가로 회원가입을 위한 Form을 따로 만들었듯이, 로그인을 위한 Form을 따로 만들었다. package com.project.domain.sign; import jakarta.validation.constraints.NotBlank; impor..

12.회원가입 기능 만들기(2)

이전게시글에서는 HTML까지 다 만들었다. 이제 가장 중요한 Validation을 적용할 차례이다. 내가 검증할 사항은 다음과 같다. 이미 가입된 아이디로는 가입하지 못한다. 모든 필드는 필수입력이다. Email은 형식에 따라 작성한다. 크게는 이렇게 세가지인데, lombok이 제공하는 Bean Validation을 사용하여 아래와 같이 손 쉽게 검증이 가능하다. package com.project.domain.signup; import com.project.domain.user.SexType; import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.validation.constraints.Emai..