전체 글 62

Redis를 이용한 조회성능 향상시키기

프로젝트를 진행하던 중 아이템 조회 쪽이 자주 방문하게 되는 것을 알게되었다.설계에 대한 아쉬움이 있긴하지만 아이템 조회는 이미지를 가져오는 공간이기 때문에 매번 db에 접근하기위해 쿼리를 날린다는 것이 성능에 대한 이슈가 있을 것 같았다. 심지어 한번 조회할 때마다 30개의 쿼리가 날라간다. 그래서 자주 방문하는 곳을 성능을 생각하며 방문할 수 없을까라는 생각이 들었다. 검색해보니 인메모리 데이터 구조 저장소인 Redis를 알게되었고 캐싱개념을 공부해보았다. Redis란Key,Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스기반의 비관계형 데이터 베이스 관리 시스템이다. 데이터베이스, 캐시, 메세지, 브로커로 사용되고 인메모리 데이터 구조를 가진 저장소이다.인메모리란 무엇일까?In-m..

카테고리 없음 2024.08.31

000.get~~ vs ~~Repository.findBy000 차이

프로젝트를 하던 중 궁금중이 생겼다.제목 그대로  Character character = characterRepository.findByUserId(userPrincipal.getId()).orElseThrow(CharacterNotFoundException::new); List quests = character.getQuests();//둘의 차이는??qeustRepository.findByCharacter(character)이 둘의 차이가 궁금해졌다.List quests = character.getQuests();이 코드는 @oneTomany를 사용할 경우즉 양방향 관계에서 많이 사용된다.근데 개발을 하다보면 양방향 관계를 많이 사용하지 않게 된다.그래서 자연스럽게 qeustRepository.find..

카테고리 없음 2024.08.24

6- ci/cd (2)

수동으로 배포해보자 ec2 인스턴스를 생성하고 Spring Boot 서버를 띄어보는 것 까지 진행한다. 인스턴스 생성하고 보안그룹 설정하는건 이 블로그를 참고하였다. https://bcp0109.tistory.com/356 AWS 1편: EC2 생성 후 Spring Boot 띄우기Overview AWS EC2 인스턴스를 생성하고 Spring Boot 서버를 띄워보는 것까지 진행합니다. 주 목표는 서버를 외부에 제공하는 거라서 따로 배포 시스템을 구축하지 않고 단순히 빌드 파일을 복사해서 수bcp0109.tistory.com그 다음 jar 파일을 생성하자 ./gradlew build명령어를 입력하면프로젝트 파일위치에서 build/lib폴더에 jar파일이 생성된다  이제 그 파일을 ec2서버에 올려보자 sc..

6- ci/cd (1)

ci/cd에 대해 알아보자 CI란? ci는 Continuous Integration의 약자로 지속적인 통합이라는 의미다.어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되고공유레포지토리에 통합하는 것을 의미한다. 이러한 환경에서 쓰면 좋다.다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경git과 같은 형상관리 툴을 사용할 때 많은 작업을 하면 commit들이 쌓이게 된다.그때 기능별로 빌드/테스트/병합(Merge)까지 하려면 상당히 번거롭게 된다.이런 상황에서 자동화된 빌드/테스트를 통해 원천 소스코드의 충돌 등을 방어할 수 있다.  MSA(Micro Service Archietecture) 환경최근 IT 업계에서 붐처럼 떠오르고 있는 아키텍처 모델이다.MSA는 작은 기능별로 서비스..

5- 동시성 처리 (2)

