본문 바로가기

반응형

분류 전체보기

(46)
[JavaScript] ES6 함수의 추가 기능 1. 함수의 구분개요ES6 이전의 함수는 동일한 함수라도 다양한 형태로 호출할 수 있는데, 이로 인해 개발자로 하여금 혼란을 야기하고, 실수를 유발할 가능성이 있다. ES6는 해당 문제를 해결하기 위해서 특정 기준을 두고, 함수를 명확하게 구분하게 된다. ※ 아래의 3가지 외에도 제너레이터 함수와 async 함수가 존재하지만, 여기서는 다루지 않음 ES6 함수의 구분constructorprototypesuperarguments일반 함수(Normal)✅✅❌✅메서드(Method)❌❌✅✅화살표 함수(Arrow)❌❌❌❌ 내용ES6 이전의 함수는 동일한 함수라도 다양한 형태로 호출할 수 있다.var foo = function () { return 1;}// 일반적인 함수로서 호출foo(); // -> 1..
[Spring] Spring Cache와 JPA 1차 캐시 비교 개요Spring Cache에 대한 글을 바탕으로 세미나를 진행한 적이 있는데,다음과 같은 질문이 들어왔으나 바로 대답하지 못했었다.jpa에서도 cache를 지원해 주는 것으로 알고 있습니다. 이때 spring cache와 jpa cache의 차이가 어떻게 되나요? 현재 JPA를 얕게나마 사용하는 수준이어서 기술적인 질문이 들어오면 답변을 못하는 상태라 생각됐다.다음번에도 동일한 질문이 들어오면 답변할 수 있도록 공부하기로 하고, 정리한 내용을 본문에 작성했다. https://meal-coding.tistory.com/46 [Spring] Cache 사용하기 (@Cacheable, @CachePut, @CacheEvict)개요메뉴, 카테고리와 같이 자주 변경되지 않는 정적 데이터들이 있다.게다가 메뉴와 카..
[CSS] 선택자 (Selector) 개요회사에서 SCSS를 통해서 웹 스타일을 관리하고 있다.프론트엔드에 익숙하지 않았기 때문에, 특수문자가 조합된 선택자나 연산자를 이해하기 어려웠고,겹쳐 있는 HTML 구조에서 hover 이벤트 하나 처리하는 데도 많은 시간이 걸렸다. 작업을 마치고 나서야, 몰랐던 부분이 CSS 선택자(Selector)라는 것을 알았고, 이번 기회에 정리해 두면 좋겠다고 생각했다.CSS 선택자는 HTML 요소를 선택해 스타일을 지정할 때 사용하는 기본 도구이다.이 글에서는 스스로가 중요하다고 생각하는 선택자들을 중심으로 간단하게 소개하고자 한다.내용#1 전체 선택자 (*)* { box-sizing: border-box; margin: 0; padding: 0;}모든 요소에 기본 스타일을 적용할 때 자주 사용한다.#..
[Spring] Cache annotation 사용성 개선하기 with Kotlin 개요DB에서 자주 변경되지 않지만, 자주 조회되는 데이터들이 있다면 Cache를 활용하면 좋다.조회를 위해서 DB hit의 회수를 상당히 줄여주므로 서버 자원을 아낄 수 있기 때문이다.DB connection pool에 여유가 생기니 병목 현상도 어느 정도 해소될 것이고,복잡한 query를 필요한 작업이었다면 해당 query를 생략함으로써 DB의 부담을 줄여줄 것이다. 토이 프로젝트로 간단하게 쇼핑몰 서비스를 개발하고 있는데 카테고리 항목이 딱 Cache를 적용하기 좋았다.처음에는 조회할 때마다 DB를 매번 조회했지만, 생각해 보니 카테고리는 한 번 설정되면 자주 바뀌지 않는 데이터였다.(실제로 많은 쇼핑몰에서도 카테고리는 거의 변경되지 않는다.) 바로 카테고리에 Cache를 적용했다. Spring Bo..
[Spring] Cache 사용하기 (@Cacheable, @CachePut, @CacheEvict) 개요메뉴, 카테고리와 같이 자주 변경되지 않는 정적 데이터들이 있다.게다가 메뉴와 카테고리를 가져오기 위해서 DB를 조회하는 빈도수도 상당히 높은 걸 알 수 있다. 데이터 양이 적다면 유야무야 넘어가며 매번 발생하는 요청을 처리할 수도 있을 테지만,반대의 상황이 온다면 성능에 영향을 끼칠 수 있다. 이럴 때 Caching 기능을 사용한다면 DB를 조회하는 횟수를 획기적으로 줄일 수 있다.동일한 데이터를 요청하면 DB에서 가져오지 않고 미리 Caching 한 데이터를 건네주면 되기 때문이다.DB에서 데이터가 변경되더라도 문제되지 않는다.필요한 경우 수정된 데이터만 갱신하거나, Cache를 비운 후 다시 Caching 하면 된다. 편리하게도 Spring은 AOP 방식으로 Cache 서비스를 적용하는 기능을 ..
[Spring] Filter, Interceptor 그리고 AOP 개요프로그램을 개발할 때 공통적인 기능(예: 로깅, 인증, 트랜잭션 관리)을 분리하여 코드의 유지보수성을 높이는 개념이관심사 분리(Separation of Concerns, SoC)입니다. 예를 들어, 로그를 출력하기 위해 객체의 메소드 내부에 직접 로깅 코드를 추가할 수 있지만,이 방식은 모든 객체에서 중복된 로직을 반복적으로 작성해야 하는 문제가 있습니다. 또한, 세션 관리, 트랜잭션 처리, 인증/인가(Authorization) 체크 등 다양한 공통 기능도 동일한 문제를 가지며,이러한 코드가 객체 내부에 쌓이면 핵심 비즈니스 로직보다 보일러 플레이트 코드가 많아지는 문제가 발생합니다. 이를 해결하기 위해 Spring에서는 Filter, Interceptor, AOP를 통해 관심사를 분리할 수 있도록 ..
[Spring] DTO와 VO 개요 프로그래밍을 하다 보면 데이터를 전달하고 표현해야 한다는 사실에 의문을 가지는 사람을 없을 것입니다.그렇다면 어떻게(how)라는 방법이 중요한 문제라 생각합니다. 본 페이지에서는 Spring Boot를 공부하면서 DTO와 VO를 활용해 데이터를 전달하고 표현하는 방식에 대해 설명합니다.내용1. DTO (Data Transfer Object)DTO는 Controller, Service, View 간 데이터를 주고받는 용도로 사용합니다.오로지 데이터를 저장하고 전달하는 역할에 집중하기 위해 로직을 포함하지 않습니다. (getter와 setter만을 가집니다.)일반적으로 식별자나 특정 속성에 의해 두 객체가 동일하다 판단합니다. 예시// data class로 선언함으로써 getter와 setter 자동 ..
[Kotlin] reduce()와 fold() 개요Collection에서 제공하는 메소드에서 reduce()와 fold()의 차이를 알아봅니다.내용reduce()와 fold() 모두 accumulation(누산) 작업이 요구될 때 사용하는 Collection 메소드입니다.두 메소드 모두 Collection의 요소들을 차례로 누적하여 하나의 값으로 만드는데 사용됩니다. 하지만 초기값 지정 여부에 따라 중요한 차이가 있습니다.reduce() : 초기값 지정 불가 (첫 번째 요소를 초기값으로 사용)fold() : 초기값 지정 가능 (명시적으로 지정된 초기값 사용)이로 인해 반환되는 결과가 다릅니다. 1. 기본 동작val numbers = listOf(1, 2, 3)val sumByReduce = numbers.reduce { acc, num -> acc ..

반응형