전체 글

배움의 즐거움
· Algorithm
문제온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.입력첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.출력첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.예제입력321 J..
· Spring
@DateTimeFormat 변환 처리에 대한 이해지정한 형식의 문자열을 LocalDateTime 타입으로 변환누가 LocalDateTime 타입으로 변환해줄까? WebDataBinderWebDataBinder스프링 MVC는 요청 매핑 애노테이션 적용 메서드와 DispatcherServlet 사이를 연결하기 위해 RequestMappingHandlerAdapter 객체를 사용한다.RequestMappingHandlerAdapter 객체는 요청 파라미터와 커맨드 객체 사이의 변환 처리를 위해 WebDataBinder를 이용한다.WebDataBinder는 커맨드 객체를 생성커맨드 객체의 프로퍼티와 같은 이름을 갖는 요청 파라미터를 이용해서 프로퍼티 값을 생성WebDataBinder는 직접 타입을 변환하지 않..
· Issue
문제 이슈Batch 프로그램을 개발하다가, 수동으로 Batch 실행 시, 파라미터를 입력받아 분기처리하는 로직이 있다.자동으로 Batch 실행 시, 해당 파라미터에는 Null 값이 들어와서 해당 파라미터를 분기하는 로직에서 NullPointerException이 발생하였다.문제 원인String agencyId = null; 일 때,if(agnecyId.equals("ALL"))이라는 구문이 존재였다.equals()함수를 사용할 때, null을 비교하면 NullPointerException이 발생하기 때문에 반드시 문자열이 앞으로 와야한다.기본이지만, 지키지 못하면 아주 치명적인 실수가 될 수 있다.String str1 = "test";String str2 = "test";boolean result = s..
· Spring
컨트롤러에서 쿠키 사용사용자의 편의를 위해 아이디를 기억하고, 다음에 로그인 시도 시, 아이디를 자동으로 넣어주는 사이트가 많음해당 기능을 구현하기 위해 쿠키를 사용한다.이메일 기억하기 기능 구현 방식로그인 폼에 '이메일 기억하기' 옵션 추가로그인 시에 '이메일 기억하기' 옵션을 선택했으면 로그인 성공 후 쿠키에 이메일 저장-> 쿠키는 웹 브라우저를 닫더라도 삭제되지 않도록 유효시간을 길게 설정이후 로그인 폼을 보여줄 때 이메일을 저장한 쿠키가 존재하면 입력 폼에 이메일을 보여준다.컨트롤러에 적용스프링 MVC에서 쿠키를 사용하는 방법 @CookieValue@CookieValue 애노테이션 : 요청 매핑 애노테이션 적용 메서드의 Cookie 파라미터에 적용@GetMappingpublic String for..
· Spring
로그인 하지 않은 상태에서 사용자의 정보(이름, 비밀번호 등)를 바꾸려고 할 때, 세션에서 커맨드 객체 검사하는 코드 추가@GetMappingpublic String form(@ModelAttribute("command") ChangePwdCommand pwdCmd, HttpSession session) { AuthInfo authInfo = (AuthInfo) session.getAttribute("authInfo"); return authInfo == null ? "redirect:/login" : "edit/changePwdForm";}실제 웹 어플리케이션에서는 위와 같이 비밀번호 변경 기능 외에 더 많은 기능에 로그인 여부를 확인해야하고, 코드 중복이 발생한다.이렇게 다수의 컨트롤러에 ..
· Algorithm
문제666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다.종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 1666, 2666,..
· Spring
컨트롤러에서 HttpSession 사용요청 매핑 애노테이션 적용 메서드에 HttpSession 파라미터 추가요청 매핑 애노테이션 적용 메서드에 HttpServletRequest 파라미터 추가 후, HttpServletRequest를 이용해서 HttpSession 구하기요청 매핑 애노테이션 적용 메서드에 HttpSession 파라미터 추가@GetMappingpublic String form(LoginCommand loginCommand, HttpSession session) { return "login/loginForm";}요청 매핑 애노테이션 적용 메서드에 HttpSession 파라미터가 존재할 경우 스프링 MVC는 컨트롤러의 메서드를 호출할 때 HttpSession 객체를 파라미터로 전달HttpS..
· Algorithm
문제어떤 단어를 뒤에서부터 읽어도 똑같다면 그 단어를 팰린드롬이라고 한다. 'radar', 'sees'는 팰린드롬이다.수도 팰린드롬으로 취급할 수 있다. 수의 숫자들을 뒤에서부터 읽어도 같다면 그 수는 팰린드롬수다. 121, 12421 등은 팰린드롬수다. 123, 1231은 뒤에서부터 읽으면 다르므로 팰린드롬수가 아니다. 또한 10도 팰린드롬수가 아닌데, 앞에 무의미한 0이 올 수 있다면 010이 되어 팰린드롬수로 취급할 수도 있지만, 특별히 이번 문제에서는 무의미한 0이 앞에 올 수 없다고 하자.입력입력은 여러 개의 테스트 케이스로 이루어져 있으며, 각 줄마다 1 이상 99999 이하의 정수가 주어진다. 입력의 마지막 줄에는 0이 주어지며, 이 줄은 문제에 포함되지 않는다.출력121 -> yes1231..
· Spring
Bean Validation@Valid 애노테이션은 Bean Validation 스펙에 정의되어 있음@NotNull, @Digits, @Size 등의 애노테이션 정의해당 애노테이션을 사용하면 Validator 작성 없이 애노테이션만으로 커맨드 객체의 값 검증을 처리가능Bean Validation 2.0 버전을 JSR 380 이라고 부른다.JSR : Java Specification Request, 자바 스펙 기술 문서각 스펙마다 고유한 JSR 번호를 가지는데, Bean Validation 1.0 : JSR 303, 1.1 : JSR 349Bean Validation 제공 애노테이션을 이용하여 커맨드 객체 값 검증Bean Validation과 관련된 의존 설정 추가커맨드 객체에 @NotNull, @Digi..
· Spring
@InitBinder 애노테이션컨트롤러 범위 Validator 설정 가능package controller;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.Errors;import org.springframework.validation.annotation.Validated;import org.springframework.web.bind.WebDataBinder;import org.springframework.web.bind.annotation.GetMapping;import org.s..
runnnerDevHong
러닝개발자의 기술블로그