본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ

분류 전체보기471

[Spring] Spring boot 프로젝트에서 application.properties와 application.yml 파일이 동시에 존재할 스프링 부트 프로젝트에서 application.properties와 application.yml 파일이 동시에 존재할 경우, 스프링 부트는 두 파일을 모두 읽어들입니다. 설정은 다음과 같은 규칙에 따라 적용됩니다:우선순위: 스프링 부트는 application.properties와 application.yml 파일의 설정을 병합하여 사용합니다. 만약 동일한 설정 키가 두 파일에 모두 존재하면, application.properties 파일의 설정이 우선적으로 적용됩니다.병합 방식: 두 파일의 설정은 병합됩니다. 즉, 두 파일에 중복되지 않은 설정 키들은 모두 적용되며, 중복된 설정 키는 앞서 언급한 우선순위 규칙에 따라 적용됩니다.예를 들어, 아래와 같은 두 파일이 있을 때:# application.pro.. 2024. 5. 21.
[redis] 캐싱 전략(Caching Strategies) 정리하기, 어떤 식으로 설계하고 사용할 것인가? 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템인 redis를 사용하려면, 설치하고 어플리케이션에 캐싱을 사용하기 위한 로직을 넣어줘야 합니다.그러려면 소프트웨어 아키텍처 설계를 해야 하고, 이 과정에서 캐싱을 언제 어떤 과정으로 사용할지 설계가 들어가야 합니다.그러다보니 캐싱 전략을 사용하지 않는 어플리케이션에서 캐싱을 도입하려면, 어플리케이션에 캐싱할 서비스나 위치에는 많은 수정이 들어가게 됩니다.이를 조금 더 편리하게 제공하기 위해 완전관리형으로 제공하는 aws서비스 중 elasticache와 rdb를 연계시켜 사용할 수도 있습니다.그러나 조금 더 개념적인 부분에서 캐싱을 어떤식으로 어플리케이션에 구현할 지 다루는캐싱 전략(Caching Strategies)에 대해 정리해보려 합니다.레디스를 어.. 2024. 5. 20.
[redis] 캐싱, 활용할 데이터 선정, 고려할 점 이전엔 캐싱을 사용할 수 있는 redis가 무엇인지 정리해봤습니다.그런데, 모든 데이터를 캐싱 적용 하면, 성능이 올라갈까?redis는 메모리에 값을 저장해 db에 저장하는 것 보다 값을 빠르게 불러오도록 해주지만, 저장장치에 저장된 데이터를 메모리에도 모두 저장시킨다면 자원이 많이 필요하게 될 것이라 생각합니다.수정이 자주 일어나는 작업이라면 캐싱을 쓰지 않는 부분이 더 나을수도 있으며,사용 빈도가 높지 않은 데이터라면 캐싱을 안쓰더라도 별 영향이 없을 수도 있습니다.또한 메모리에 지속적으로 보관할 지, 아니면 수명 정책을 걸어 일정 시간이 지나면 삭제하고 메모리 여유를 둘지 고민해야 합니다.이런 부분들을 고려하여 캐싱을 적용할 정책, 기준을 정하는 것이 필요합니다.1. 데이터에 만료 정책 적용하기캐.. 2024. 5. 20.
[redis] 메모리 기반 캐싱기능을 지원하는 레디스 알아보 Redis는 빠른 성능과 유연성으로 많은 개발자들에게 인기 있는 오픈 소스 인-메모리 데이터 스토어입니다. 프로젝트에 따라 다양한 활용 방법이 있겠지만, 일반적으로 Redis는 다음과 같은 경우에 유용합니다:캐싱: 데이터베이스 쿼리 결과나 계산된 값 등을 임시로 저장하여 빠른 응답 속도를 제공합니다.세션 관리: 사용자 세션 정보를 저장하여 웹 애플리케이션의 상태를 유지합니다.메시지 브로커: 메시지 큐를 통해 서비스 간 메시지를 전달하고 처리합니다.실시간 애플리케이션: 채팅, 게임 서버 등 실시간으로 데이터를 교환해야 하는 애플리케이션에 적합합니다.Java와 Spring Boot를 사용하여 REST API 서비스에 Redis 캐시를 적용하는 간단한 예제가 있습니다.샘플 프로젝트를 시작하기 전에, Redis.. 2024. 5. 20.
[IntelliJ] 플러그인 추천 2 인텔리제이로 개발하다보니 플러그인을 설치해서 사용하는 편입니다.IntelliJ 에서 플러그인이란?개발하는데 도움을 받을 수 있는 도구를 말하며, 자동완성, 디자인, 외부 서비스 연동(git 등), 테스트에도움을 받을 수 있는 툴 들이며, 업데이트도 주기적으로 제공하므로 업데이트하며 사용 가능하다.플러그인을 통해 개발 효율을 올릴 수 있다.기존 게시물에서 시기가 지난만큼 2탄을 만들어 보려 합니다.변경사항 확인- 기존 Presentation Assistant 은 IntelliJ ultimate 에서 기본설정으로 채택되어 옵션에서 확인가능1. Atom Material Icons메뉴의 아이콘을 보기 좋게 바꿔준다.미적 효과와 가독성이 올라간다.2. AiXcoder Code Completer코드 자동 완성을 도.. 2024. 5. 17.
OSS/BSS 이게 무엇인가? - BSS(business support system, 업무 지원 시스템) 통신사가 고객이 가입할 때 고객으로 부터 고객 정보와 요금을 지급받고, 이런 정보를 처리하여 OSS로 넘겨주는 것이 BSS다.즉, 통신서비스 제공자가 고객에게 서비스를 제공하기 위해 사용하는 시스템, 고객을 상대하는 시스템이다. 고객의 지불, 고객정보 등록 시스템이 있으며, 안정적인 처리가 중요하다. 그러므로 ACID(원자성, 일관성, 독립성, 지속성)을 만족하기 위해 RDB를 사용하며,  대용량 데이터, 빅데이터를 사용하기 위해 NoSql을 사용한다.- OSS(Operation Support System, 운용 지원 시스템)통신 서비스 제공자가 자체 네트워크를 관리하기 위해 사용하는 시스템 (네트워크 재고, 네트워크 구성, 장애.. 2024. 5. 13.
콜백 함수란 무엇인가 프로그래밍에서 콜백(callback) 또는 콜백 함수(callback function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고, 아니면 나중에 실행할 수도 있다.일반적으로 콜백수신 코드로 콜백 코드(함수)를 전달할 때는 콜백 함수의 포인터 (핸들), 서브루틴 또는 람다함수의 형태로 넘겨준다. 콜백수신 코드는 실행하는 동안에 넘겨받은 콜백 코드를 필요에 따라 호출하고 다른 작업을 실행하는 경우도 있다. 다른 방식으로는 콜백수신 코드는 넘겨받은 콜백 함수를 '핸들러'로서 등록하고, 콜백수신 함수의 동작 중 어떠한 반응의 일부로서 나중에 호출할 때 사용할 수도 있다 (비동기 콜백).콜백은 폴리모피즘과 제네릭프로그래밍의 .. 2024. 5. 9.
자신감, 앞으로 나아가는 방법 모르는 일에 도전하고, 일하면서 자신감이 점점 생기고, 실수도 하고 혼도 나면서 자신감이 떨어지기도 하고그러길 반복하며 결국 실수없이 맡은 업무를 잘해 나가게 되고, 팀원들을 대표해서 일하기도 했던 경험들을 통해어떤 일이든 도전하고 자신감을 가지며 일할 수 있었다.다양한 사람들을 경험하며 다치고 깨지더라도 회복하고 일어서며, 어떻게든 미래를 위해 노력하겠다는 다짐이나의 큰 원동력이고 다시 일어설 수 있는 계기가 되었기에 가능했다.    그러나 최근엔 이런 기세가 많이 약해지고 자신감을 잃어 버릴 정도로 슬럼프를 겪기도 한 것 같다.왜 이렇게 된 것일까?나이를 먹어갈 수록 더 많은일을 수행해왔고, 또 잘 해왔으며 인정도 받았다.그런데 어쩌다가 이런 슬럼프를 겪으며 위축되고 자신감을 잃으며 겁이 많아지게.. 2024. 4. 24.
[CS] java에서 String이 불변 객체인 이유 자바에서 String 문자열은 불변 객체입니다. String으로 선언한 변수가 변하지 않는 다는 뜻에서 불변이 붙은것은 아닙니다. String a = "num1"; a = "num2"; "num1"이라는 String 객체가 만들어지고 이를 a가 참조하는 식으로 내부에서 과정이 이루어집니다. a="num1"을 선언하며 "num1"이 상수풀에 없으면 num1을 새로 만들고 a로 참조하도록 하는 것입니다. 다만 a ="num2" 를 수행하며 값이 변경되는 게 아닌 "num2"라는 새로운 String 객체를 만들고 타입 a에 참조시키는 것입니다. 왜 이런 구조를 띠는걸까요? String 객체는 heap 메모리가 아닌 상수풀에 등록되고 참조를 반환합니다. 이렇게 설계된 이유는 String은 상당히 자주쓰여서 상수.. 2024. 4. 15.
[CS] SOP CORS 웹 개발에서 알아두면 좋은 내용 예전에는 출처(프로토콜, 호스트명, 포트)가 다르더라도 ajax 통신을 수행할 때 요청과 응답이 문제없이 가능했습니다. 하지만 이러한 방식에는 보안에 취약하다는 문제가 생길 수 있습니다. Cross-Site Scripting (XSS) 1. 사용자의 쿠키 정보를 가져오는 자바스크립트 코드(악성코드)를 포함한 게시글을 작성한다. 2. 어떤 사용자가 로그인하면 쿠키에 그 정보가 저장됨 3. 해커가 작성해둔 게시글을 사용자가 클릭했을 때 악성코드가 작동 4. 쿠키에 저장된 사용자 정보가 해커의 웹사이트에 전송됨 Cross-site request forgery (CSRF) - 사이트 간 요청 위조 1. 사용자가 보안이 취약한 서비스에 로그인 한다. 2. 사용자 정보가 쿠키에 저장된다. 3. 해커가 만든 피싱 사.. 2024. 4. 11.
[JPA] 1+N 문제, 현상 정리 JPA N+1 (1번 조회해야할 것을 N개 종류의 데이터 각각을 추가로 조회하게 되서 총 N+1번 DB조회를 하게 되는문제이다.) JPA의 Entity 조회시 Query 한번 내부에 존재하는 다른 연관관계에 접근할 때 또 다시 한번 쿼리가 발생하는 비효율적인 상황을 말한다. 즉시 로딩으로 데이터를 가져오는 경우 ( N+1 문제가 바로 발생 ) 지연 로딩으로 데이터를 가져온 이후에 가져온 데이터에서 하위 엔티티를 다시 조회하는 경우 ( 하위 엔티티를 조회하는 시점에 발생 ) 0. 내가 정리하는 N+1 문제 @Entity public class MemberJpql extends BaseEmbeded { @Id @GeneratedValue private Long id; private String usernam.. 2024. 4. 1.
[Spring] JPA 에러must be manually assigned before calling 'persist()' 에러 해결하기 JPA 연습중에 다음과 같은 에러가 발견되었다. org.hibernate.id.IdentifierGenerationException: Identifier of entity 'cohttp://m.minod.jpa.domain.inherit.extend.MemberBase' must be manually assigned before calling 'persist()' Identifier Entity 에러라고 함 테스트 소스는 다음과 같다. em.persist() 할 때 에러가 나는데 원인이 무엇인지?? @Slf4j @SpringBootTest public class MappedSuperclassTest { // entity 클래스들에 상속시켜서 필드만 추가하게 하는 어노테이션인 @MappedSuperclas.. 2024. 3. 27.