
앱이나 웹에서 화면을 그리기 위해서 단 하나만의 API 요청만을 통해 그려지는 경우도 있지만, 한 페이지에 여러가지 정보를 뿌려주기 위해서 여러 API를 함께 요청하는 경우도 있다. 이럴 경우 한 화면을 불러오는 테스트하기 위해서 Request를 만들고 Repsonse에서 값을 얻어서 다시 Request에 복붙하고 Response를 다시 얻고... 하는 불편한 작업을 반복해서 최종 결과를 확인해야 한다. 예를 들어 내가 담당하는 서비스에서 습관 하나를 추가하기 위해서는 아래와 같은 작업 작업 순서가 필요하다. 1. 습관 카테고리 조회 (습관 카테고리 index를 얻음) 2. 습관 추가 (습관 카테고리 index를 사용) 3. 습관 조회 (습관 index를 얻음) 4. 습관 단건 조회 (습관 index로 ..

앞서 언급한 적이 있지만, 내가 담당하고 있는 서비스는 CI/CD가 없다. 하지만, 관리해야할 서버군은 요청을 앞단에서 받아줄 Apache Httpd 서버 6개, WAS가 있는 API 서버 6개, 실시간 위치정보를 다루는 WAS 3개, 배치서버 4개다. 한번 배포하는데만 시간 단위로 걸리고, 배포용 WAR파일을 수동으로 올리는데만도 몇 분씩 걸린다... 자사 서비스가 아니다보니 요청하기 어려 운점은 이해하겠지만 솔직히 말이 안된다고 생각한다. 심지어 TC도 따로 없고 데일리 빌드도 하지않으며, 프로젝트에 참여한 개발자가 개별 commit을 하고, pull request로 관리하지 않는다. 불만만 토로하게 되었는데 이러한 사항들 때문에, 다른 서비스는 어떻게 배포 과정을 갖는지 공부하게되는 계기가 됐고, ..

회사에서 어드민 서버를 신규 인프라로 이전하게 됐다. 베이스에서부터 작업하다보니 이전하면서 서버의 구조에 대해 볼 일이 생겼다. 우리 회사에서 사용하는 어드민의 서버 구조는 웹서버와 WAS를 연동시킨 구조였다. 대충 위와 같은 구조이고, 앞라인에 L4 로드밸런서를 둬서 로드밸런싱을 하고 있다. L4 부분까진 정확히 알 수 없으니, Httpd 웹서버와 Tomcat을 연동하면서 기억하고 싶었던 내용을 정리하려고한다. 그리고 위 내용을 정리하기 전에 웹서버와 WAS의 내용을 정리하지 않고 지나갈 수가 없었다.. 1. 웹서버(Web Server) 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 - 위키백과 위키백과의 정의와 같이 웹서버는..
List를 중복을 허용하지 않는 자료구조인 Set으로 변환해서 중복을 제거한다. Set distinctSet = pairingParents.stream().collect(Collectors.toCollection(() -> new TreeSet(Comparator.comparing(객체명::getter)))); Comparing에 대한 개념이 부족해서 여기에 관련된 내용은 조금 더 알아봐야겠다. sort의 predicate으로 많이 사용하는 것 정도로만 안다. Comparing은 함수형 인터페이스로 위 파라미터로는 객체 내의 getter로 가져온 값들을 비교해서 정렬해준다. List형태가 Set으로 변환되는데 나는 딱히 순서 필요없이 그대로 써도 되서 그냥 썼다. List로 변환하고 싶다면 다시한번 스트..

앞선 포스팅에서 Docker와 VM 구동 방식의 차이를 알아보았다. 여기서 Docker가 "왜 등장하게 됐는지"에 대한 설명은 마무리하고, "어떻게 사용할 것인가"에 대해 초점을 맞추어 정리해보려고 한다. 우선, Docker 웹 사이트에선 Docker를 아래와 같이 설명했다. Docker는 애플리케이션을 개발, 배송 및 실행하기 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리할 수 있으므로 소프트웨어를 빠르게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드를 신속하게 배송, 테스트 및 배포하기 위한 Docker 방법론을 활용하면 코드 작성과 프로덕션 환경에서 실행하는 사이의 지연을 크게 줄일 수 ..

학부생 시절에는 Windows 환경에서 Linux를 사용하기 위해서 VM ware, Virtual Box와 같은 가상화 소프트웨어들을 사용해서 가상 머신(Virtual Machine)을 구동시켜 사용했었다. 가상 머신의 단점은... 너무 느렸다. 설치부터 부팅까지의 소요 시간이 꽤나 컸다. 무슨 이유에서인지 구동이안돼 재설치라도 하는 날에는 정말 끔찍했었다. 때문에 근래엔 리눅스 환경에서 개발할 일이 있으면, Docker를 주로 사용하고 있다. Docker Hub와 같은 Docker Registry에 저장해 놓으면, 어디서든 같은 환경의 리눅스를 손쉽게 사용할 수 있다. 같은 가상화 환경을 제공하는데 VM과 Docker가 왜이리 차이가 나는지 알고 싶어 정리해봤다. 가상화는 데스크탑 가상화, OS 가상화..
매서드 참조 표현식 이중 콜론 연산자(::)는 람다식의 파라미터로 사용된다. 매서드 참조 표현식(method reference expression)이라는 정식 이름을 갖고 있다. 인스턴스명::메서드명 위와 같은 표현 방식을 사용한다. 인스턴스를 반복 생성 시에도 사용할 수 있는데 이때는 아래와 같이 사용한다. 인스턴스명::new 스태틱 메서드인 경우 인스턴스 대신 클래스 이름으로 사용할 수 있다. 말보다 예시가 쉬운 경우 이므로 아래와 같이 작성해봤다. public class TestMain { public static void main(String[] args) { List list = Arrays.asList("aaa", "bbb", "ccc", "ddd"); list.stream().map(elem..
JAVA 8 부터 지원하기 시작한 클래스. NPE(NullPointerException) 예방 용도로 만들어진 클래스다. Optional 클래스도 stream과 같이 중간연산이 있지만, 써본적도 없고 사용할 일도 없을 것 같기 때문에 따로 다루진 않겠다. 1. Optional 생성하기 Optional.empty() -> 빈 optional 객체 생성 Optional.of() -> 특정 값을 같는 Optional 객체 생성 Optional.ofNullbale() -> null을 가질수도 있는 Optinal 객체 생성 Optional.ofNullbale() 의 경우 파라미터의 값이 null일 경우 Optional.empty를 return 한다. 2. Optional 구현 매서드 get() -> Optiona..
- Total
- Today
- Yesterday
- docker
- cache
- JWT
- 티스토리챌린지
- AWS
- CORS
- GIT
- serverless
- 람다
- S3
- Kotlin
- 스프링부트
- lambda
- Log
- 인프런
- ecs
- 후쿠오카
- springboot
- AOP
- terraform
- AWS EC2
- java
- CloudFront
- 오블완
- Spring
- OpenAI
- EKS
- ChatGPT
- elasticsearch
- Redis
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |