전체 글

안녕하세요. PS풀이, 개발일지 및 일기, 소소한 이야기를 적어가는 윤재 입니다.
· TIL ✍️
스프링 라이브러리 중에는 검증을 담당하는 validation 라이브러리가 있다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-validation' } build.gradle 에 이렇게 작성하면 사용할 수 있다. 이번 익명 게시판 API 만들기 과제에서 게시글의 필드값을 검증해야 했어서 이를 사용해봤다. import org.hibernate.validator.constraints.Length; import jakarta.validation.constraints.NotBlank; import lombok.Getter; /** * 게시글 생성 요청 DTO * 생성되기 전 암호화된 비밀번호로 변경이 필요 */ @Gette..
· TIL ✍️
멱등성(idempotent) 전산학이나 수학에서 사용하는 용어, 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질 (연산을 여러 번 반복하여도 한 번만 수행된 것과 같은 성질) f(f(x)) = f(x) 보통 이렇게 표현이 되곤 한다. 일단 한번 연산하면, 이후 몇 번을 연산해도 같은 결과가 나온다. 멱등 연산은 작업 수행 요청이 최소 한 번 발생하도록 보장되지만 두 번 이상 발생할 수도 있는 네트워크 프로토콜 설계에 자주 사용된다. 작업이 멱등적이면 작업을 두 번 이상 수행해도 결과는 한 번만 수행된 것과 동일하기 때문에 문제가 없기 때문이다. 멱등은 RESTful 웹 서비스의 맥락에서 많이 언급된다. REST는 웹 애플리케이션을 리소스로 구성한 다음 POST, PUT, GET 및 DELETE 등..
· TIL ✍️
주제 Http method 중 PUT 과 PATCH 의 차이가 뭘까 Http method 중 자원의 수정을 의미하는 메서드로는 PUT 과 PATCH 가 있다. 한 개만 있어도 될 것 같은데 왜 2개지?? 하는 의문으로 알아보았다. RFC 문서를 직접 찾아봤다. PUT은 자원을 대체(replace) 한다. 즉, 없으면 생성하고 있으면 기존 값을 버리고 요청값으로 바꾼다. (튜터님은 보통 프로젝트에선 성공 응답은 전부 200 OK 로 통일한다고 하고, 나도 이 방법이 더 좋다고 생각하지만 일단의 표준은) PUT 요청시 자원이 없다면 POST와 같이 새로 생성 후, 201 Created 를 응답한다. 자원이 있다면, 기존 자원을 대체 후 200 OK 나 204 NO CONTENT 를 응답한다. PUT 메서드를..
· TIL ✍️
문제 String.isEmpty(), String.isBlank() 의 차이점 역시.. ㅈㅎ님 코드리뷰 하다가 발견한 것들 적어본다. 코드리뷰할 때마다 TIL 쓸 것들이 쏟아진다. String 객체의 메서드 중에는 문자열이 비었는지 체크하는 메서드인 isEmpty() 와 메서드의 공백까지 체크해서 비었는지 확인하는 isBlank() 메서드가 있다. 코드리뷰를 하던 중 isEmpty() || isBlank() 를 함께 사용한 부분이 있어서 역시 리뷰의 근거?를 마련하고자 적어본다. 먼저 isEmpty() 메서드는 JAVA 6 에 추가된 메서드고, 문자열의 길이가 0일 경우 true를 반환한다. /** * Returns {@code true} if, and only if, {@link #length()} i..
· TIL ✍️
문제 String.matches(regex) 는 왜 반복사용시 Pattern.matcher(string).matches() 보다 느릴까 깃허브에서 추천을 타고타고 보다보면 다른 사람들이 코드리뷰 해놓은 것들도 볼 수 있는데, 그중에 종종 보이는게 String.matches는 느려서 Pattern 을 static 으로 해두고 써야해요! 라는 내용이 있다. ㅈㅎ님 코드리뷰를 하던 중에 마침 String.matches 를 써둔 게 있길래 리뷰의 근거를 마련하기 위해? 얼마나 느린지, 왜 느린지를 정리해보려고 한다. private static final Pattern PATTERN = Pattern.compile(".*[0-9].*"); static Function validateNumberWithPattern..
· TIL ✍️
문제 지급된 강의를 듣는 중, 왼쪽과 같이 MAJOR - STUDENT 테이블 간의 참조 화살표가 생겨야 하는데 오른쪽처럼 생기지 않는 문제가 있었다. CREATE TABLE IF NOT EXISTS MAJOR ( major_code varchar(100) primary key comment '주특기코드', major_name varchar(100) not null comment '주특기명', tutor_name varchar(100) not null comment '튜터' ); CREATE TABLE IF NOT EXISTS STUDENT ( student_code varchar(100) primary key comment '수강생코드', name varchar(100) not null comment ..
· TIL ✍️
문제String.repeat 은 왜 빠르고 StringBuilder.append 는 왜 느린가  오늘 ㅈㅎ님에게 코드 리뷰를 부탁받아서 보던 중에 인텔리제이의 요상한 추천을 받게 된다. public String getBar(int len) { StringBuilder sb = new StringBuilder(); for (int i = 0; i  String.repeat()으로 바꿀 수 있다고 추천하는거다. 바꾼 코드는 다음과 같다. public String getBar(int len) { return "-".repeat(len);}  문득, 둘 사이의 성능차이가 어느정도 날지가 궁금해졌다. 그래서 다음과 같이 테스트를 구상해봤다. public class StringTest { stati..
· TIL ✍️
오늘부터 스프링 강의가 시작됐다. 그리고 그에 맞춰 새로 팀편성이 됐는데 모두다 극 I다 ㅋㅋ,,, 어느 정도냐면,, 아침에 팀바뀌어서 모일 때 인사만 나눈 이후로 밤에 수업 끝나기 15분 전에 내가 용기내서 말 걸기 전까지 한 마디도 안 했다 하핫,, 그래도 간단히 자기소개 하고 조금은 아이스 브레이킹 한 것 같다. 스프링 강의 듣다가 8분 남짓한 그레이들 강의를 정리해두면 좋겠다 싶어서 적어보았다. 10분 테코톡을 참고했다. Gradle 2012년에 출시된 Groovy를 기반으로 한 오픈소스 빌드 도구로, 거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템 빌드 소스 코드를 컴파일, 테스트, 정적분석 등을 실행하여 실행 가능한 어플리케이션으로 만들어주는 과정 빌드 도구 등장 배경 다양한..
· TIL ✍️
피부과 다녀왔다. 두드러기가 이제 거의 없어져서 4일치 약 처방해줄테니 다 먹고 나으면 안 와도 된다고 했다. 벌써 의사분이랑 간호사분들, 약사분들 정들었는데 아쉽?네. 오늘은 하루종일 자바 개인 과제 리팩토링을 진행했다. 정말 대공사였다. 디렉토리 구조가 왼쪽에서 오른쪽으로 간.. 하루 내내 작업했다. 다 리팩토링 해두고 보니까 정말 깔끔하게 잘 해뒀다. 과제 피드백에서 나온 개선할 점들은 크게 4가지다. 1. 클래스 분리가 너무 과하다. 2. Input 인터페이스 분리가 과한 거 같다. 3. Order 의 역할이 없다. 4. 주석이 없다. 그래서 1, 2, 3번 다 삭제를 해버렸고, 주석도 public 클래스와 메서드에 대해서 다 javadoc 달아두었다. 그리고 InputUtil 클래스를 추가했고,..
yunjae62
윤재의 개발 블로그