본문 바로가기

우아한테크코스 4기48

[AWS] EC2 하나를 생성하기 위해.. AWS를 이용하여 서버를 여는 것은 정말 간단합니다. AWS에서 누구나 쉽게 서버를 열 수 있도록 세팅을 해놓았기 때문이죠. 이번 포스팅에서는 EC2 인스턴스를 통해 서버를 열기 위해 AWS가 어떤 일을 해주는지 네트워크 과정에서 학습한 내용을 뇌피셜로 정리하고자 합니다. AWS Cloud 먼저 EC2 인스턴스를 열려면 회원가입이 필요합니다. 계정을 생성하면 AWS에서는 계정 id를 지정하여 구분합니다. 즉, 계정을 생성한 것 만으로 AWS Cloud를 생성할 준비를 모두 마치게 된 것이죠. AWS Cloud의 서비스는 계정 ID를 식별자로 달고 있기 때문에 다른 계정과 독립적으로 클라우드 서버를 운영할 수 있는 것입니다. 이제 계정을 생성한 것만으로 우리는 아래의 박스를 하나 갖게 됐습니다. 이제 이 .. 2022. 6. 27.
[Mysql] Index로 조회 성능 개선하기 데이터 베이스 테이블에 수백만건의 데이터가 존재한 상태로 특정 값을 조회하고자 할 때 모든 열을 다 살펴보는 것은 효율적이지 않습니다. 이 비효율성을 개선하기 위해 MySQL에는 index라는 개념이 존재합니다. 이번 포스팅에서는 MySQL을 기준으로 index에 대해 학습하고 조회 성능을 개선하는 사례를 공유하고자 합니다. Index 인덱스는 목차입니다. 혹은 특정 내용을 기반으로 쉽게 데이터를 탐색할 수 있도록 제공하는 무언가를 인덱스라고 부릅니다. 특정 데이터를 쉽게 탐색할 수 있도록 목차를 제공해주니 데이터의 양이 많아질 수록 SELECT 성능은 좋아집니다. 하지만 매 데이터를 INSERT, UPDATE, DELETE할 때 마다 새 목차를 생성하다 보니 데이터 변경 작업이 많아질수록 MySQL 자.. 2022. 6. 20.
[Spring] ATDD 가독성 개선기 우아한 테크코스 레벨 2의 핵심 미션인 지하철 미션은 인수 테스트 주도 개발(atdd)로 진행됩니다. 인수 테스트 주도 개발은 시나리오 형태의 요구사항을 먼저 테스트 코드로 작성하여 개발하는 방법론으로 사용자가 특정 api를 호출하는 과정에서 발생하는 모든 시나리오를 테스트 코드로 작성하여 테스트 코드가 성공하면 기능 구현이 종료되는 식의 테스트 방법입니다. 정상적인 시나리오, 예외 발생 시나리오 등 모든 시나리오를 테스트한다면 직접 애플리케이션을 구동하여 일일히 테스트하는 방법보다 그 비용이 훨씬 저렴하겠죠? 하지만 인수테스트를 작성하다 보면 웹 요청을 보내는 코드가 굉장히 길고 테스트를 실행하기위해 미리 준비해야하는 다른 협력객체들로 인해 실제 테스트하고자 하는 내용이 무엇인지 헷갈리는 경우가 있습니.. 2022. 5. 23.
[Spring] 로그백을 사용하여 로그를 남겨보자 ExceptionHandler를 이용하여 에러를 핸들링할 때 에러가 어디서 발생한지 알 수 없는 이슈를 겪은 적이 있습니다. 이 문제를 해결하기 위해 모든 ExceptionHandler 메서드에 e.printStackTrace()를 사용했는데요. 개발 과정에서는 충분히 사용할 수 있지만 실제 프로그램을 운영할 때 해당 메서드를 이용해서 로깅을 하는 것은 적절하지 않다고 생각했습니다. 서버가 종료되면 어디서, 어떤 이유로 에러가 발생하는지 알 수 없기 때문입니다. 이 문제를 해결하기 위해 spring-boot-starter-web dependency에서 제공하는 logback 라이브러리를 이용하여 로깅을 남기고 로컬에 저장하는 과정을 학습해보았습니다. AS-IS @RestControllerAdvice pu.. 2022. 5. 13.
[Spring] 스프링의 일관된 예외처리 스프링에서 제공하는 데이터 접근 객체는 데이터 접근 기술을 쉽고 일관된 방법으로 사용하게 만들고자 하는 목적을 갖고 있습니다. 덕분에 데이터 접근 기술을 변경이 쉽죠. 그 중에서도 각 기술이 변경되더라도 에러 처리에 대한 걱정을 하지 않아도 되는 부분이 발군입니다. 이번 포스팅에서는 스프링이 어떤 방식으로 일관된 예외처리를 제공하는지 살펴보고자 합니다. 일관된 예외 계층 구조 스프링은 데이터 접근 기술 중심적인 예외를 일관된 방법으로 처리하는 것을 지원합니다. 아래 코드를 통해 간단히 살펴보겠습니다. jdbcTemplate에서 update 메서드를 이용하면 JdbcOperation에서 상속한 update를 이용하여 쿼리를 날립니다. JDBC api의 executeUpdate를 써서 만약 에러가 발생하면 .. 2022. 5. 12.
[SQL] 페이징 구현하기 만약 수백만건의 데이터가 있는 상태로 아래 쿼리를 호출하면 어떨까요? SELECT * FROM table; 데이터를 조회하는 시간이 굉장히 오래걸릴 뿐 아니라, 해당 데이터를 처리하는 것 또한 어려움을 느낄 것입니다. 이 문제를 해결하기 위해 데이터를 조회할 때 페이지에 따라 해당 페이지에 출력할 데이터만 조회하는 페이징을 사용합니다. 이번 포스팅에서는 가장 대중적인 방식의 페이징을 소개하고자 합니다. Offset Pagination offset Pagination은 offset과 limit를 지정하여 DB에서 출력하고자 하는 데이터 범위만큼의 데이터만 조회하는 방식입니다. 위 사진처럼 search.page=4를 지정해두고 해당 요청을 기반으로 offset을 설정해 페이지네이션을 할 수 있는 것이죠. s.. 2022. 5. 7.