Java
[Spring] @Valid를 이용한 유효성검증
유효성 검사(Validation)란? 사용자가 폼 페이지에서 입력한 데이터 값이 서버로 전송되기 전에 규칙에 맞게 입력되었는지 검증하는 것. 검증이 필요한 이유는? 보안 공격, 잘못된 데이터, 사용자의 실수로 누락되거나 오류를 방지할 수 있다. 검사는 어디서 할까? 서버와 화면 중 어디서 유효성 검사를 해야할까? 정답부터 말하면 둘 다 필요하다. 프론트단에서만 검사를 하면 프론트는 강제로 값을 넣을 수 있다. 프론트단에서 검사를 하고 서버에서도 검사를 하고 데이터를 DB에 저장을 해야 안전하게 올바른 데이터를 저장할 수 있다. 이번 게시글은 서버에서 유효성 검사를 하는 @Valid 어노테이션에 대해서 알아보자. @Valid 어노테이션 종류 더보기 Anotation 제약조건 @NotNull Null 불가 ..
[백준] 11399번 ATM 인출 시간 계산하기
문제설명 더보기 문제 인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 사람들이 줄을 서는 순서에 따라서, 돈을 인출하는데 필요한 시간의 합이 달라지게 된다. 예를 들어, 총 5명이 있고, P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2 인 경우를 생각해보자. [1, 2, 3, 4, 5] 순서로 줄을 선다면, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분..
[JAVA] Comparable, Comparator이란?
Comparable/Comparator 두 인터페이스는 객체를 비교할 수 있도록 만드는 기능을 갖고있다. 객체를 비교한다? 이해가 쉽지않다. 잘 생각해보자, 만약, primitive 타입의 실수 변수의 경우엔 부등호를 갖고 쉽게 비교가 가능하다. 하지만 객체 끼리 비교는 그 기준이 모호하여 비교가 힘들다. 자동차로 비교를 해보자 안곰돌과 이승냥은 서로 좋은 자동차를 선택 하려고 한다. 안곰돌의 "좋은 자동차"의 조건은 최근 연식의 자동차가 좋은 자동차이다. 하지만 이승냥의 "좋은 자동차"의 조건은 높은 배기량이 좋은 자동차이다. 안곰돌과 이승냥의 "좋은 자동차"를 고르기를 한다면 서로 다른 종류의 자동차를 선택할 것이다. 따라서 객체 끼리의 비교는 그 "기준"이 필요하며 그 "기준"을 정하고 서로 비교를..
[Spring boot]oEmbed 사이트 만들기 /사용법 /코드 포함/
oEmbed란? oEmbed 공식사이트 에 따르면, oEmbed는 다른 사이트 URL을 내장된 표현을 가능하게 하는 Format입니다. 유저가 Resource를 직접 파싱하지 않고 리소스에 대한 링크를 게시할 때 웹 사이트에서 포함된 사진 또는 비디오를 표시할 수 있습니다. 기술 스택 Bace-end : Spring boot '2.6.6' front-end : 바닐라 js 기능 구현하기 각 사이트마다 oEmebed 요청하는 주소가 다르므로 입력을 받으면 각각 다르게 처리를 하여 해당 사이트 형식으로 요청을 해야한다. 필자는 youtube와 vimeo를 구현을 했다. 순서 구조를 크게 나누면 client -> controller -> service-> dataHandler-> jsonHandler-> co..
[백준] 1253번 '좋은 수' 구하기
문제설명 더보기 문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) 출력 좋은 수의 개수를 첫 번째 줄에 출력한다. 문제풀이 시간복잡도 N의 최대 개수가 최대 2000이라 가정해도 좋은 수 하나를 찾는 알고리즘의 시간복잡도는 N^2보다 작아야 한다. 따라서 알고리즘의 시간 복잡도는 최소 O(nlongn)이어야 한다. 따라서 투 포인터 알고리즘을 사용하면..
[백준] 1940번 주몽의 명령
문제설명 더보기 문제 주몽은 철기군을 양성하기 위한 프로젝트에 나섰다. 그래서 야철대장을 통해 철기군이 입을 갑옷을 만들게 하였다. 야철대장은 주몽의 명에 따르기 위하여 연구에 착수하던 중 아래와 같은 사실을 발견하게 되었다. 갑옷을 만드는 재료들은 각각 고유한 번호를 가지고 있다. 갑옷은 두 개의 재료로 만드는데 두 재료의 고유한 번호를 합쳐서 M(1 ≤ M ≤ 10,000,000)이 되면 갑옷이 만들어 지게 된다. 야철대장은 자신이 만들고 있는 재료를 가지고 갑옷을 몇 개나 만들 수 있는지 궁금해졌다. 이러한 궁금증을 풀어 주기 위하여 N(1 ≤ N ≤ 15,000) 개의 재료와 M이 주어졌을 때 몇 개의 갑옷을 만들 수 있는지를 구하는 프로그램을 작성하시오. 입력 첫째 줄에는 재료의 개수 N(1 ≤..
[백준] 2018번 연속된 자연수의 합 구하기
문제설명 더보기 문제 어떠한 자연수 N은, 몇 개의 연속된 자연수의 합으로 나타낼 수 있다. 당신은 어떤 자연수 N(1 ≤ N ≤ 10,000,000)에 대해서, 이 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 알고 싶어한다. 이때, 사용하는 자연수는 N이하여야 한다. 예를 들어, 15를 나타내는 방법은 15, 7+8, 4+5+6, 1+2+3+4+5의 4가지가 있다. 반면에 10을 나타내는 방법은 10, 1+2+3+4의 2가지가 있다. N을 입력받아 가지수를 출력하는 프로그램을 작성하시오. 입력 첫 줄에 정수 N이 주어진다. 출력 입력된 자연수 N을 몇 개의 연속된 자연수의 합으로 나타내는 가지수를 출력하시오 문제풀이 package doit_java; import java.io.Buffered..
[알고리즘] Two Pointers 알고리즘이란?
투포인터 알고리즘이란? 투포인터 알고리즘 또는 슬라이딩 윈도우라고 부른다. 1차원 배열이 있고, 배열에서 각자 다른 원소를 카리키고 있는 2개의 포인터를 조작하면서 원하는 값을 얻는 방법이다. 설명 1. 포인터 2개를 준비 , start_index , end_index 2. 항상 start_index