fas

ALL

· PROJECT/KOSA
⌨️ Docker 도커에 대해 공부하고 이전에 팀원이 배포한 환경에서 몇 가지를 고려하여 변경하여 적용하였다. 그러면서 있었던 문제들에 대해 기록해두고자 한다. 1. Docker-compose 우선 첫 번째는 Docker-compose 파일이다. 1.1. Docker Life Cycle 관리 우리 서비스는 그래도 Spring Cloud Gateway와 Feign Client를 사용한 MSA 아키텍처로 설계했다. 우선 기술적 난도와 활용도에 대해서는 차치하고 위 방식에서 Docker-compose로 실행을 하려니 이런 문제점이 발생했다. Eureka 서버가 가장 먼저 켜져야한다. Config와 Gateway는 크게 개의치 않으나 Eureka 다음에 켜지는 것이 좋다. MySQL과 Redis 서버는 API와..
· INFRA/Docker
1. Docker 1.1. Docker란 무엇인가? 데이터 또는 프로그램을 격리시키는 기능을 제공하는 소프트웨어 주로 서버에서 사용된다. 클라이언트에서도 사용할 수는 있지만 현재는 서버에서 사용이 주 용도이다. Docker는 여러 가지 프로그램이 함께 동작되는 환경에서 각각의 프로그램을 격리하는 기능을 제공한다. 컨테이너와 도커 엔진 격리된 프로그램을 담고 있는 하나의 단위를 컨테이너라 한다. 그리고 이것을 다루는 소프트웨어가 도커이다. 도커를 사용하려면 도커 소프트웨어의 본체인 엔진을 설치해야 한다. 컨테이너를 만들려면 이미지가 필요하다. 컨테이너에 독립된 프로그램이나 데이터를 넣어주는데 이를 이미지라 하고 컨테이너를 만들려면 이미지가 필요하다. 도커는 리눅스 컴퓨터에서 사용된다. 윈도우나 macOS에..
2023.12.06 - [PROJECT/KOSA] - [PROJECT] TIARY [PROJECT] TIARY 프로젝트 개요 프로젝트 개발 기간 : 12.04~12.29 프로젝트 인원 : 5인 개발 배경 : 텍스트 형 유튜브 같은 플랫폼 구축을 해보고 싶었습니다. 브런치스토리, 네이버의 유료 간행물등 정식으로 등록 romanc3.tistory.com 위 프로젝트에 대한 기능 추가 및 개선 작업을 진행하려합니다. 크게는 3가지 정도만 한 달여의 기간 동안 진행합니다. 1. 미숙한 부분에 대해 리팩토링 및 추가 공부 1.1. 기능 구현을 우선하느라 떨어진 코드 퀄리티 개선 1.2. 배포와 자동화에 대한 이해 1.2.1 로컬환경에서의 Docker 수동 배포 1.2.2 로컬환경에서의 Docker 자동 배포 1...
· DEV/How to
1. 전역 데이터 전역 데이터 (예, 자바의 public static 변수) 전역 데이터는 아무 곳에서나 변경될 수 있다는 문제가 있다. 어떤 코드로 인해 값이 바뀐 것인지 파악하기 어렵다. 클래스 변수(필드)도 비슷한 문제를 겪을 수 있다. "[[#1.1 변수 캡슐화하기 |변수 캡슐화하기]]"를 적용해서 접근을 제어하거나 어디서 사용하는지 파악하기 쉽게 만들 수 있다. 파라켈수스의 격언, "약과 독의 차이를 결정하는 것은 사용량일 뿐이다." 1.1 변수 캡슐화하기 변수를 변경하는 것보다 변수를 사용하는 메서드를 변경하는 것이 더욱 쉽다. 메서드는 점진적으로 새로운 메서드로 변경할 수 있으나, 데이터는 한 번에 모두 변경해야 한다. 데이터 구조를 변경하는 작업을 그보다는 조금 더 수월한 메소드 구조 변경..
· DEV/How to
긴 매개변수 목록 어떤 함수에 매개변수가 많을수록 함수의 역할을 이해하기 어려워진다. 과연 그 함수는 한가지 일을 하고 있는게 맞는가? 불필요한 매개변수는 없는가? 하나의 레코드로 뭉칠 수 있는 매개변수 목록은 없는가? 어떤 매개변수를 다른 매개변수를 통해 알아낼 수 있다면, "매개변수를 질의함수로 바꾸기"를 사용할 수 있다. 기존 자료구조에서 세부적인 데이터를 가져와서 여러 매개변수로 넘기는 대신 "객채 통째로 넘기기"를 사용할 수 있다. 일부 매개변수들이 대부분 같이 넘겨진다면, "매개변수 객체 만들기"를 사용할 수있다. 매개변수가 플래그로 사용돤다면, "플래그 인수 제거하기"를 사용할 수 있다. 여러 함수가 일부 매개변수를 공통적으로 사용한다면 "여러 함수를 클래스로 묶기"를 통해 매겨변수를 해당 ..
1. 동적 계획법 복잡한 문제를 여러 개의 간단한 문제로 분리하여 부분의 문제들을 해결함으로써 최종적으로 복잡한 문제의 답을 구하는 방법 1.1. 동적 계획법의 핵심 이론 1.1.1. 동적 계획법의 원리와 구현 방식 큰 문제를 작은 문제로 나눌 수 있어야 한다. 작은 문제들이 반복하여 나타나고 사용되며 이 작은 문제들의 결괏값은 항상 같아야 한다. 모든 작은 문제들을 한번만 계산해 DP테이블에 저장하며 추후 재사용할 때는 이 DP테이블을 이용한다. 이를 메모이제이션 기법이라고 한다. 동적 계획법은 top-down 방식과 bottom-up 방식으로 구현할 수 있다. 1.1.2. 동적 계획법 대표 예시 피보나치 D[N] = D[N-1] + D[N-2] 동적 계획법으로 풀수 있는지 확인하기 D[1] = 1 D..
· DEV/WAU
⌨️ 테스트 코드 그리고 TDD 내가 여기서 말하고 싶은 건 TDD에 대한 찬양도 무조건적인 맹목도 아닌 테스트 코드 그리고, 충분한 테스팅에 대해 중요성에 대해 말하고 싶다. 1. TDD 테스트 주도 개발 (Test-Driven Development, TDD)은 소프트웨 개발 방법론 중의 하나로, 선 개발 후 테스트 방식이 아닌 선 테스트 후 개발 방식의 프로그래밍 방법을 말한다. 다시 말해 먼저 자동화된 테스트 코드를 작성한 후 테스트를 통과하기 위한 코드를 개발하는 방식의 개발 방식을 말한다. 1.1. TDD를 이용한 개발방법 1. 테스트 케이스 작성 2. 테스트 케이스를 통과하는 코드 작성 3. 작성한 코드 리팩토링 형식으로 이루어진다. 여기서 우리 같은 신입들은 많이 힘들어하는데, 나는 그 이유..
· DEV/How to
짧은 함수 vs 긴 함수 함수가 길 수록 더 이해하기 어렵다 vs 짧은 함수는 더 많은 문맥전환을 필요로 한다. "과거에는" 작은 함수를 사용하는 경우에 더 많은 서브루틴 호출로 인한 오버헤드가 있었다. 작은 함수에 "좋은 이름"을 사용했다면 해당 함수의 코드를 보지 않고도 이해할 수 있다. 어떤 코드에 "주석"을 남기고 싶다면, 주석 대신 함수를 만들고 함수의 이름으로 "의도"를 표현해보자. 사용할 수 있는 리팩토링 기술 대부분 함수 추출하기로 해결할 수 있다. 함수로 분리하면서 해당 함수로 전달해야 할 매개변수가 많아진다면 다음과 같은 리팩토링을 고려해볼 수 있다. 임시 변수를 질의 함수로 바꾸기 매개변수 객체 만들기 객체 통째로 넘기기 조건문 분해하기를 사용해 조건문을 분리할 수 있다. 같은 조건으..
· DEV/How to
중복코드 중복 코드의 단점 비슷한지, 완전히 동일한 코드인지 주의 깊게 봐야한다. 코드를 변경할 때, 동일한 모든 곳의 코드를 변경해야 한다. 사용할 수 있는 리팩토링 기술 동일한 코드를 여러 메소드에서 사용하는 경우, 함수 추출하기 코드가 비슷하게 생겼지만 완전히 같지는 않은 경우, 코드 분리하기 여러 하위 클래스에 동일한 코드가 있다면 메소드 올리기 1. 함수 추출하기 "의도"와 "구현" 분리(주관) 어떤 코드를 읽을 때 한 번에 술술 -> 의도 코드를 읽을 때 어떻게 작동하는 지 이해하려고 시간과 노력 -> 구현 무슨 일을 하는 코드인지 알아내려고 노력해야 하는 코드라면 해당 코드를 함수로 분리하고 함수 이름으로 무슨 일을 하는지 표현할 수 있다 한 줄짜리 메소드도 괜찮은가? 거대한 함수 안에 들어..
ckaanf
'분류 전체보기' 카테고리의 글 목록 (3 Page)