본문 바로가기

분류 전체보기85

싱글톤이 무엇인가요? 객체를 하나만 생성하고 공유하는 효율적인 방법 싱글톤을 사용하는 이유가 무엇인가요? 대규모 트래픽이 발생하는 웹사이트에서는 굉장히 많은 수의 클라이언트 요청(request)이 발생하게 되고 그 요청이 발생할 때 마다 Class 이름 참조변수 = new Class 이름(); 으로 인스턴스화 한 객체가 생성됩니다. 즉, 500명이 하나의 요청만 한다 해도 500개의 동일 객체가 생성되었다가 나중에 GC(Garbage Collector)를 통해 지워지는거죠. 불필요하고 비효율적입니다. 그래서 생각해낸 것이 싱글톤입니다. 객체를 하나만 생성하고 그것을 공유함으로써 메모리 부담을 줄이는 방법인데 이게 초반에 설정하기가 좀 많이 번거롭습니다. 하지만 스프링 컨테이너를 이용하면 자동으로 가능합니다. 스프링 컨테이너를.. 2022. 10. 20.
소소한 팁 -1 포트 번호 없이 localhost 접속하기 정확히는 포트 번호가 있지만 사용자가 직접 입력하지 않아도 되는 것뿐이다. 쉽게 말해 특정 포트 번호로 변경하면 그 포트 번호는 생략이 가능해서 입력하진 않지만 사실 있는 것이다. 그게 어떤 포트이고 어떤걸 설정해야할까? 간단하다. 톰캣이라고 하는 WAS의 포트 번호를 기본 Default 값인 8080에서 80으로 바꿔주면 된다. 그렇게 되면 localhost:8080 대신 localhost 만 입력해도 접속이 가능해진다. 포트가 무엇이고 어떤 원리로 작동하는지는 아래 블로그에서 확인하면 된다. https://basemenks.tistory.com/m/263 Port란 무엇인가 1. 포트 포트(port)는 "논리적인 접속장소"이며, 특히 인터넷 프로토콜인 TCP/IP를 사용할 때에는 클라이언트 프로그램이.. 2022. 10. 17.
[Spring Boot] 대소문자 구분 없이 검색하는 로직 (JPA + Oracle) https://samori.tistory.com/40 [Spring Boot] 세상 쉬운 검색창(검색 로직) 만들기 1-2 (백 로직) 샘플 Entity는 Staff로 정하고 설명을 위해 제공 @Getter @Entity @NoArgsConstructor public class Staff { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; pr.. samori.tistory.com 위 글에 이어 Spring Data Jpa 와 Oracle 사용시 대소문자 구분없이 검색하는 로직을 어떻게 처리해야할지와 로직은 알겠는데 네이티브 쿼리에서 매개변수를 인식하지 못하는 현상을 어떻게 해결했는지 .. 2022. 10. 14.
[Spring Boot] 페이징이 어렵다고? 이렇게만 하세요 - 2 https://samori.tistory.com/41 [Spring Boot] 페이징이 어렵다고? 이렇게만 하세요 일단 VIEW 는 본인이 사용중인 템플릿에 아래 코드를 복붙한다 CONTROLLER @GetMapping("/아까 그 URL") String pagingList(Model model, Pageable pageable) { Page p = null; p = 사용하는.. samori.tistory.com 지난 글에 이어 페이징이라면 마땅히 있어야 하는 첫페이지로 가기와 마지막 페이지로 가기, 한번에 몇페이지씩 이동하기 등등 페이징의 기능 개선에 대해 글을 써볼까 한다. 먼저 위 글에서 제공한 샘플 페이징을 기반으로 설명을 진행하겠다. CONTROLLER의 일부분 int totalPage .. 2022. 10. 14.
자바스크립트를 HTML과 분리했는데 작동하지 않는 경우 보통 HTML과 자바스크립트를 따로 분리하는 게 보기 편하고 보기 편하기 때문에 유지보수가 더 용이한데 그 분리작업이 쉬울 것 같은데? 생각보다는 쉽지 않다. 오늘은 외부로 분리한 나의 자바스크립트 파일이 왜 작동하지 않는지 그 원인을 알아보고 해결책에 대해 소개해보려고 한다. 원인 & 해결책 1. VIEW 단에서 경로를 제대로 설정하지 않아서 컴파일러가 찾지 못하는 경우 ->본인이 사용하는 템플릿 엔진에 맞게 외부 자바스크립트 파일을 놓아야 하고 그 경로를 본인이 사용하는 템플릿 엔진에 맞게 설정해주어야 합니다. EX: 타임리프라는 템플릿 엔진을 사용중이라면 다음과 같은 폴더에 저장하면 됩니다. resources->static->js->html이름->js이름 호출할 때는 2. jQuery 를 사용중이라.. 2022. 10. 14.
체크박스 활용하기 (Multiple Selection 수정or삭제) - 2/2 오늘은 저번 글에 이어서 백 쪽의 로직은 어떻게 동작하는지 작성해보려고 한다. 먼저 view 단에서 배열을 통해 보내준 값을 컨트롤러 단에서 어떻게 받는지는 아래와 같다. CONTROLLER //코드 활성화/비활성화 @GetMapping(value = "/disableCode") public String disableCode(@RequestParam("articlesArray") String[] articlesArray) { for(String arr:articlesArray) { Integer codeNo = Integer.valueOf(arr); codeService.disableCode(codeNo); } return "redirect:/selectCode"; } 원리는 향상된 for문으로 arti.. 2022. 10. 6.
체크박스 활용하기 (Multiple Selection 수정or삭제) - 1/2 메일 사이트를 가면 체크박스가 있고 체크한 행의 정보를 수정할 수 있는 기능 또는 로직이 구현되어 있다. 이런식으로 선택해서 이런식으로 버튼 하나로 선택된 모든 행의 정보를 수정할 수 있는 것이다. 물론 바로 삭제 또는 수정 로직을 행하진 않고 아래 처럼 컨펌 모달이 뜨게끔 만드는 것이 더욱 좋다. 자 이제 이러한 로직을 구현하기 위해서는 대략 5가지 로직이 필요하다. 1. 최상단의 체크박스 선택 시 모든 체크박스가 선택되게 하는 로직 2. 삭제 또는 수정 버튼을 눌렀을 때 해당 행의 기준이 되는 정보를 매개변수로 두고 그 매개변수를 반복문을 통해 배열에 넣고 모달에 전달하는 로직 (동기 or 비동기는 선택사항) 3. 그 배열을 반복문에 돌려서 순차적으로 실질적인 연산을 하는 함수에 전달하는 로직. 4... 2022. 9. 30.