목록백앤드 개발일지 (66)
늘
프리코스를 진행하면서 새롭게 안 사실을 말하라고 하면 우선적으로 일급 컬랙션을 말할 것 같다. 긴 말은 생략하고 정의와 활용법 그리고 왜 사용하는 지를 알아보겠다!😄😄 일급컬렉션이란(First Class Collection)? - Collection을 Wrapping하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라고 한다. public class Cars{ List cars = new ArrayList(); Cars(List cars){ this.cars = cars; } ... } 역시 코드를 보는 게 이해하는 게 더 쉬울 것 같다! 위에 처럼 구현된 게 일급 컬렉션이다. 일급 컬렉션의 장점? 비즈니스에 종속적인 자료구조 Collection의 불변성을 보장 상태와 행위를 한 곳에서 관리 이..
시험기간이라 오랜만에 포스팅하는 것 같다...ㅠ 빨리 시험 끝났으면~😗😗 logback을 파일로 저장해도 좋지만, aws에서 제공해주는 cloud watch를 이용하면 로컬에 파일을 저장 안 해도 되고, 시각적인 지표도 볼 수 있으므로 더욱 유용하다. 따라서 springboot에서 logback으로 cloudwatch에 보내서 aws에서 관리하도록 하겠다. gradle implementation 'ca.pjer:logback-awslogs-appender:1.4.0' aws IAM 정책 설정 - CloudWatchAgentServerPolicy 정책을 추가해서 EC2에 연결 Cloudwatch-agent 설치 $ wget https://s3.amazonaws.com/amazoncloudwatch-agen..
🎐성능 테스트 목표🎐 성능 테스트 전략 수립 단계 중 가장 핵심은 바로 서비스할 소프트웨어에 대한 명확한 목표를 수립하는 것이다. 이 목표를 달성하기 위해 성능 테스트와 부하 테스트를 수행하고 튜닝작업을 진행한다. 만일 튜닝을 해도 목표를 달성하지 못한다면 하드웨어 증설이나 아키텍처 변경을 고려해 볼 필요가 있다. 서비스가 얼마나 빠른지(Time) 일정 시간 동안 얼마나 많이 처리할 수 있는지(TPS) 얼마나 많은 사람들이 동시에 사용할 수 있는지(Users)에 대해 이야기해야 한다. 성능 테스터의 관점에선 사용자가 Concurrent User 인지 Active User 인지가 중요합니다. Concurrent User : 웹 페이지를 띄어놓은 사용자처럼, 언제든지 부하를 줄 수 있는 사용자를 의미합니다...
학교 데이터베이스 수업을 들으면서 뒤로 갈수록 내용이 심화되고 좋은 정보도 많기에 글로 정리해보려고 한다!🤓🤓 Disk 구조 중요한 점은 File은 block단위로 디스크에 저장되고 메모리에 load 할 때는 page단위로 한다는 점이다. 그래서 block단위의 file들을 메모리에 가져올 때 transfer time이라는 비용이 발생한다. 이러한 transfer비용을 줄이기 위해서 cache가 등장한다. 이때, cache에서 read 할 땐 괜찮지만 update/delete 할 때는 디스크와의 동기화를 맞춰야 하는 게 중요하다.(db replication 할 때도 느꼈을 것이다) 이제 index를 보면 크게 두 가지로 나뉜다. unclustered Index : 엔트리 순서와 데이터 순서가 일치하지 않..
프로젝트가 거의 막바지 단계에 다다라서 운영할 때 꼭 필요한 로그를 찍으려고 한다. 이번 로그는 AOP를 이용해서 찍었지만 다음번에는 인터셉터를 이용해서 찍어보려고 한다. (경험은 많을수록 좋으니😇😇) Log설정 build.gradle implementation 'org.springframework.boot:spring-boot-starter-aop' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8' 우리는 aop를 적용할것이기 때문에 aop와 p6spy라이브러리를 추가해준다. slf4j slf4j2 p6spy는 나중에 정리해보도록 하겠다. 참고 주소는 글 맨 아래에 남겨두겠다! logback-spring.xml appli..
대용량 데이터 처리하는 방법에 여러 방법이 있다. Load Balancer Request를 연결된 서버들에게 나누어줌 장애 발생시 해당 LB(Load Balancer)에게 할당된 IP를 다른 LB에게 넘겨줌 DBMS 2개(Master-Slave = Primary-Secondary) primary(실제 서비스) primary에서 장애 발생시 secondary가 primary로 되고, 장애가 해결되도 primary는 secondary 역할을 하게 된다. primary(CUD), secondary(R) 두대를 두고 primary의 데이터를 secondary로 계속 Replication을 통해 복제한다. Object Storage Service (File-Server) 파일을 저장할 서버를 둘 경우 총 3개의 ..
프로젝트를 진행하면서 휴대폰 인증 기능이 추가되어 과정을 기록할 겸 적어보겠다. 이용한 api는 네이버 클라우드에서 제공해주는 한 달에 50건 무료인 api를 사용했다. https://www.ncloud.com NAVER CLOUD PLATFORM cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification www.ncloud.com 네이버 클라우드에 우선 가입을 해주고 콘솔에서 빨간 박스로 들어가 줍니다. 들어간 후 api 가이드에 따라 진행하면 수월하다. 친절하게 설명이 되어 있는데 설명에 따라 우선 프로젝트를 생성해 줍니다. 그 후 SMS를 눌러줍니다..
백신 2차까지 맞고 팔을 잃었지만 아직 나에겐 다른 한쪽 팔이 남았다 🤫🤫 귀와 팔 한쪽이 멀쩡하기 떄문에 우아한 세미나에서 기선님의 강의를 듣고 직접 적용해보고 정리해보려고 한다. 멋있음ㅋ META-INF/spring.factories 에서 이렇게 자동 설정을 한다. 이러한 자동설정들이 제공되어 있는 게 스프링 부트이다. 순서는 애플리케이션 설정한 빈이 먼저 등록되고 그 후에 자동 설정으로 제공하는 빈이 등록된다. 만약 앞에서 애플리케이션에서 설정한 빈 등록이 있고, 자동 설정으로 제공하는 빈의 빈 아이디가 중복이 되있다면 충돌 나서 애플리케이션이 뜨지 않는다. 또한 자동 설정으로 제공하는 빈끼리도 중복되면 충돌나서 애플리케이션이 뜨지 않는다고 한다. application.properties/ appl..
테스트코드를 작성해보면서 JUnit4나 5를 사용하는데 이번 포스팅에서 4와 5를 비교하고 JUnit5 사용법에 초점을 맞춰서 정리해두려고한다. Junit5 Platform: Junit으로 작성한 테스트를 실행해주는 런처를 제공한다. TestEngineApi 제공한다. Vintage: Junit3과 4를 지원하는 TestEngine 구현체 Jupiter: Junit5를 지원하는 TestEngineApI 구현체 Junit 5는 스프링부트 2.2 버전 이상부터는 기본적으로 의존성이 장착되어 따로 설정할 필요가 없다. Junit5의 애노테이션들 @Test - 테스트 메서드를 나타내주는 애노테이션이다. - Junit4와 달리 어떠한 속성도 선언하지 않는다. //Junit4 @Test(expected = Exce..
WHEN? 언제 무엇이 왜 사용되는가? - 로그인 처리 방식에 대해서 고민하면서 필터와 인터셉터를 공부했는데 둘이 비슷하다고 생각되고 둘 중에 어느 때에 무엇을 선택해야 할지 명확한 해답이 안 나와서 글을 적으면서 정리해보려고 한다. *공부를 하던 중 AOP와도 비교를 하는 글들이 보여서 짧게 추가해보았다. (개인적인 생각!) 우선 AOP는 앞서 필터와 인터셉터와는 다르게 비즈니스적 관점에서 사용할 때, 사용된다고 생각된다. ex) 로직의 시간 측정, 트랜잭션 관리, 에러 처리 등, 반면에 필터나 인터셉터는 인증/인가, 세션 체크, 인코딩 확인 등 좀더 웹과 관련된 공통 관심사 처리하는 느낌으로 구별하면 될 것 같다. 이제 본격적으로 필터와 인터셉터를 분석해 보겠다. 제목에서도 보았듯이 필터는 Dispa..