반응형

전체 글 488

[Kotest] Kotest Spec으로 다양한 테스트 코드 스타일을 작성해보자

스프링에서 코틀린을 사용할 때, 테스트 도구로 JUnit뿐만 아니라 kotest를 사용할 수 있다. kotest는 다양한 테스트 스타일을 제공한다. JUnit과 유사한 Annotation Spec, String Spec, 그리고 우리가 흔히 사용하는 given when then 스타일을 사용할 수 있도록 Behaivor Spec을 제공해주기도 한다. DCI 패턴을 활용할 수 있도록 Describe Spec도 제공해준다. 이번 시간에는 kotest에서 제공해주는 spec을 살펴볼 것이다. kotest의 장점 JUnit, Mockito를 사용할 경우 Kotlin DSL을 사용하지 못한다는 단점이 존재한다. kotest를 활용하면 kotlin DSL을 사용해 더 코틀린스러운 테스트를 작성할 수 있게 된다. 위..

[AWS] Swap File을 이용해 EC2 메모리 부족 현상을 해결해보자

작업을 하던 중 aws ec2 메모리 부족현상이 발생했다. 우리가 사용하고 있는 t4g.micro 인스턴스 유형은 램이 1GB였고, 이는 메모리 부족현상을 충분히(?) 볼 수 있을 정도로 작은 양의 메모리였다. 이러한 현상을 어떻게 해결할까 고민하다가 swap file을 이용한 swap memory 할당이라는 방법을 알게 됐다! 스왑 파일을 이용한 스왑 공간 할당 ec2 램 메모리가 가득 찼기 때문에 실제 디스크의 용량을 이용하여 부족한 메모리를 대체할 공간을 swap memory(스왑 공간)이라 한다. 이번 포스팅에서는 linux에서 swap file을 생성하여 스왑 메모리를 할당하는 방법을 기록할 것이다. 보통 swap memory는 할당된 램 메모리의 2배 또는 그 이상을 추천하고 있다. 내가 사용..

Infra/Aws 2022.08.13

[BOJ] 백준 16288. Passport Control

알고리즘 스터디에서 나온 문제이다. 코드포스와 형식이 비슷해보여서 코포 연습 겸 블로그에 포스팅해보려 한다. 문제는 아래와 같다. https://www.acmicpc.net/problem/16288 16288번: Passport Control 입력은 표준입력을 사용한다. 첫 번째 줄에는 두 개의 정수 N 과 k 가 주어진다. N은 입국 승객의 수이며 k는 여권 심사 창구의 수이다. 단, 2 ≤ k ≤ N ≤ 100 이다. 그리고 두 번째 줄에는 승객이 입 www.acmicpc.net 문제가 잘 이해가 안돼서 [3, 1, 2]의 경우는 언제 가능한지 궁금했는데, Q1 (첫번째 통로)에 1, 2 / Q2에 3을 이동시킨 후에 출구로는 2번째 통로에서부터 나오게 하면 된다. 의식의 흐름 및 해설 이민을 가려 ..

PS/BOJ 2022.08.12

[JAVA] IoC, DI, DIP

친구와 얘기하던 중, Spring IoC, DIP 개념에 대한 얘기가 나왔다. 이 개념들은 구글링하면 워낙 잘 정리된 글들이 많아 별도로 작성하지 말까 고민도 했다. 하지만 해당 개념들은 객체지향에서 매우 중요하기 때문에 한번쯤은 포스팅하는 것이 좋을 듯하여 정리해보려 한다. IoC(제어의 역전) Inversion of Control, 즉 IoC는 제어의 역전이라고 번역된다. 쉽게 말하자면 어떤 객체에 대한 관리를 나 대신 다른 애한테 맡긴다는 것이다. 스프링을 쓴다면 스프링에게 특정 객체의 생성과 소멸을 빈으로 등록해 맡겨주는 것으로 생각하면 된다. 즉, 제어권을 내가 아닌 스프링 컨테이너에게 빈의 생성, 의존 관계 설정을 맡기는 것이므로 IoC가 이루어지는 것이다. 스프링을 사용하지 않는다고 하더라도..

[AWS] AWS Educate에서 더 이상 무료 프리티어 기능을 제공해주지 않는 것 같다

학교 계정으로 AWS Educate을 이용해 신용카드 없이 ec2 인스턴스를 생성해보려 했다. 그래서 aws educate를 접속하고 로그인해본 결과... 예전과는 다르게 사이트 UI가 싹 바뀌고 Console 접속하는 버튼이 사라진 것을 확인할 수 있었다. 구글링하면 분명 aws educate으로 console에 접속하여 신용카드 등록하여 가입하는 과정 없이 ec2를 생성할 수 있다고 하는데... 신용카드가 없던 나에겐 한줌의 단비같은 소식이었는데... 그래서 결국 방법을 도저히 찾지 못해 aws 고객센터에 콩글리쉬로 papago의 도움을 이용하여 겨우겨우 문의해보았다. 그리고 5분만에 바로 답장을 받았다! 19시에 메일을 작성해서 미국 기준으론 출근한 시간대여서 그런가, 매우 빠르게 답장이 왔다 ㅎㅎ..