지난 시간에 동시성 처리에 대해 알아봤다더 이어서 알아보자 ConcurrentHashMap현업에서 제일 많이 사용하고 김영한 강사님도 언급한 ConcurrentHashMap이다.  hashtable vs hashmap vs  concurrentHashMap hashtable public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable { public synchronized int size() { } @SuppressWarnings("unchecked") public synchronized V get(Object key) { } public synchronized V put(..

5- 동시성 처리 (1)

동시성 처리에 대해 알아보자 동시성을 알아보기 전에 알아야하는 배경지식들이 많아 그거에 대해 먼저 알아보자. 동시성을 검색해보면 스레드 개념이 나온다.스레드란 무엇일까?? 스레드(Thread) 특정 작업을 수행하는 소프트웨어를 프로그램이라고 한다.이러한 프로그램이 실제로 실행되어 메모리나 CPU와 같은 자원을 할당받으면 이를 프로세스라고 한다.스레드는 이 프로세스를 구성하는 하나의 단위이다.하나의 프로세스에는 여러 스레드가 작동할 수 있다. 아무래도 같은 프로세스안에 여러 스레드가 존재하기 때문에 같은 자원을 공유할 수 있다. 같은 자원을 공유할 수 있다는 말은 동시에 여러가지 일을 같은 자원을 두고 수행할 수 있다는 것이고 이는 곧 병렬성의 향상으로 이어진다. 물론 여러 스레드에 대해 장점만 있는건 아..

4- 스프링 시큐리티 + jwt(2)

jwt에 대해 알아보자 jwt를 제대로 알아보기전에 비슷한 인증방식인 쿠키, 세션에 대해 먼저 알아보자 쿠키란?클라이언트가 웹사이트를 방문할 때 그 사이트가 사용하고 있는 서버를 통해 클라이언트 브라우저에 설치되는 작은 기록 정보 파일1. 브라우저가 서버에 요청을 보낸다.2. 서버는 클라이언트 요청에 대해 응답으로 클라이언트 측에 저장하고 싶은 정보를 응답 헤더의 Set-Cookie를 하여 보낸다.3. 이후 클라이언트는 요청을 보낼 때마다 클라이언트에 저장된 쿠키를 요청 헤더의 담아 보낸다. 쿠기 단점1. 보안에 취약하다. 클라이언트가 서버로 보낼 때 그대로 값을 보내기 때문에2. 사이즈가 커질수록 네트워크 부하가 심해진다. 세션인증이러한 쿠키의 보안적인 이슈를 해결하기 위해 민간한 정보들을 서버측에 저..

3- 스프링 시큐리티 + jwt (1)

스프링 시큐리티에 대해 알아본다.스프링 시큐리티란?Spring Security는 인증, 권한, 관리 그리고 데이터 보호 기능을 포함하여 웹 개발 과정에서 필수적인 사용자 관리 기능을 구현하는데 도움을 주는 Spring의 강력한 프레임워크 일반적으로 로그인,로그아웃,세션관리, 권한관리 등 개발자들의 보안 관련 기능을 효율적이고 신속하게 구현할 수 있도록 도와준다. 스프링 시큐리티 사용하는 이유?시큐리티를 사용하지 않고 코드를 직접 작성하면 IoC/DI 패턴과 같은 확장 패턴을 염두해서 인증/인가 부분을 직접 개발하기는 쉽지 않다. 하지만 스프링 시큐리티는 이와 같은 기능들을 제공해 주어서 개발 작업 효율을 높일 수 있다. 스프링 시큐리티 아키텍처는 무엇인가요?스프링에서 프레임워크나 라이브러리를 사용했을 때..

2- TDD(2)

테스트코드가 무엇이고 tdd 실전코드 지난 시간 스터디내용을 착각해서 tdd만 조사했다. 이번 시간은 테스트코드는 무엇인지, tdd의 실제코드를 알아보자. 테스트 코드는 소프트웨어의 기능과 동작을 테스트하는데 사용하는 코드이다. 결함을 찾아내고 수정하는 과정이다. 테스트코드를 작성하면 개발자는 소프트웨어가 어떻게 작동하는지, 예상치 못한 부작용을 방지할 수 있다. 또한 개발자간의 협업을 원활하게 하고, 문서화 작업을 줄일 수 있다. 테스트코드에는 단위 테스트, 통합테스트, 시스템 테스트, 사용자 인수 테스트 등 다양한 종류가 있다. 공통점은 기대한 입력값과 출력값을 반환하는지 확인한다. 차이점이 있다면 테스트 대상의 범위가 다르다. 1. 단위테스트란? 개별적인 코드단위(보통 함수, 메서드)가 의도한 대로..

1- TDD(1)

중요한건 실패하는 테스트코드를 작성할 때 까지 실제 코드를 작성하면 안된다. 또한 실패하는 테스트를 통과할 정도의 최소 실제 코드를 작성해야한다. 실제 코드에 대해 기대되는 바를 보다 명확하게 정의함으로써 불필요한 설계를 피할 수 있고, 정확한 요구 사항에 집중할 수 있다. 일반 개발 방식 VS TDD 개발 방식 일반 개발 방식 일반적으로 요구사항분석ㅡ>설계ㅡ>개발ㅡ>테스트ㅡ>배포의 형태로 개발주기를 갖는다. 이러한 방법은 개발을 느리게 하는 잠재적 위험이 존재한다. 1. 소비자의 요구사항이 처음부터 명확하지 않을 수 있다. 따라서 첨부터 완벽한 설계는 어렵다. 2. 자체 버그 검출 능력 저하 또는 소스코드의 풀질이 저하될 수 있다. 3. 자체 테스트 비용이 증가할 수 있다. 설계는 처음부터 완벽할 수 ..