본문 바로가기
반응형

전체 글1065

[Docker] : VMWare Ubuntu Docker 설치 VMWare Ubuntu Docker 설치 📝 ← Ubuntu에 Docker 엔진 설치하는 공식 문서를 참고하면 더 좋다. 저장소를 설치하는 방법으로 도커를 설치한다. sudo apt-get update sudo apt-get install \\ ca-certificates \\ curl \\ gnupg \\ lsb-release curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io sudo docker version 도커 설치 확인한다. 2022. 2. 10.
[JavaScript 30일 챌린지] : 14일차 배열 복사와 참조에 대해 공부하는 코딩이다. 배열 참조는 복사한 결과물을 업데이트하면 둘 다 같은 배열을 가르키고 있기 때문에 원본도 수정이 된다. 하지만 새 배열을 만들고 이전 배열을 결합하는 형식으로 복사본을 가져가면 복사본을 업데이트 해도 원본은 업데이트가 되지 않는다. 2022. 2. 10.
[Spring Boot] : FieldError과 ObjectError에 대해서 FieldError과 ObjectError에 대해서 if (!StringUtils.hasText(item.getItemName())) { //넘어온 글자가 없으면 bindingResult.addError(new FieldError("item", "itemName", item.getItemName(), false, null, null, "상품 이름은 필수입니다.")); } 전과 같은데 추가된 부분이 있다. FieldError 는 두 가지 생성자를 제공하는데 이번에는 다른 생성자를 사용해 보았다. Ctrl + p를 누르면 어떤 파라미터 담을 수 있는지 볼 수 있는데 아래와 같다. objectName : 오류가 발생한 객체 이름 field : 오류 필드 rejectedValue : 사용자가 입력한 값(거절된 .. 2022. 2. 10.
[Spring Boot] : BindingResult 사용(2) BindingResult 사용(2) BindingResult가 있으면 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출된다. 이게 예를 들면 쉽게 이해가 가능하다. 예시로 만약 한 값을 받아오는데 int로 설정을 해뒀다. 근데 문자가 입력되었을 때 BingingResult를 사용하면 페이지 로딩이 되긴 한다. 하지만 BindingResult를 사용하지 않고 int로 받는 값에 문자를 넣는다면 페이지 자체가 로딩되지 않고 오류 페이지가 뜨게된다. 즉, BindingResult가 없으면 400오류 발생과 동시에 컨트롤러가 호출되지 않고 오류 페이지로 이동되고 BindingResult가 있다면 오류 정보(FieldError)를 BindingResult에 담아서 컨트롤러를 정상 호.. 2022. 2. 10.
[Spring Boot] : BindingResult 사용(1) BindingResult 사용(1) BindingResult 를 사용해서 조금 더 간단하게 검증 에러를 체크할 수 있다. public String addItemV1(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) 컨트롤러에서 선언해서 사용하는데 중요한 점은 @ModelAttribute 뒤에 BindingResult가 와야 한다는 점이다. 왜냐하면 BindingResult는 Model 객체, 위에서는 Item에 대한 값을 가지고 있기 때문에 순서가 매우 중요하다. Map errors = new HashMap(); //검증 로직 if (!StringUtils.has.. 2022. 2. 10.
[Spring Boot] : 타임리프를 통한 검증 코드 추가하기 타임리프를 통한 검증 코드 추가하기 상품 등록에 검증 코드를 추가해주었다. 검증이 처음에는 뭔가 했는데 그냥 쉽게 입력 누락이나 정해진 범위 초과 등 정석에 맞지 않는 부분이 틀렸다고 알려주는 코드를 추가해주는 것이였다. 이것 역시 공모전을 진행하면서 고생했던 부분이었는데 이렇게 쉽게 할 수 있는 것을 보고 많이 배워간다. 예시 코드는 너무 길어서 일부분만 뺴왔다. //검증 오류 결과를 보관 Map errors = new HashMap(); 먼저 컨트롤러에 검증 로직을 추가하기 위해 검증 오류 결과를 보관할 errors를 만들어주었다. if (!StringUtils.hasText(item.getItemName())) { //넘어온 글자가 없으면 errors.put("itemName", "상품 이름은 필수.. 2022. 2. 10.
[TIL] : 106 일일 배움을 위한 Today I Learned ! 프로그래머스 알고리즘 문제 하나를 간단하게 풀었다. 2022.02.09 - [Algorithm/프로그래머스] - [프로그래머스] : 자연수 뒤집어 배열로 만들기 파이썬 풀이 JavaScript 30일 챌린지 13일차 완료했다. 스크롤을 내리면 사진이 페이지 중간에 끼어드는 코드를 짰다. 2022.02.09 - [Project/JavaScript 30일 챌린지] - [JavaScript 30일 챌린지] : 13일차 Spring Boot 타임리프 MessageSource와 국제화에 대해 공부했다. 국제화를 배우면서 전에 한이음 프로젝트 했던 기억이 났다. 그때, 만든 페이지를 영어로 적냐, 한글로 적냐 문제가 많았는데.. 심지어 왔다갔다 하면서 양쪽 다 만들.. 2022. 2. 9.
[코딩&리뷰] : 스터디 6회차 스터디 6회차를 진행했다. 1월, 2월해서 총 8회차 스터디인데 벌써 2회차 밖에 안 남았다. 오늘도 한 쌤이 바쁘셔서 참여를 못 했지만 다른 쌤들하고 발표와 목표 공유를 하고 열심히 공부를 진행했다. 이번에는 발표에 타임리프에서 사용한 체크박스를 공부해서 살짝 말 했다. 확실히 공모전을 하면서 만든 프로젝트가 있으니까 뭐가 부족했었는지, 새로 배우는 것과 비교하면 어떤지를 확 체감할 수 있어서 좋은 것 같다. 마지막 리뷰로는 국제화 관련해서 말했다. 국제화 역시 팀프로젝트를 만들면서 불편했던 점을 단번에 해결할 수 있는 부분이여서 아..진작 알았어야 했는데 하면서 공부한 부분이라 알려주고 싶었다. 아래는 준비한 내용이다. 자세한 내용은 상위 카테고리에서 TO-DO-List에 들어가면 확인할 수 있다. .. 2022. 2. 9.
[Spring Boot] : 타임리프 Message 국제화 타임리프 메시지 국제화 이번에는 국제화를 적용해 보았다. label.item=Item label.item.id=Item ID label.item.itemName=Item Name label.item.price=price label.item.quantity=quantity page.items=Item List page.item=Item Detail page.addItem=Item Add page.updateItem=Item Update button.save=Save button.cancel=Cancel messages_en.properties 폴더에 위와 같이 영어로 된 이름을 설정해 주었다. 상품 등록 그리고 위 코드 처럼 전에 설정한 메시지 표현식을 사용해 자동으로 대체가 된다. 이러면 국제화는 간단하.. 2022. 2. 9.
[Spring Boot] : 타임리프 웹 애플리케이션 Message에 적용하기 웹 애플리케이션 메시지에 적용하기 label.item.quantity=수량 page.items=상품 목록 button.cancel=취소 먼저 messages.properties에 위와 같이 적어줬다. 위 코드로 다른 제목들을 대체하여 만약 변경 사항이 생길 때 여러 페이지를 왔다갔다 하면서 고치지 않고 messages.properties 파일에서 해당 내용만 변경해 주면 된다. 예를 들어 설명하자면 저장을 저장하기로 바꾸길 원한다면 다른 페이지에서 일일이 다 바꿔 줄 필요없이 messages에서 저장부분을 저장하기로 수정만 해주면 되는 것이다. 타임리프 메시지를 적용하기 위해서는 타임리프의 메시지 표현식을 사용해야 하는데 메시지 표현식은 #{,,,} 이런 형식으로 되어 있다. 상품 등록 예를 들면 상품 .. 2022. 2. 9.
[Spring Boot] : 타임리프 MessageSource 사용하기 스프링 메시지 소스 사용 MessageSource 인터페이스 코드를 열어보면 일부 파라미터로 메시지를 읽어오는 기능을 제공하는 것을 확인할 수 있다. @Autowired MessageSource ms; ms.getMessage()는 code, args, locale 값을 받는다. @Test void helloMessage() { String result = ms.getMessage("hello", null, null); assertThat(result).isEqualTo("안녕"); } 아무것도 지정하지 않았을 경우 디폴트 값으로 설정되어 있는 한글로 들어가게 된다. 때문에 비교했을 때 안녕으로 표시되므로 테스트 통과가 된다. 메시지가 없는 경우에는 NoSuchMessageException이 발생하게 된.. 2022. 2. 9.
[Spring Boot] : 타임리프 MessageSource 설정 메시지 관리 기능을 사용하기 위해 MessageSource를 스프링 빈으로 등록해야 하는데 스프링 부트에서는 간단하게 지원을 해준다. spring.messages.basename=messages properties에 이렇게 메시지 소스를 적어주기만 하면 된다. hello=안녕 hello.name=안녕 {0} messages.properties에는 이렇게 한글로 적어주고 hello=hello hello.name=hello {0} messages_en.properties에는 이렇게 영어로 적어주었다. 이러면 디폴트 값이 한국으로 잡히게 되고 en으로 들어오게 되면 hello가 나오고 그 외 모든 언어는 한글로 안녕이 표시되게 된다. 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다. 2022. 2. 9.
[Spring Boot] : 타임리프 Message(메시지), 국제화 메시지, 국제화 소개 만약 상품명이라는 단어를 모두 상품이름으로 고쳐달라는 기획자가 나타나면 전부 다 수정해 주어야 한다. 하지만 여러 화면에 있는 label을 모두 찾아가면서 변경해야 하는데 너무 비효율적이게 된다. 때문에 이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라고 한다. 예를 messages.properteis라는 메시지 관리용 파일을 만들면 HTML은 데이터를 key 값으로 불러 사용한다. 여기에서 더 나아가 별도로 관리하는 김에 파일을 한개 더 만들어 다른 나라 언어로 사용할 수 있게 해준다. messages_en.propertis messages_ko.propertis 이렇게 두 개의 파일을 만들면 한글과 영어가 지원되게 된다. 이떄, 영어를 사용하는 사람은 _en.. 2022. 2. 9.
[JavaScript 30일 챌린지] : 13일차 스크롤을 내리거나 올릴 때 이미지가 글 가운데 슬라이드로 껴 들어오는 코드를 작성했다. 이미지 칸이 스크롤을 내리기 전에는 비워져있다. 스크롤을 내리면 이미지가 슬라이드로 채워진다. 다시 스크롤을 올리면 이미지가 사라지게 된다. 2022. 2. 9.
[프로그래머스] : 자연수 뒤집어 배열로 만들기 파이썬 풀이 자연수 뒤집어 배열로 만들기 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 문제 설명 n은 10,000,000,000이하인 자연수입니다. 제한 조건 nreturn 12345[5,4,3,2,1] 입출력 예시 def solution(n): a = list(str(n)) a.reverse() return list(map(int, a)) print(solution(12345)) 문제 풀이 먼저 int 형식의 데이터를 문자열로 바꿔 list a에 담았다. a를 reverse() 함수를 통해 뒤집어주었다. list 형식으로 리턴을 하면서 문자열로 바꿔주었던 데이터를 다시 정수 자료형으로 바꾸어 리턴해 준다. 맨 아래는 테.. 2022. 2. 9.
[TIL] : 105 일일 배움을 위한 Today I Learned ! Spring Boot 스프링 부트 강의 한 섹션을 마쳤다. 오늘 두 섹션을 다 들으려 했는데 역시 복습을 같이 하면서 공부를 하니까 시간이 부족하다. 하면 더 할 수 있었는데 JS30일 챌린지와 알고리즘..쿠버네티스 등 할 게 많이 남아 있어서 한 섹션만 마쳤다. 이번에는 타임리프에서 체크 박스와 라디오 박스, 셀렉트 박스를 사용하는 방법에 대해 다루었다. 2022.02.08 - [Framework/Spring Boot] - [Spring Boot] : 타임리프 스프링 통합 메뉴얼 및 스프링에서 사용하기 2022.02.08 - [Framework/Spring Boot] - [Spring Boot] : 타임리프 입력 폼 처리하기 th:object와 th:f.. 2022. 2. 8.
[JavaScript 30일 챌린지] : 12일차 이번에는 시크릿 키를 정해두고 해당 키를 눌렀을 때 액션이 일어나도록 하는 JS 코딩이다. console.log(e.key); 를 통해 방향키를 눌렀을 때 로그를 남길 수 있다. 배열에 누적되어 들어간다. 시크릿 키는 wesbos로 정해두었고 콘솔이 아닌 화면에 입력하면 숨겨진 기능이 나오게 된다. 이렇게 다른 문자를 입력하면 나오지 않고 지정해둔 시크릿 키를 입력했을 때 화면에 나오게 된다. 2022. 2. 8.
[Spring Boot] : 타임리프 셀렉트 박스 타임리프 셀렉트 박스 셀렉트 박스는 여러 선택지 중 하나를 선택할 떄 사용한다. 이번에도 역시 자바 객체를 사용하는 방법으로 진행했다. @ModelAttribute("deliveryCodes") public List deliveryCodes() { List deliveryCodes = new ArrayList(); deliveryCodes.add(new DeliveryCode("FAST", "빠른 배송")); deliveryCodes.add(new DeliveryCode("NORMAL", "일반 배송")); deliveryCodes.add(new DeliveryCode("SLOW", "느린 배송")); return deliveryCodes; } 여기서 강사님이 팁을 주셨는데 deliveryCodes() .. 2022. 2. 8.
[Spring Boot] : 타임리프 라디오 박스 타임리프 라디오 박스 타임리프를 활용해서 라디오 박스를 만들어 본다. 라디오 박스는 체크 박스와 다르게 여러개 중 하나만 선택할 수 있다. 이번에는 ENUM을 활용해서 개발을 진행했다. @ModelAttribute("itemTypes") public ItemType[] itemTypes() { return ItemType.values(); } @ModelAttribute로 만들어 주었다. 등록, 조회, 수정 모두 다 사용하므로 이렇게 만드는 게 중복을 줄이는 방법이다. return 형식이 조금 다른데 저렇게 사용하면 ENUM의 모든 정보를 배열로 반환하게 된다. 핵심 코드이다. 체크 박스와 비슷하지만 차이점으로는 항상 하나만 선택이 가능하기 때문에 따로 히든 필드를 사용하지 않아도 된다. 타임리프에서 E.. 2022. 2. 8.
[Spring Boot] : 타임리프 체크 박스 여러개 만들고 체크하기 체크 박스를 여러개 만들고 복수 체크가 가능하도록 만들 수 있다. 그 전에 @ModelAttribute 어노테이션도 사용해 봤는데 이 어노테이션은 여러 화면에서 체크 리스트 내용을 중복으로 보여줘야 할 때 각각 Mapping부분에 중복해서 적어주지 않고 별도의 메서드를 만들어 사용할 수 있다. 그렇게 되면 컨트롤러를 요청할 때 @ModelAttribute에서 반환한 값이 자동으로 model에 담기게 된다. @ModelAttribute("regions") public Map regions() { Map regions = new LinkedHashMap(); regions.put("SEOUL", "서울"); regions.put("BUSAN", "부산"); regions.put("JEJU", "제주"); r.. 2022. 2. 8.
[Spring Boot] : 타임리프 체크 박스 단일(2) 타임리프 체크박스 단일(2) 전에 했었던 히든 필드를 추가하여 true, false를 반환 받는 방법 말고 타임리프가 제공하는 폼 기능을 사용해 해당 부분을 자동화해서 사용할 수 있다. 이랬던 기존 코드를 이렇게 바꿔주기만 하면 된다. 타임리프를 사용하면 hidden 필드와 관련된 부분이 해결이 된다. 이 상태로 확인을 해보면 정상적으로 체크는 true, 체크가 되어있지 않으면 false가 된다. 두번째 라인 부분이 타임리프의 체크 확인 코드이다. 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술을 참고하여 공부하였습니다. 2022. 2. 8.
반응형