Programming/Back-end Language
[Spring] @Valid를 이용한 유효성검증
유효성 검사(Validation)란? 사용자가 폼 페이지에서 입력한 데이터 값이 서버로 전송되기 전에 규칙에 맞게 입력되었는지 검증하는 것. 검증이 필요한 이유는? 보안 공격, 잘못된 데이터, 사용자의 실수로 누락되거나 오류를 방지할 수 있다. 검사는 어디서 할까? 서버와 화면 중 어디서 유효성 검사를 해야할까? 정답부터 말하면 둘 다 필요하다. 프론트단에서만 검사를 하면 프론트는 강제로 값을 넣을 수 있다. 프론트단에서 검사를 하고 서버에서도 검사를 하고 데이터를 DB에 저장을 해야 안전하게 올바른 데이터를 저장할 수 있다. 이번 게시글은 서버에서 유효성 검사를 하는 @Valid 어노테이션에 대해서 알아보자. @Valid 어노테이션 종류 더보기 Anotation 제약조건 @NotNull Null 불가 ..
[JAVA] Comparable, Comparator이란?
Comparable/Comparator 두 인터페이스는 객체를 비교할 수 있도록 만드는 기능을 갖고있다. 객체를 비교한다? 이해가 쉽지않다. 잘 생각해보자, 만약, primitive 타입의 실수 변수의 경우엔 부등호를 갖고 쉽게 비교가 가능하다. 하지만 객체 끼리 비교는 그 기준이 모호하여 비교가 힘들다. 자동차로 비교를 해보자 안곰돌과 이승냥은 서로 좋은 자동차를 선택 하려고 한다. 안곰돌의 "좋은 자동차"의 조건은 최근 연식의 자동차가 좋은 자동차이다. 하지만 이승냥의 "좋은 자동차"의 조건은 높은 배기량이 좋은 자동차이다. 안곰돌과 이승냥의 "좋은 자동차"를 고르기를 한다면 서로 다른 종류의 자동차를 선택할 것이다. 따라서 객체 끼리의 비교는 그 "기준"이 필요하며 그 "기준"을 정하고 서로 비교를..
[JAVA] BufferedReader와 StringTokenizer 사용법
BufferedReader란? JAVA에서 입력방식은 Scanner와 BufferedReader가 있다. Scanner를 통해 입력을 받을경우 Space Enter를 모두 경계로 인식하기에 입력받은 데이터를 가공하기 매우 편리하다. 하지만 BufferedReader는 Enter만 경계로 인식하고 받은 데이터는 String으로 입력을 받기 때문에 가공을 해야하는 작업이 필요하다. 하지만 작업속도 차이가 많이 나기 때문에 BufferedReader를 이용하여 입력 받는 것이 훨씬 효율적이다. BufferedReader사용법 public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new I..
[JAVA] ConcurrentModificationException 오류 원인 및 해결 방법
프로그래머스 문제를 풀다가 ConcurrentModificationException 예외가 발생했다. 이 예외는 list나 ArrayList를 for문에 직접 넣어서 돌다가 remove를 호출하면 발생한다. for문에서 돌아가는 list가 remove를 호출하면 크기가 줄어들게 되고 size값이 맞지 않기 때문에 발생한다. 예를들면 ArrayList list = new ArrayList(); for(rep : list){ if(rep.equals("sanha")){ list.remove(rep); System.out.println(rep+ "는 sanha 삭제할게요~") } } 해결법. ArrayList list = new ArrayList(); Iterator iter = list.iterator();..
[JAVA] 컬렉션 프레임워크란? (List/Set/Map)
서론 배열을 사용하다 보면 크기가 고정적으로 여러가지 비효율적인 문제가 생긴다. 이러한 문제점을 해결하기 위해 데이터들을 효율적으로 관리하기 위한 자료구조를 만들었다. 이런 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 한다. 순서대로 알아보자. List 컬렉션 -> 객체를 일렬로 늘어놓은 구조이다. 객체를 인덱스로 관리하며 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다. List컬렉션은 객체의 번지를 참조한다. List 클래스 주요 메서드 boolean add(E e) 주어진 객체를 맨 끝에 추가 void add(int index, E element) 주어진 인덱스에 객체를 추가합니다. set(int index, E element) 주어진 인덱스에 ..
[JAVA] Servlet HTTP 응답 데이터(Response) TEXT/ HTML / JSON
서론 HTTP 응답 메시지는 텍스트, HTML , JSON 내용을 담아서 전달한다. 각각의 사용법을 알아보자. 단순 데이터 응답 @WebServlet(name = "responseTextServlet", urlPatterns = "/response-text") public class ResponseJsonServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Contetnt-Type : application/json response.setCharacterEncoding("u..
[Spring] Http API Json 형식 데이터 받고 출력하기
서론 HTTP API 에서 주로 사용하는 JSON 형식으로 데이터를 전달하고 출력하는 방법을 알아보자. JSON란? JavaScript Object Notation이라는 의미의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환형식이다. 특징 서버와 클라이언트 간의 교류에서 일반적으로 많이 사용된다. 자바스크립트 객체 표기법과 아주 유사하다. 다른 프로그래밍 언어를 이용해서도 쉽게 만들 수 있다. 결과 Json 형식으로 파싱할 수 있게 객체생성 // HelloData import lombok.Getter; import lombok.Setter; @Getter @Setter public class HelloData { private String username; private int..
[JAVA] Http 요청 데이터 -GET쿼리 파라미터 사용 방법
서론 HTTP 요청 메시지를 통하여 클라이언트에서 서버로 데이터를 전달하는 방법은 3가지가 있다. 1. GET - 쿼리 파라미터 2. POST- HTML Form 3.HTTP message body에 데이터를 직접 담아서 요청 본 게시글에서는 GET-쿼리파라미터로 전달하는 방법을 알아보자. GET - 쿼리 파라미터 /url?key값=value값&key값=value값 메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달 결과 1. 단일 파라미터 조회 http://localhost:8080/request-param?username=hello&age=20 @WebServlet(name="requestParamServlet", urlPatterns = "/request-param") public..