Infra/Aws 2022.08.08

[Infra] Spring + JPA 환경에 Flyway를 적용해보자

flyway는 DB 형상관리 오픈소스 툴이다. 즉, db schema가 변경이 발생할 때 flyway라는 툴로 관리를 할 수 있는 것이다. 이번 포스팅에서는 flyway 적용 방법에 대해 아주 간단히 알아볼 것이다. Flyway 사용 이유 배포 환경(prod)에서는 ddl-auto를 create, update, create-drop을 지양해야 한다. 배포된 db의 데이터들이 모두 증발될 수 있기 때문이다. 따라서, db schema 변경이 있을 때에 우리가 직접 배포 환경 db에 접속하여 schema를 작성해주어야 한다. 이는 매우 번거로우며 위험성 또한 높다. Flyway를 사용하면 이러한 번거로운 작업이 사라지게 된다. 변경된 스키마를 한눈에 확인할 수 있어 스키마 버전 관리에 용이해진다. flywa..

Infra/CI | CD 2022.08.08

[JPA] Spring Data JPA 페이징 기법을 적용해보자

조회 쿼리로 결과가 나올 때, 데이터가 너무 많으면 사용자가 보기에도 불편하고 로딩에도 오랜 시간이 걸린다. 그렇기 때문에 많은 사이트들에선 많은 데이터들을 페이지로 나누어서 관리한다. 스크롤을 내릴 때마다 데이터를 추가로 로드하는 무한 스크롤 방식을 사용하거나, 이전/다음 페이지로 이동하는 방식이 주로 사용된다. 이렇게 페이징 기법을 적용하려면 전체 데이터 개수와 요구되는 페이지넘버에 따른 인덱싱 계산을 해주어야 하는데, 실수할 여지도 많고 꽤나 번거롭다. 다행히 Spring Data JPA에서는 스스로 페이지 관련 인덱싱을 계산해준 결과를 반환해주는 기능을 제공해준다. 이번 포스팅에선 Spring Data JPA의 Pageable, Page에 대해 알아보고 MVC 패턴에서 Pageable이 어디까지 ..

[Network] 프록시(Proxy)와 로드 밸런싱(Load Balancing)

HTTP를 HTTPS로 변환하는 과정을 진행하다보면 NGinx라는 것을 만나게 되고, NGinx는 리버스 프록시, 로드밸런싱 기능을 포함하고 있는 웹 서버 오픈소스임을 알게 된다. 리버스 프록시? 로드밸런싱? 이런 것들이 다 무엇일까? 이번 포스팅에선 이 내용들에 대해 기록해보려고 한다. 아마 컴퓨터공학과 전공 수업에서 잠깐 만났어서 익숙한 사람들도 꽤 있을 것 같다. 프록시 (Proxy) 흔히 포워딩 프록시(Forwarding Proxy)를 통상적으로 프록시라고 부른다. 프록시의 사전적 정의는 아래와 같다. 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수..

CS/Http, Network 2022.07.31

[JPA] Spring Data JPA로 생성일자, 수정일자 컬럼을 간단히 추가하자

Spring Data JPA에는 Auditing 기능을 편하게 다룰 수 있도록 @CreatedDate, @LastModifiedDate 어노테이션을 제공해준다. 그리고 생성일자, 수정일자 컬럼은 웬만한 모든 도메인에 있으면 로깅 및 사용자 입장에서도 간편하다. 따라서 보통 BaseEntity라는 생성일자, 수정일자가 들어있는 상위 엔티티를 만들고 상속 구조를 이용하는 방법을 진행한다. 이번 포스팅에서는 이 방법에 대해 기록해보려 한다. 개발환경 Spring Boot 2 버전 Spring Data JPA lombok 프로덕션 코드 BaseEntity @EntityListeners(AuditingEntityListener.class) @MappedSuperclass @Getter abstract public..

[220722] 우아한테크코스 2차 데모데이 후기

22일 금요일에 우테코 2차 데모데이가 있었다! 우아한테크코스에선 레벨3 두 달동안 프로젝트를 진행한다. 그리고 그 기간 중 2주마다 한 번씩 데모데이를 실시한다. 애자일하게 개발하도록 하여 2주마다 결과물을 업그레이드시켜서 발표하는 것이다. 우리는 모임 기반 롤링페이퍼 서비스 플랫폼을 준비했으며, 이번 2차 데모데이에는 모임, 회원에 대한 인증 및 인가 기능, 그에 따른 롤링페이퍼와 메시지 기능 추가작업을 진행했다. 그리고 백엔드에서는 Jenkins + AWS + Docker를 이용한 배포 작업이 진행됐으며, 프론트에서는 NGinx + AWS + Jenkins 배포 작업을 완료했다~ 이번 2차 데모데이 준비과정과 후기, 그리고 그 이후를 간단하게 포스팅하도록 하겠다. 참고로 우리가 개발하는 서비스 깃허..

반응형