반응형 분류 전체보기1065 [TIL] : 111 일일 배움을 위한 Today I Learned ! Spring Boot 스프링 부트 강의를 마저 듣고 있다 Bean Validation에 관한 내용을 공부하고 있다. 2022.02.14 - [Framework/Spring Boot] - [Spring Boot] : Bean Validation 소개 및 스프링 적용하기 JavaScript 30일 챌린지 18일차 코딩을 했다. 아직은 JS에 익숙해 지는 것이 목표이다. 2022.02.14 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 18일차 2022. 2. 14. [JavaScript 30일 챌린지] : 18일차 18일차 reduce와 map을 통해 동영상의 모든 시간을 다 합쳐서 나타내는 코드였다. 2022. 2. 14. [Spring Boot] : Bean Validation 소개 및 스프링 적용하기 Bean Validation 소개 및 스프링 적용하기 검증 기는을 위해 매번 코드를 작성하지 않아도 어노테이션을 활용하여 검증을 할 수 있었다. @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; 이렇게 어노테이션을 활용해서 검증 로직을 사용할 수 있게 공통화, 표준화 한 것이 Bean Validation이다. Bean Validation은 구현체가 아닌 검증 어노테이션과 여러 인터페이스의 모음이다. Bean Validation을 구현한 기술 중 일반적으로 사용하는 구현체가 하이버네이트 Validator이다.(이름이 하이버네이트지만 ORM과 상관이 없다.) Bean Valida.. 2022. 2. 14. [TIL] : 110 일일 배움을 위한 Today I Learned ! JavaScript 30일 챌린지 관사를 제외하고 정렬하는 JS를 코딩했다. 2022.02.13 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 17일차 오류 노트 도커에서 컨테이너를 생성하고 아파치를 설치하고 실행시키는 과정에서 생긴 문제에 대해 기록했다. 2022.02.13 - [노트/오류 노트] - [오류 노트] : proxy: listen tcp4 0.0.0.0:80: bind: address alr eady in use 2022. 2. 13. [JavaScript 30일 챌린지] : 17일차 17일차 스크립트 부분 코드이다. 이번에는 정렬을 했는데 족므 특이한 정렬이다. sort()를 사용했는데 관사(a, an, the)를 제외하고 정렬했다. replace로 변경될 문자열과 변경할 문자열을 지정해서 a, an, the를 바꿔주었다. 2022. 2. 13. [오류 노트] : proxy: listen tcp4 0.0.0.0:80: bind: address alr eady in use sudo /etc/init.d/apache2 stop 문제 Error response from daemon: driver failed programming external connectivity on e ndpoint mywebserver (): Error starting userland proxy: listen tcp4 0.0.0.0:80: bind: address alr eady in use 도커(docker)에서 컨테이너를 시작하려고 docker start mywebserver를 했는데 위와 같은 오류가 떴다. 80포트가 사용중인 게 문제였다. 해결 sudo /etc/init.d/apache2 stop 전에 실험삼아 돌렸던 아파치가 문제였다. 아파치를 종료해 주었더니 정상적으로 돌아왔다. 2022. 2. 13. [TIL] : 109 일일 배움을 위한 Today I Learned ! JavaScript 30일 챌린지 16일차 마우스 이펙트 처리를 코딩했다. 2022.02.12 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 16 2022. 2. 12. [JavaScript 30일 챌린지] : 16일차 16일차 마우스를 움직여 글자의 그림자를 움직이는 코드를 짰다. 단순하게 글이 있는 것 같지만 마우스를 움직여 보면 글자의 그림자가 분리되어 움직이게 된다. 2022. 2. 12. [TIL] : 108 일일 배움을 위한 Today I Learned ! Spring Boot 김영한님 스프링 부트 강의를 오늘도 들었다. 어제 듣고 남은 한 섹션을 모두 다 들었고 내일부터는 또 다음 섹션을 나갈 예정이다. 2022.02.11 - [Framework/Spring Boot] - [Spring Boot] : 오류 코드와 메시지 처리(1) 2022.02.11 - [Framework/Spring Boot] - [Spring Boot] : 오류 코드와 메시지 처리(2) 2022.02.11 - [Framework/Spring Boot] - [Spring Boot] : 어떻게 오류 코드를 설계 할 것인가? 2022.02.11 - [Framework/Spring Boot] - [Spring Boot] : MessageCod.. 2022. 2. 11. [JavaScript 30일 챌린지] : 15일차 15일차 최종 코드 체크 박스가 있는 메모를 추가할 수 있는 프로젝트를 만들었다. 새로고침을 해도 초기화 되지 않고 로컬 저장소에 저장이 되게끔 만들었다. localStorage.setItem('items', JSON.stringify(items)); 로컬 저장소에 저장할 때 문자열 JSON 형식으로 저장해야 한다. 2022. 2. 11. [Spring Boot] : Validator 분리(2) Validator 분리 2 스프링이 Validator 인터페이스를 별도로 제공하는 이유가 체계적으로 검증 기능을 도입하기 위해서라고 한다. 이번에는 Validator인터페이스를 사용해 검증기를 만들어 스프링의 추가적인 도움을 받아 적용해 보는 강의를 들었다. @InitBinder //항상 호출이 되다. 여기에서 검증기를 넣는다. 이 컨트롤에서만 실행이 된다. public void init(WebDataBinder dataBinder) { dataBinder.addValidators(itemValidator); } @InitBinder를 만들어 주었다. InitBinder는 컨트롤러가 호출이 될 때마다 항상 호출이 된다. 여기에 검증기를 넣었다 지금은 이 컨트롤러에서만 실행이 되는데 @SpringBootA.. 2022. 2. 11. [Spring Boot] : Validator 분리(1) Validator 분리 1 길고 복잡한 검증 로직을 컨트롤러에서 떼어내는 작업을 했다. 어떻게 떼어냈냐면 따로 클래스를 만들고 여기에 검증 로직을 넣었다. 그리고 컨트롤러에서 불러서 사용하기만 하면 되는 구조로 변경하였다. @Component public class ItemValidator implements Validator { @Override public boolean supports(Class clazz) { return Item.class.isAssignableFrom(clazz); } @Override public void validate(Object target, Errors errors) { Item item = (Item) target; 검증 로직 들어가는 부분 } 이렇게 코드를 짜주었다.. 2022. 2. 11. [Spring Boot] : 검증 오류 코드 2가지 확인하기 검증 오류 코드는 2가지로 나눌 수 있는데 개발자가 직접 설정한 오류 코드와 스프링이 직접 검증 오류에 추가한 경우 이 두가지가 있다. 예를 들면 가격은 Integer로 설정이 되어 있는데 String 값이 들어가면 위와 같은 오류가 난다. typeMismatch.java.lang.Integer=숫자를 입력해주세요. typeMismatch=타입 오류입니다. 로그에 출력된 타입 오류 코드를 errors.properties에 추가하고 다시 돌려본다. 스프링이 만든 오류 메시지가 뜨지 않고 위에서 설정한 오류 메시지가 나오게 된다. 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다. 2022. 2. 11. [Spring Boot] : 구체적에서 덜 구체적으로 오류 코드 메시지 처리하기 강의에서 핵심은 구체적 → 덜 구체적으로 만들어 주는 것이 핵심이라고 했다. 그것을 강의에서 레벨로 표현하여 알려주었는데 아래와 같다. #==FieldError== #Level1 required.item.itemName=상품 이름은 필수입니다. #Level2 - 생략 #Level3 타입을 알 수 있다. required.java.lang.String = 필수 문자입니다. #Level4 required = 필수 값 입니다. 레벨 1이 먼저 매칭되고 1이 없다면 그 다음 2가 매칭이 된다. 그 다음이 3, 4순으로 매칭이 되게 된다. 만드는 순서는 4부터 만들지만 매칭되는 순서는 1부터 매칭이 되는 것이다. 검증 오류 메시지가 발생하면 레벨 1순으로 MessageSource에서 찾게되는 것이다. 이렇게 되면 .. 2022. 2. 11. [Spring Boot] : MessageCodesResolver를 통한 검증 오류 코드로 메시지 코드 생성 MessageCodesResolver를 사용해 검증 오류 코드로 메시지 코드를 생성했다. MessageCodesResolver는 인터페이스이고 DefaultMessageCodesResolver는 기본 구현체이며 주로 ObjectError, FieldError와 같이 사용한다고 한다. rejectValue()와 reject()는 내부에서 MessageCodesResolver를 사용하며 여기서 메시지 코드를 생성한다고 한다. FieldError와 ObjectError의 생성자는 여러개의 오류 코드를 가질 수 있고 MessageCodesResolver를 통해 생성된 순서대로 오류 코드를 보관한다. 오류 메시지가 어떻게 출력되나 정리하자면 타임리프 화면을 렌더링할 때 th:errors가 실행되게 된다. 이때 오.. 2022. 2. 11. [Spring Boot] : 어떻게 오류 코드를 설계 할 것인가? 어떻게 오류 코드를 설계 할 것인가 required.item.itemName=상품 이름은 필수입니다. range.item.price=가격은 {0} ~ {1} 까지 허용합니다. max.item.quantity=수량은 최대 {0} 까지 허용합니다. totalPriceMin=가격 * 수량의 합은 {0}원 이상이어야 합니다. 현재 값 = {1} 오류 코드를 이제까지 이런 식으로 작성을 했는데 이렇게 작성하는 것의 단점은 범용성이 떨어진다는 것이다. 그것을 해결하기 위해 조금 더 단순하게 만들 수도 있다. required=필수 값 입니다. range=범위는 {0} ~ {1} 까지 허용합니다. max=최대 {0} 까지 허용합니다. 바로 이렇게 조금 더 간단하게 만들 수 있는데 또 역설적이게도 단점은 디테일이 떨어진.. 2022. 2. 11. [Spring Boot] : 오류 코드와 메시지 처리(2) 오류 코드와 메시지 처리2 강의 특징 상 처음에 길고 복잡한 코드를 작성하고 완성된 것 처럼 보여주지만 사실 그 코들은 개선 전의 코드였다. 저번 강의를 보면서 이렇게 편리하게 하는구나 했는데 역시 더 줄여서, 간단하게 사용할 수 있었다. FieldError와 ObjectError는 다루기에 번거롭다고 한다. 좀 코드가 길어지긴 했다. 이것을 자동화 할 수도 있다고 하는데 rejectValue()와 reject()를 사용하면 된다. rejectValue와 reject()는 BindingResult가 제공한다. 이것을 통해 기존 코드를 단순화 하는 작업을 했다. if (!StringUtils.hasText(item.getItemName())) { bindingResult.rejectValue("itemNa.. 2022. 2. 11. [Spring Boot] : 오류 코드와 메시지 처리(1) 오류 코드와 메시지 처리(1) 저번에 messages.properties를 사용했는데 오류 메시지도 똑같이 사용하기 위해 하나 더 만들어 주었다. 같은 곳에 오류 코드 메시지도 적을 수 있지만 오류 메시지만 구분하기 쉽게 하기 위해 따로 파일을 만들어 관리한다고 한다. required.item.itemName=상품 이름은 필수입니다. errors.properties를 만들고 오류 메시지를 넣어주었다. 중요한건 application.properties에 등록을 해 주어야 한다. spring.messages.basename=messages,errors 따로 적어주는 게 없으면 messages가 디폴트 값인데 errors.properties도 등록해 사용하기 위해 위처럼 등록을 해 주었다. 이렇게 되면 mes.. 2022. 2. 11. [프로그래머스] : 약수의 합 파이썬 풀이 약수의 합 정수 n을 입력받아 n의 약수를 모두 더한 값을 리턴하는 함수, solution을 완성해주세요. 문제 설명 n은 0 이상 3000이하인 정수입니다. 제한 사항 nreturn 1228 56 입출력 예 설명 입출력 예 #1 12의 약수는 1, 2, 3, 4, 6, 12입니다. 이를 모두 더하면 28입니다. 입출력 예 #2 5의 약수는 1, 5입니다. 이를 모두 더하면 6입니다. 입출력 예 def solution(n): answer = 0 for i in range(1, n+1): if n%i==0: answer += i return answer print(solution(12)) 풀이 더해진 값을 담아두기 위한 전역 변수 하나를 만들어주고 for문을 통해 1부터 n번까지 반복하도록 만들어 주었다... 2022. 2. 11. [TIL] : 107 일일 배움을 위한 Today I Learned ! JavaScript 30일 챌린지 14일차 완료했다. 배열 복사와 참조에 대해 코딩을 했다. 이론 부분은 따로 검색해서 찾아보았다. 2022.02.10 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 14일차 Spring Boot 스프링 부트로 검증 코드를 추가했다. 2022.02.10 - [Framework/Spring Boot] - [Spring Boot] : BindingResult 사용(1) 2022.02.10 - [Framework/Spring Boot] - [Spring Boot] : BindingResult 사용(2) 2022.02.10 - [Framework/Spring Boot] - [S.. 2022. 2. 10. [강연 및 세미나] : React가 처음인 당신 후기 React가 처음인 당신 참석일 : 22.02.10 유형 : 실시간 온라인 강연 주제 : React가 처음인 당신 발표자 : 이정환님 📝 ← 링크 참고 우선, 나는 프론트 개발자에 대한 목표는 없지만 기본적으로 백엔드 개발자도 프론트를 어느 정도 알고 있어야 된다고 생각하기 때문에 신청하게 되었다. 이게 참 우연인게 저번에 vue.js를 간단하게 프로젝트 생성해서 혼자 백과 프론트 다 해보려고 했는데 아직 프론트 프레임워크를 사용해 본 적이 없기도 하고 백엔드 쪽 실력이 튼튼한 것도 아니여서 잠시 보류하게 되었다. 그 와중에 갑자기 OKKY에서 프론트에 관한 내용을 세미나로 다룬다고 해서 얼른 신청하게 되었다. 강사님 프로필이 눈에 익어서 아는 사람인가 했는데 맨날 듣는 인프런 강의 사이트에서 React.. 2022. 2. 10. 이전 1 ··· 24 25 26 27 28 29 30 ··· 51 다음 반응형