카테고리 없음2023. 12. 28. 21:56해시 태그 테이블 설계

고민 게시글에 해시 태그 기능을 넣을 때 DB 스키마를 어떻게 설계할 지 고민해보았다. 게시글 테이블에 해시 태그 컬럼을 추가해서 해시 태그를 저장하는 방법과 해시 태그 테이블을 분리하여 게시글 아이디를 외래키로 사용하는 방법 2가지에 대해 고민해보았다. 해시 태그 방식 해시 태그 테이블을 사용했을 때는 매번 조인을 해야하고, 그에 따라 쿼리가 좀 더 복잡해지며, 데이터가 많아지면 조인으로 인한 성능 저하가 발생할 수 있다는 단점과 정규화를 통해 중복을 최소화하고, 태그에 대한 검색에서는 성능이 잘 나올 수 있다는 장점이 있다. 컬럼 방식 컬럼 방식으로 저장 시 검색에서 parsing 또는 like 연산에 의한 성능 저하가 발생하고, 정규화가 힘들다는 단점이 있지만, 테이블 구조가 심플하고, 조인이 없어..

카테고리 없음2023. 12. 27. 20:09[Spring] 환경 변수로 민감 정보를 감추는 방법

팀 프로젝트를 진행하게 되면 Github, Bitbucket과 같은 형상 관리 툴을 사용해야한다. 이때 프로젝트에 사용된 DB 주소나 Password, API Key 등의 민감 정보가 업로드 되지않도록 주의해야한다. 아래와 같이 민감 정보를 감추는 다양한 방법들이 존재하는데, 이번 포스팅에서는 환경 변수를 사용하는 방법에 대해 살펴보겠다. 환경 변수 사용 .gitignore를 이용해 민감 정보가 담긴 파일 따로 관리 Jasypt를 이용한 설정 파일 속성 값 암호화 Vault, spring cloud config와 같은 중앙화된 민감 정보 저장소 활용 application.yml 파일에 환경 변수 적용하는 방법 달러 기호와 중괄호를 이용해서 환경 변수를 적용할 수 있으며, spring 파일에서는 @Valu..

카테고리 없음2023. 12. 1. 16:46[TEST] 테스트 코드 작성 시 더 낮은 결합도를 가진 코드 만들기

테스트 코드를 작성했을 때의 장점 중에 더 좋은 설계, 더 낮은 결합도를 가진 코드를 만들 수 있다는 내용이 있었다. 더 낮은 결합도는 보통 내부에서 생성자를 통해 생성하는 것이 아닌 외부로부터 값을 주입 받는 식의 DI를 통해 해결할 수 있다. 그 과정을 실제 코드를 통해 기록을 남겨놓으면 더 이해가 쉬울 것 같아 적어본다. 테스트 상황 0~12 사이의 랜덤한 길이를 가진 패스워드를 생성하는 코드를 테스트 하고싶다. 잘못된 테스트 코드 작성 예시 @DisplayName("패스워드를 초기화한다.") @Test void passwordTest(){ //given User user = new User(); //when user.initPassword(); //then assertThat(user.getPas..

[Network] 네트워크 기초 개념 정리
카테고리 없음2023. 12. 1. 14:49[Network] 네트워크 기초 개념 정리

기초 지식 네트워크 네트워크란 두대 이상의 컴퓨터가 연결된 환경이며, 단순히 컴퓨터 2대를 케이블로 연결해도 그것은 네트워크이다. 인터넷은 전 세계의 네트워크가 연결된 환경으로 인공 위성과 광케이블 등 전 세계의 데이터를 통신하기 위한 물리적 환경과 ISP(Internet Service Provider)에 의해 구축되었다. ISP의 예시로 SKT, KT, U+와 같은 통신사가 있다. 패킷 패킷은 네트워크를 통해 전송되는 데이터의 조각이다. 큰 데이터를 한번에 보내지 않고 패킷으로 작게 나눠 보내는 이유는 너무 큰 데이터를 그대로 보내면 네트워크의 대역폭을 너무 많이 점유하기 때문에 다른 패킷의 흐름을 막을 수도 있기 때문이다. 작은 조각으로 나눠서 보내기 때문에 데이터를 받는 목적지(라우터)에서는 패킷을..

image