개발하면서 API 응답 값으로 Map으로 넘겨주거나 DTO 클래스나, ErrorResponse등 클래스를 넘겨주는 방식으로 사용합니다. 하지만 알기로는 응답 값이든 데이터를 주고받는 데 있어서 대부분 Map 의 사용을 지양하라고 합니다. 왜 그런지 간단하게 알아보겠습니다. Map의 사용을 지양하는 이유가 무엇일까요? Map을 사용할 때의 단점은 다음과 같습니다. 컴파일 에러를 유발할 수 없음 key 또는 value가 null이면 Map의 해당 필드 자체를 key로 가져가지 않음. String 텍스트를 Key로 사용함 가독성이 떨어짐 타입캐스팅 비용이 발생함 불변성을 확보할 수 없음 1. 컴파일 에러를 유발할 수 없음 Map의 Value는 Object 타입이다. 그리고 Object 클래스는 최상위 클래스..
웹 애플리케이션에서 컨트롤러를 테스트할 때, 서블릿 컨테이너를 모킹하기 위해서는 @WebMvcTest를 사용하거나 @AutoConfigureMockMvc를 사용하게 되는데 이 어노테이션들에 대해 알아보겠습니다. @WebMvcTest 일반적으로 사용하는 MVC 테스트용 어노테이션입니다. 해당 어노테이션을 명시하고 아래와 같이 MockMvc를 @Autowired하면 해당 객체를 통해 MVC테스트가 가능합니다. 이 어노테이션을 사용하면 MVC 관련 설정인 @Controller, @ControllerAdvice, @JsonComponent와 Filter, WebMvcConfigurer, HandlerMethodArgumentResolver만 로드되기 때문에, 실제 구동되는 애플리케이션과 똑같이 컨텍스트를 로드..
AWS를 비용 효율적으로 사용할 수 있는 방법에는 Reserved Instances와 Savings Plans, Spot Instances 세가지 방법이 있습니다. 이 세가지 방법에 대해 한번 알아보겠습니다. RI는 인스턴스를 예약 약정거는 방식 SP는 시간당 사용 금액을 미리 계산하는 방식 Spot Instance는 고객이 설정한 가격 선에서 싼 값에 올라온 인스턴스들을 가져다 쓰는 방식 만약 RI와 SP 둘다 결제해놓고 사용한다고 가정했을 때에는 RI가 우선순위가 더 높다. 📍 RI (Reserved Instances) AWS EC2의 요금은 한 달 기준으로 인스턴스를 사용한 시간에 따라 요금이 책정되는 방식입니다. 일정기간동안 인스턴스를 예약해서 사용을 하겠다는 의미이고, 옵션에 따라 다르지만 On..
Spring 을 개발하다보면 가끔 VO 혹은 DTO를 사용할 적이 있습니다. 겉보기엔 둘이 같아보이기도 한 둘을 어떠한 목적을 갖고 사용하는지에 대해 알아보려고 합니다. VO (Value Object) 값을 가지는 객체 데이터 불변이어야 하고, 저장된 값을 불러와야하는 경우에 사용합니다. 값이 같다면 동일한 객체 같은 객체인지 판단하기 위해 각 속성들의 값을 비교함 equals() 메서드와 hashcode() 메서드를 오버라이드해서 객체 비교를 구현합니다. 예를 들어, 서울의 지역번호를 저장할 때 서울의 지역번호는 상식적으로 '02' 이며, 이 번호는 변하는 값이 아닌 고정된 값입니다. 그렇기 때문에 VO로 저장하고 Getter로 호출하여 사용합니다. DTO (Data Transfer Object) ..
프로젝트를 진행해보면서 DB Connection과 쿼리로 인한 메모리 및 CPU 사용량이 비정상적인 경우를 종종 볼 수 있었습니다. 이 부분을 어떻게 관리하면 좋을까 고민하던 중 slow query라는 것을 알게되었고 또 그 쿼리로그를 슬랙으로 보낼 수 있다는 것을 알게 되어 여러 블로그를 참조하며 작성하였습니다. slowquery란? slowquery 는 클라이언트의 요청을 받아 응답하는 과정에서 오래 걸리는 query에 대한 log를 의미합니다. 특정 작업이 오래 걸린다면 log를 통해 원인을 파악할 수 있으니 slow query를 사용하면 분석이 가능할 것이라 생각합니다. 어떻게 슬랙으로 보낼까요? 전체 구조는 다음과 같습니다. 1.AWS RDS 설정 모니터링할 인스턴스의 slow query를 설정..
실습하는 과정에서 도커 데스크탑을 매번 어플리케이션으로 켜고 끄고하는 것이 불편하여 도커 데크스탑을 MAC zsh에서 간지나게 ON/OFF 하는 법을 공유하려고 합니다. 우선 터미널 (zsh 환경) 을 켜줍니다. $ vi ~/.zshrc FN + 화살표로 페이지를 조작할 수 있습니다. 혹은 gg (페이지 맨 위로 이동) , G (페이지 맨 아래로 이동) 편하신 방법으로 맨 아래로 이동 해줍니다. # docker ON alias odo="open -a Docker" # docker OFF function kdo() { ps ax|grep -i docker|egrep -iv 'grep|com.docker.vmnetd'|awk '{print $1}'|xargs kill } 위의 코드를 작성해주고 저장하여 vi..
주변의 추천으로 김창준님의 함께 자라기를 읽고 쓴 글입니다. 저는 작년과 올해 현재 많은 고민에 둘러싸여있습니다. 분명 더 많이 공부하고 노력하는 거 같은데 성장하는 느낌이 나지 않았습니다. 능력이나 의지가 부족하다 생각하여 저를 더 가혹하게 하기도 했습니다. 하지만 결국 나아지는 것은 없었습니다. 이 책을 보고 난 뒤에야 그런 생각들이 저를 괴롭힌다는 것을 깨달았습니다. 과연 나는 학습을 재대로된 방향으로 나아가고 있는가? 책은 이 방향성에 대해 힌트를 줍니다. 자신이 이미 가지고있는것을 잘 활용해라 자신이 하고 있는 것, 갖고 있는 것들을 항상 활용하여 밑거름으로 사용해라. 연결지어서 시너지 효과가 나게 하라. 경력과 실력은 비례하지않는다. 책에서 비유한 양치질 전문가가 인상 깊었습니다. 우리는 어릴..
Ingress 컨트롤러 를 Ingress-Nginx로 구성해보는 실습 중에 발생한 이슈에 대해 원인과 해결을 공유하고자 합니다. 사건 발단 강의에서는 Ingress-Nginx 버전 v0.47.0 으로 진행하여 인그레스 컨트롤러를 구성했습니다. 하지만 저의 k8s 에서는 "ingress-nginx-admission-patch" Pod가 자꾸 crashloopbackoff 상태가 되어 버리는 것입니다. (강의에서와 똑같이 따라해줬을 뿐인데 왜 저만 안될까요?) 문제해결시도 Ingress-nginx를 삭제하고 재설치해보는 작업 Ingress-Nginx 는 https://github.com/kubernetes/ingress-nginx#support-versions-table 여기서 다운 받을 수 있습니다. Gi..
안녕하세요 최근에 배운 Dockerfile 을 활용하여 간단하게 웹 서버를 만드는 실습을 해보며 그것을 기록하고자 글을 작성합니다. 1. Dockerfile 작성 도커는 Dockerfile 파일만 읽어서 빌드하기 때문에 dockerfile 이 여러개일 경우에는 -f 옵션으로 해당 파일을 읽어가게 해주면 됩니다. rpm -Uvh ~~~(9행) -U : 기존 패키지가 있을 경우 업그레이드 , 없을 경우에는 -i 옵션과 같이 설치 -v : 설치 과정을 보여줍니다. -h : # 기호를 붙입니다. yum 라이브러리에는 nginx 패키지가 없기 때문에 url로 설치해줬습니다. EXPOSE와 PORTS 차이 (참고) -> ports는 호스트 포트와 컨테이너 포트를 모두 노출시키기 때문에, 호스트 내부의 컨테이너 - ..
Ansible 에 대해 공부하는 중 시스템을 관리하고 배포한다는 점에서 docker 와 되게 비슷하다고 생각하였습니다. 그 둘의 차이를 조사한 결과 쉽게 말해서, Ansible은 서버 구성 및 자동화 도구이고 docker 는 가상머신 플랫폼 및 컨터이너 기반 이라는 것을 알았습니다. 만약 서버가 50대 있고 nginx를 설치한다던가 시스템 계정을 만든다던가 그러면 일일이 50대를 다 들어가서 설정해줘야하는 불편함이 있을 것입니다. 하지만 그런 불편함을 Ansible 이 대신 한번에 다 해줍니다!! 위에서 말한 것들을 확인해보기 위해 실제로 Ansible 실험환경을 구축하여 nginx를 배포해보는 작업을 해보겠습니다. (참고) 우선, docker 로 대상 컨테이너(worker) 2개와 서버 컨테이너(ans..
- Total
- Today
- Yesterday
- 스위치
- 초보
- 개발자
- spring
- aws
- 라우터
- rds
- 계층
- 회고
- Spring Boot
- 3Way Handshake
- 자바
- 회고록
- .NET
- SpringBoot
- Docker
- 삽질
- osi7계층
- s3
- 라우팅
- java
- 알고리즘
- 프로토콜
- ec2
- dto
- 프로그래머스
- 네트워크
- lambda
- 개발
- tcp
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |