개발 지식 22

JavaScript 쓰로틀링(Throttling), 디바운싱(Debouncing)

회사 프로젝트 진행 중 브라우저 resize, scroll 이벤트에 따라 함수를 호출할 일이 생겼는데 비효율적으로 이벤트가 발생할 때 마다 콜백 함수를 호출하는 것을 발견하였다. 두 이벤트 같은 경우에는 연속해서 일어날 확률이 높은 이벤트들인 만큼 연결된 콜백 함수가 있다면 빈번한 콜백 함수 호출이 일어날 것이고 이는 성능 저하의 원인이 될 수도 있다. 이러한 문제를 해결할 수 있는 방법에 대해서 조사해 보았고 쓰로틀링(Throttling)과 디바운싱(Debouncing)이라는 개념을 알게 되었다. 쓰로틀링(Throttling): 처음 이벤트 실행 후 설정한 시간 동안 발생한 이벤트는 묶어서 한번의 콜백 함수 호출만 이루어지게 하는 개념. resize, scroll 등의 이벤트에 사용하기 적합하다. 디바..

개발 지식 2023.03.25

Indentation(Tabs vs Spaces)

Tabs: 쉽게 사용가능, 대부분의 에디터에서 기본 들여쓰기로 되어있음, 에디터에서 space 몇 칸을 tab으로 설정할지 변경할 수 있음 Spaces: 어느 환경에서든 코드가 동일하게 보임(ex. GitHub PRS) 참고 https://www.quora.com/What-is-the-difference-between-tabs-and-spaces-for-indenting What is the difference between tabs and spaces for indenting? Answer (1 of 2): Tabs - They allow for user preference - Tab is the default indentation in many editors when hitting the tab ke..

개발 지식 2022.05.08

Naming Cases

프로그래밍에서 변수명을 작성할 때 공백은 포함 시키지 않는다. 왜냐하면 공백은 프로그램에서 보통 특별한 목적이 있는 키워드로 사용되기 때문이다. 따라서 여러 단어가 결합된 형태의 변수명을 작성할 때는 공백을 대신할 각 단어를 구분해줄 규칙이 필요하다. 1. Camel Case: 첫 문자를 제외하고 각 단어의 첫 문자를 대문자로 표기. 여러 프로그램 언어에서 컨벤션으로 사용한다. camelCaseSample 2. Kebab Case: 모든 단어를 소문자로 표시하며 각 단어는 -로 구분한다. 스프링의 yml파일이나 url 주소에 사용된다. kebab-case-sample 3. Snake Case: Kebab Case의 -로 구분해주는 방법과 다르게 _로 구분해준다. 각 단어를 모두 대문자로 작성하는 방법에도..

개발 지식 2022.01.02

파일 마지막에 빈 줄을 넣는 이유

GitHub pr 리뷰를 통해 알게 된 내용이다. 코드 작성 마지막 줄에는 빈 줄이 들어가야한다. 그 이유는 다음과 같다. 파일 마지막 줄 바꿈은 유닉스에서 관용적으로 사용하던 것이다. 줄 바꿈이 없으면 파일을 올바르게 처리하지 못하는 프로그램들이 있다. POSIX에서 줄 바꿈이 하나의 행을 정의하는 표준으로 정하고 있다. 손상 된 파일을 쉽게 찾을 수 있다. 또한 빈 줄은 빈 줄이 아니라 개행 문자를 추가하는 것이다.(개행 문자의 정의는 운영체제마다 다르다.) 반면에 JS, HTML, CSS 텍스트 파일이나 최신 브라우저, IDE 등에서는 줄 바꿈을 안해도 문제가 생기지 않는다고 한다. 추가로 GitHub에서는 빈 줄이 추가되지 않고 push가 되면 해당 아이콘과 함께 "No newline at end..

개발 지식 2021.07.02

POST vs PUT

POST 메소드는 http 메세지로 넘어온 엔티티를 새로운 자원으로 등록한다. 새로운 자원으로 등록하지 않을 수도 있는데 이런 경우에는 200, 204 응답 코드가 온다. 새로운 자원으로 등록될 경우 201 응답 코드가 온다. PUT 메소드는 자원의 식별자를 이미 알고 있는 상태여야한다. PUT 메소드는 http 메세지로 함께 넘어온 엔티티로 교체한다. 200, 204 응답 코드를 사용한다. 다만 PUT 메소드로 넘어온 식별자가 꼭 존재하고있을 필요는 없다. 존재하지 않는 식별자를 넘길 수도 있는데 이런 경우에는 넘어온 식별자를 id로 하는 새 자원을 생성하고 201 응답 코드를 보내 준다. 식별자를 id로 사용할 수 없는 경우에는 에러코드로 응답한다. 참고 : https://multifrontgarde..

개발 지식 2021.02.15

Http통신에서의 InputStream에 대하여

교훈 : 모르는 것은 당연하거니와 아는 것도 그냥 사용하지 말고 개념과 그 구현 방식을 확실히 숙지하고 사용하자 프로젝트를 진행하던 중 이미지 파일 전송과 관련하여 Java로 Http통신을 구현하고 데이터를 InputStream에 담아서 프론트엔드와 백엔드가 통신을 해야할 일이 생겼다. 사실 해당 파트에 충분히 학습하지 않고 검색을 통해 "이렇게 이렇게 하면 된다."정도만 확인한 후 프로젝트 코드에 대입을 하였다. 별 이상없이 동작해서 우선 다른 할 일도 많았기에 커밋을 한 후 다른 작업을 시작하였다. 하지만 커밋 후에 팀원이 동기 처리를 하지 않은 상태에서 getInputStream을 하게 될 경우 아직 응답이 오지 않았는데 없는 데이터가 잡힐 수도있지 않느냐는 질문을 하였고 생각해보니 그 부분에 대해..

개발 지식 2020.12.24

Spring Boot에서 save 메소드의 동작 원리

entity 가 이미 영속성에 등록 되있으면 merge를 없으면 persist 를 실행하게 돼있다. merge 는 해당 ID 가 영속성에 존재하면 update 를 수행. 없으면 INSERT 를 수행한다. 여기서 주의할 점은 ID 가 없을 경우 SELECT 를 시도하는 경우가 있을 수 있다는 것. 기본키 생성 전략이 없을 경우 (애플리케이션에서 생성) SELECT 를 수행한 후, INSERT 를 실행하기에 쿼리가 2배로 실행됨. persist 의 경우 INSERT 쿼리만 실행 됨. 즉, 정리하면 merge 는 기존의 객체가 존재할 경우 사용하면 좋고, persist 는 새로운 객체를 생성할 때 좋음. 출처 : https://insanelysimple.tistory.com/155

개발 지식 2020.12.07